微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 使用GPIO模拟SPI时序控制LCD5110

使用GPIO模拟SPI时序控制LCD5110

时间:10-02 整理:3721RD 点击:

使用GPIO模拟SPI是单片机开发中常用的一种手段,GPIO还可以模拟IIC等总线的时序,可以用在没有相应外设的处理器上,节省成本。

下面的代码是软模SPI写LCD5110的程序:

  1. void WriteByte(unsigned char byte,unsigned char dc)  
  2. {  
  3.     int i;  
  4.     CE(0);  
  5.     DC(dc);  
  6.     for(i=0;i<8;i++)  
  7.     {  
  8.         if(byte & 0x80)  
  9.             DIN(1);  
  10.         else  
  11.             DIN(0);  
  12.         CLK(0);  
  13.         // usleep(10);//LCD5110的响应速度很快,不加延时也行!  
  14.         CLK(1);  
  15.         // usleep(10);  
  16.         byte <<= 1;  
  17.     }  
  18.     CE(1);  
  19. }  

复制代码

下面的代码是刷新LCD的两个函数,第一个是使用84*48点阵的数组,第二个是使用84*6点阵的数组:

  1. int LCD_Buffer[48 * 84] =   
  2. {  0x00,};  
  3. void LCD_Refresh()  
  4. {  
  5.     unsigned int i,j,k;  
  6.     unsigned char data;  
  7.     WriteByte(0x40,0);  
  8.     WriteByte(0x80,0);  
  9.     for(i=0;i<6;i++)  
  10.     {  
  11.         for(j=0;j<84;j++)  
  12.         {  
  13.             for(k=0;k<8;k++)  
  14.             {  
  15.                 data >>= 1;  
  16.                 if( LCD_Buffer[ ( (i<<3) + k ) * 84 + j ] )  
  17.                     data |= 0x80;  
  18.             }  
  19.             // printf("%X ",data);  
  20.             WriteByte(data,1);  
  21.         }  
  22.         // printf("\r\n");  
  23.     }  
  24. }  
  25.   
  26. unsigned char nBitmapDot[] =                  // 数据表  
  27. {  
  28.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  29.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  30.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,  
  31.       0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  32.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  33.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  34.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  35.       0x00,0x06,0x0F,0x0F,0x07,0x0F,0x0E,0x1E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x01,  
  36.       0x01,0x01,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,  
  37.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  38.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  39.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  40.       0x00,0x3C,0x7E,0x7C,0x70,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,  
  41.       0xC0,0x30,0x78,0x78,0x78,0x7C,0x7E,0x7F,0x77,0x77,0xF3,0xF1,0xF0,0xF0,0x70,0x70,  
  42.       0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0xF0,0xE0,0xE0,0xC0,0x80,  
  43.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  44.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  45.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,  
  46.       0xFF,0xFF,0x7F,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFF,0x3F,0x0F,  
  47.       0x03,0x03,0x03,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  48.       0x01,0x01,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  49.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  50.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,  
  51.       0xF8,0x7E,0x3F,0x1F,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x07,0x03,  
  52.       0x01,0x80,0xC0,0xE0,0xF0,0xF8,0x7C,0x3E,0x0F,0x8F,0xC7,0x80,0x00,0x00,0x00,0x00,  
  53.       0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,  
  54.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  55.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,  
  56.       0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  57.       0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,  
  58.       0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,  
  59.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  
  60. };  
  61. void LCD_Refresh2(unsigned char *buff)  
  62. {  
  63.     unsigned int i,j;  
  64.     WriteByte(0x40,0);  
  65.     WriteByte(0x80,0);  
  66.     // for(i=0;i<6;i++)  
  67.     // {  
  68.         // for(j=0;j<84;j++)  
  69.         // {  
  70.             // WriteByte(buff[i*84 + j],1);  
  71.         // }  
  72.     // }  
  73.     for(i=0;i<6*84;i++)  
  74.     {  
  75.         WriteByte(buff[i],1);  
  76.     }  
  77. }  

复制代码

初始化GPIO以及LCD5110代码:

  1. GPIO_Init();  
  2.   
  3. GPIO_ConfigPin(PC,0,OUT);   //CLK  
  4. GPIO_ConfigPin(PC,1,OUT);   //DC  
  5. GPIO_ConfigPin(PC,2,OUT);   //DIN  
  6. GPIO_ConfigPin(PC,3,OUT);   //CE  
  7.   
  8. GPIO_ConfigPin(PA,15,OUT);  //LED  
  9.   
  10. while(i--)  
  11. {  
  12.     GPIO_SetPin(PA,15,1);  
  13.     usleep(50000);  
  14.     GPIO_SetPin(PA,15,0);  
  15.     usleep(50000);  
  16. }  
  17.   
  18. unsigned int data;  
  19.   
  20. WriteByte(0x21,0);  
  21. WriteByte(0xc8,0);  
  22. WriteByte(0x06,0);  
  23. WriteByte(0x13,0);  
  24. WriteByte(0x20,0);  
  25. WriteByte(0x0c,0);  
  26.   
  27. WriteByte(0x40,0);  
  28. WriteByte(0x80,0);  

复制代码

初始化LCD之后调用LCD_Refresh或者LCD_Refresh2即可看到图片显示。


制作的简单的显示gif图片的视频连接:http://v.youku.com/v_show/id_XMTgyMzI5NzI0MA==.html?spm=a2hzp.%208253869%20.0.0.IIMz9D&from=y1.7-2



审核真的好慢啊!

小编搞的不错  学习了               

你好!请问下有完整的代码吗?最近正在弄5110屏幕。有的话能给我发一份吗?万分感谢。

上面贴的就是全部代码,有LCD5110的操作函数,仔细看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top