[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】LCD5110显示屏的驱动

[复制链接]
7765|5
 楼主| jinglixixi 发表于 2021-8-19 21:42 | 显示全部楼层 |阅读模式
LCD5110显示屏是一款基于SPI接口的显示屏,其工作电压为3.3V,正常显示时工作电流200uA以下,适用于电池供电的便携式移动设备。
LCD5110满屏可显示30个字符,相当于LCD1602来讲,其速度是LCD1602的40倍,占用的I/O引脚则比LCD1602少。
在使用中,LCD5110显示屏与开发板的连接关系如下:
SCE ---RB7
RESET---RC0
DC  ---RC5
SDIN ---RC4
SCLK ---RC6
LED ---RC1
在MCC中的引脚配置如图1所示,相应的引脚命名如图2所示。
图1 引脚配置
图2 引脚命名
用于在驱动程序设计中需用到延时函数,故启用的了系统的延时功能,其配置如图3所示。
图3 配置延时功能
LCD5510显示屏的初始化函数为:
  1. void LCD5510_Init(void)
  2. {
  3. __delay_ms(800);
  4. RST_SetLow();
  5. __delay_us(2);
  6. RST_SetHigh();        
  7. LCD_write_cmd(0x21);            
  8. LCD_write_cmd(0x06);            
  9. LCD_write_cmd(0x13);            
  10. LCD_write_cmd(0xc8);            
  11. LCD_write_cmd(0x20);            
  12. LCD_write_cmd(0x0c);            
  13. LCD_write_cmd(Y_Page_Addr);     
  14. LCD_write_cmd(X_Col_Addr);        
  15. LCD_clr_scr();                           
  16. }

使用I/O口模拟SPI发送字节数据的函数为:
  1. void LCD_write_byte(unsigned char wbyte, unsigned char dat_cmd)
  2. {
  3. unsigned char i;
  4. if(dat_cmd)
  5. {
  6. DC_SetHigh(); //LCD_DC_H;
  7. }
  8. else                  
  9. {
  10. DC_SetLow(); //LCD_DC_L;
  11. }
  12. for(i = 8; i; i--)  
  13. {
  14. if(wbyte & 0x80)
  15. {
  16. SDIN_SetHigh();  //LCD_DIN_H;
  17. }
  18. else                  
  19. {
  20. SDIN_SetLow();  //LCD_DIN_L;
  21. }
  22. SCLK_SetLow();      //LCD_CLK_L;
  23. wbyte <<= 1;   
  24. __delay_us(1);
  25. SCLK_SetHigh();    //LCD_CLK_H;
  26. }
  27. }

实现清屏功能的函数为:
  1. void LCD_clr_scr(void)
  2. {
  3. unsigned int i;
  4. LCD_write_cmd(X_Col_Addr);
  5. LCD_write_cmd(Y_Page_Addr);
  6. for(i = 504; i; i--) LCD_write_dat(0x00);
  7. }

实现字符及字符串显示的函数为:
  1. void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat)
  2. {
  3. unsigned char i, j;
  4. c_dat -= 32;
  5. x <<= 3;             //8
  6. y <<= 1;             //16
  7. for(j = 0; j < 2; j++)
  8. {
  9. LCD_pos_byte(x, (y + j));
  10. for(i = 0; i < 8; i++)
  11. LCD_write_dat(Font_code[c_dat][8 * j + i]);           
  12. }
  13. }

  14. void LCD_prints(unsigned char x, unsigned char y, unsigned char *s_dat)
  15. {
  16. while(*s_dat && x < 10)
  17. {
  18. LCD_printc(x++, y, *s_dat);
  19. s_dat++;
  20. }
  21. }

实现图4所示显示效果的主程序为:
  1. void main(void)
  2. {
  3. SYSTEM_Initialize();
  4. LED_SetHigh();
  5. LCD5510_Init();
  6. LCD_prints(0,0,"PIC18F16Q41");
  7. LCD_prints(0,1,"LCD5510 ");
  8. LCD_prints(0,2,"jinglixixi");
  9. while (1)
  10. {
  11. // Add your application code
  12. }
  13. }

图4  显示效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
MianQi 发表于 2021-8-20 11:34 | 显示全部楼层
加一个传感器,显示一下数据怎么样?
 楼主| jinglixixi 发表于 2021-8-21 00:08 | 显示全部楼层
MianQi 发表于 2021-8-20 11:34
加一个传感器,显示一下数据怎么样?

正在做A/D转换,回头将他们俩组合到一块。
mintspring 发表于 2024-7-21 22:42 | 显示全部楼层
试过硬件实现吗,想看看怎么用MCC生成的SPI函数操作。
小明的同学 发表于 2024-7-27 17:46 | 显示全部楼层
看了很多人用SPI都是使用IO模拟。
小明的同学 发表于 2024-7-27 17:46 | 显示全部楼层
SPI的IO模拟实在是太简单了好用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部