查看: 1126|回复: 1

【瑞萨RA2系列开发板体验】LCD5110显示屏的驱动

[复制链接]

93

主题

136

帖子

8万

积分

管理员

11111

Rank: 9Rank: 9Rank: 9

积分
84460
QQ
发表于 2022-5-30 14:01:52 | 显示全部楼层 |阅读模式

【瑞萨RA2系列开发板体验】LCD5110显示屏的驱动

作者:李唐

本打算先解决GPIO口输入的问题,从而以按键来控制LED,但没有解决任何读取按键的状态,于是只好继续用GPIO的输出能力来驱动一个LCD5110显示屏。相较于I2C接口oled屏,它显示的信息会更多一些。
该显示屏是以SPI接口来工作的,它与开发板的连接关系如下:
SCE ---P301
RST ---P302
D/C ---P201
SDIN---P401
SCLK---P400
使用GPIO口输出更多电平的语句定义为:
#define LCD_RST_Clr()   R_PORT3->PODR &= ~(1 <<1);  //301
#define LCD_RST_Set()   R_PORT3->PODR |= (1 << 1);

#define LCD_CE_Clr()   R_PORT3->PODR &= ~(1 <<2);  //302
#define LCD_CE_Set()   R_PORT3->PODR |= (1 << 2);

#define LCD_DC_Clr()   R_PORT2->PODR &= ~(1 <<1);  //201
#define LCD_DC_Set()   R_PORT2->PODR |= (1 << 1);

#define SCLK_Clr()     R_PORT4->PODR &= ~(1 <<0);  //400
#define SCLK_Set()     R_PORT4->PODR |= (1 << 0);

#define SDIN_Clr()   R_PORT4->PODR &= ~(1 <<1);   //401
#define SDIN_Set()   R_PORT4->PODR |= (1 << 1);

实现字节数据发送的函数为:

  1. void LCD_write_byte(unsigned char dat, unsigned char command)
  2. {
  3. unsigned char i;
  4. LCD_CE_Clr();
  5. rt_hw_us_delay(2);
  6. IF(command==0)
  7. {
  8. LCD_DC_Clr();
  9. }
  10. else
  11. {
  12. LCD_DC_Set();
  13. }
  14. rt_hw_us_delay(2);
  15. for(i=0;i<8;i++)
  16. {
  17. if(dat&0x80)
  18. {
  19. SDIN_Set();
  20. }
  21. else
  22. {
  23. SDIN_Clr();
  24. }
  25. rt_hw_us_delay(2);
  26. SCLK_Clr();
  27. dat=dat<<1;
  28. rt_hw_us_delay(2);
  29. SCLK_Set();
  30. rt_hw_us_delay(2);
  31. }
  32. LCD_CE_Set();
  33. }
复制代码


显示屏的初始化函数为:
  1. void LCD_init(void)
  2. {
  3. LCD_RST_Clr();
  4. rt_hw_us_delay(1);
  5. LCD_RST_Set();
  6. LCD_CE_Clr();
  7. rt_hw_us_delay(1);
  8. LCD_CE_Set();
  9. rt_hw_us_delay(1);
  10. LCD_write_byte(0x21, 0);
  11. LCD_write_byte(0xa0, 0);
  12. LCD_write_byte(0x07, 0);
  13. LCD_write_byte(0x17, 0);
  14. LCD_write_byte(0x20, 0);
  15. LCD_clear();
  16. LCD_write_byte(0x0c, 0);
  17. LCD_CE_Clr();
  18. }
复制代码


显示屏的清屏函数为:
  1. void LCD_clear(void)
  2. {
  3. unsigned int i;
  4. LCD_write_byte(0x0c, 0);
  5. LCD_write_byte(0x80, 0);
  6. for (i=0; i<504; i++)
  7. LCD_write_byte(0, 1);         
  8. }
复制代码


实现显示效果的主程序为:
  1. int main(void)
  2. {
  3. R_PORT1->PDR |= (1 << 3);
  4. R_PORT1->PDR |= (1 << 4);
  5. R_PORT4->PDR |= (1 << 0);
  6. R_PORT4->PDR |= (1 << 1);
  7. R_PORT2->PDR |= (1 << 1);
  8. R_PORT3->PDR |= (1 << 1);
  9. R_PORT3->PDR |= (1 << 2);
  10. LCD_init();
  11. LCD_clear();
  12. LCD_write_english_string(0,0," Welcome to  ");
  13. LCD_write_english_string(0,1," Amy  studio ");
  14. LCD_write_english_string(0,2,"amy-studio.com");
  15. LCD_write_english_string(0,3," Nokia5110 LCD");
  16. LCD_write_chinese_string(12,4,12,4,0,5);
  17. while(1)
  18. {
  19. R_PORT1->PODR |= (1 << 3);
  20. R_PORT1->PODR |= (1 << 4);
  21. delay();
  22. R_PORT1->PODR &= ~(1 << 3);
  23. R_PORT1->PODR &= ~(1 << 4);
  24. delay();
  25. }
  26. }
复制代码


经编译和下载,其运行效果如图2所示。

图1 下载过程



图2 运行效果




图3 运行效果



图4 运行效果



回复

使用道具 举报

3

主题

195

帖子

1178

积分

金牌会员

Rank: 6Rank: 6

积分
1178
发表于 2023-3-14 11:39:45 | 显示全部楼层

不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 93帖子:136精华:9

lugl

主题: 52帖子:150精华:1

xujiwei263

主题: 18帖子:86精华:0

Juggernaut

主题: 12帖子:118精华:0

books咦

主题: 11帖子:11精华:2
快速回复 返回顶部 返回列表