瑞萨单片机论坛
直播中

jinglixixi

8年用户 1591经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注

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

本帖最后由 jinglixixi 于 2021-12-9 16:09 编辑

本打算先解决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 运行效果



附件: 您需要登录才可以下载或查看附件。没有帐号?注册

回帖(1)

march123456

2021-12-8 19:51:17
可以把整个工程上传么?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分