0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【南京中科微CSM32RV20开发板试用体验】SPI接口显示屏驱动

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-30 10:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:李唐, 帖子地址:https://bbs.elecfans.com/jishu_2248438_1_1.html

前面介绍过I2C接口OLED屏显示驱动,这次介绍的是驱动SPI接口的显示屏,其中一款是LCD5110,一款是0.96寸的LCD显示屏,一款是 2.2寸TFT显示屏。
LCD5110是一款用用于诺基亚手机的显示屏LCD5110,该显示屏的显示效果如图1和图2所示。
poYBAGIBAduAS7W3AABOjQUxvIQ816.jpg
图1显示效果
poYBAGIBAd2AAbB0AABRowBIlLg922.jpg
图2显示效果
为驱动该显示屏,它与开发板的连接关系为:
CLK---PB0
DIN---PB1
DC ---PB2
RST---PB3
CS ---PB4
为驱动的方便,这里仍使用GPIO口来模拟SPI接口来实现,其输出高低电平的语句定义为:
#define LCD_CLK_LGPIO_Write(GPIOB,PIN0,GPIO_RESET)
#define LCD_CLK_HGPIO_Write(GPIOB,PIN0,GPIO_SET)
#define LCD_DIN_LGPIO_Write(GPIOB,PIN1,GPIO_RESET)
#define LCD_DIN_HGPIO_Write(GPIOB,PIN1,GPIO_SET)
#define LCD_DC_L GPIO_Write(GPIOB,PIN2,GPIO_RESET)
#define LCD_DC_H GPIO_Write(GPIOB,PIN2,GPIO_SET)
#define LCD_RST_LGPIO_Write(GPIOB,PIN3,GPIO_RESET)
#define LCD_RST_HGPIO_Write(GPIOB,PIN3,GPIO_SET)
#define LCD_CS_L GPIO_Write(GPIOB,PIN4,GPIO_RESET)
#define LCD_CS_H GPIO_Write(GPIOB,PIN4,GPIO_SET)
对LCD5110的初始化函数为:


  1. void LCD5110_Init(void)
  2. {
  3. Delay32M_ms(800);
  4. LCD_reset_hard;
  5. LCD_write_cmd(0x21);
  6. LCD_write_cmd(0x06);
  7. LCD_write_cmd(0x13);
  8. LCD_write_cmd(0xc8);
  9. LCD_write_cmd(0x20);
  10. LCD_write_cmd(0x0c);
  11. LCD_write_cmd(Y_Page_Addr);
  12. LCD_write_cmd(X_Col_Addr);
  13. LCD_clr_scr();
  14. }
复制代码


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


  1. void LCD_write_byte(unsigned char wbyte, unsigned char dat_cmd)
  2. {
  3. unsigned char i;
  4. LCD_CS_L;
  5. if(dat_cmd)
  6. {
  7. LCD_DC_H;
  8. }
  9. else
  10. {
  11. LCD_DC_L;
  12. }
  13. for(i = 8; i; i--)
  14. {
  15. if(wbyte & 0x80)
  16. {
  17. LCD_DIN_H;
  18. }
  19. else
  20. {
  21. LCD_DIN_L;
  22. }
  23. Delay_us(2);
  24. LCD_CLK_L;
  25. wbyte <<= 1;
  26. Delay_us(2);
  27. LCD_CLK_H;
  28. }
  29. LCD_CS_H;
  30. }
复制代码


清除显示屏的函数为:


  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. int main(void)
  2. {
  3. int16_t i;
  4. CLIC_Init();
  5. System_Clock_Init();
  6. GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
  7. GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
  8. GPIO_MODE_Init(GPIOB,PIN2,GPIO_MODE_OUTPUT);
  9. GPIO_MODE_Init(GPIOB,PIN3,GPIO_MODE_OUTPUT);
  10. GPIO_MODE_Init(GPIOB,PIN4,GPIO_MODE_OUTPUT);
  11. GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
  12. GPIO_Write(GPIOA,PIN8,GPIO_SET);
  13. LCD5110_Init();
  14. LCD_prints(0,0,"CSM32RV20");
  15. LCD_prints(0,1,"LCD5110 ");
  16. LCD_prints(0,2,"jinglixixi");
  17. while(1)
  18. {
  19. GPIO_Toggle(GPIOA,PIN8);
  20. for(i=0;i<10;i++)
  21. {
  22. Delay32M_us(50000);
  23. }
  24. }
  25. }
复制代码


对于另一款0.96寸的彩色LCD屏,它也是使用SPI接口工作。相较于LCD5110显示屏,该显示屏可以显示彩色的图片。
该显示屏的初始化函数为:


  1. void OLED_Init(void)
  2. {
  3. OLED_SCLK_Set();
  4. OLED_SDIN_Set();
  5. Delay32M_ms(800);
  6. OLED_WR_Byte(0xAE,OLED_CMD);
  7. OLED_WR_Byte(0x02,OLED_CMD);
  8. OLED_WR_Byte(0x10,OLED_CMD);
  9. OLED_WR_Byte(0x40,OLED_CMD);
  10. OLED_WR_Byte(0x81,OLED_CMD);
  11. OLED_WR_Byte(0xff,OLED_CMD);
  12. OLED_WR_Byte(0xA1,OLED_CMD);
  13. OLED_WR_Byte(0xC8,OLED_CMD);
  14. OLED_WR_Byte(0xA6,OLED_CMD);
  15. OLED_WR_Byte(0xA8,OLED_CMD);
  16. OLED_WR_Byte(0x3f,OLED_CMD);
  17. OLED_WR_Byte(0xD3,OLED_CMD);
  18. OLED_WR_Byte(0x00,OLED_CMD);
  19. OLED_WR_Byte(0xd5,OLED_CMD);
  20. OLED_WR_Byte(0x80,OLED_CMD);
  21. OLED_WR_Byte(0xD9,OLED_CMD);
  22. OLED_WR_Byte(0xF1,OLED_CMD);
  23. OLED_WR_Byte(0xDA,OLED_CMD);
  24. OLED_WR_Byte(0x12,OLED_CMD);
  25. OLED_WR_Byte(0xDB,OLED_CMD);
  26. OLED_WR_Byte(0x40,OLED_CMD);
  27. OLED_WR_Byte(0x20,OLED_CMD);
  28. OLED_WR_Byte(0x02,OLED_CMD);
  29. OLED_WR_Byte(0x8D,OLED_CMD);
  30. OLED_WR_Byte(0x14,OLED_CMD);
  31. OLED_WR_Byte(0xA4,OLED_CMD);
  32. OLED_WR_Byte(0xA6,OLED_CMD);
  33. OLED_WR_Byte(0xAF,OLED_CMD);
  34. OLED_WR_Byte(0xAF,OLED_CMD);
  35. }
复制代码


其图片显示函数为:


  1. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
  2. {
  3. unsigned int j=0;
  4. unsigned char x,y;
  5. if(y1%8==0) y=y1/8;
  6. else y=y1/8+1;
  7. for(y=y0;y;y++)
  8. {
  9. OLED_Set_Pos(x0,y);
  10. for(x=x0;x;x++)
  11. {
  12. OLED_WR_Byte(BMP[j++],OLED_DATA);
  13. }
  14. }
  15. }
复制代码


相应的显示主程序为:


  1. int main(void)
  2. {
  3. CLIC_Init();
  4. System_Clock_Init();
  5. GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
  6. GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
  7. OLED_ShowString(20,0,"CSM32RV20",16);
  8. OLED_ShowString(20,2,"OLED TEST",16);
  9. Delay32M_ms(2000);
  10. OLED_DrawBMP(0,0,128,8,BMP1);
  11. while(1);
  12. }
复制代码


经编译与下载,其显示效果如图3和图4所示。
pYYBAGIBAd-AHHubAABML_9ET2s052.jpg
图3显示字符串
pYYBAGIBAeGAGhbYAABKkvoPE5s453.jpg
图4显示图像
对于TFT显示屏,它相较于0.96寸LCD显示屏其显示尺寸要更大,故显示的内容也更多。
该显示屏的初始化函数为:


  1. void LCD_Init(void)
  2. {
  3. LCD_REST_Low();
  4. Delay32M_ms(20);
  5. LCD_REST_High();
  6. Delay32M_ms(20);
  7. LCD_CS_Low();
  8. LCD_WR_REG(0xCB);
  9. LCD_WR_DATA8(0x39);
  10. LCD_WR_DATA8(0x2C);
  11. LCD_WR_DATA8(0x00);
  12. LCD_WR_DATA8(0x34);
  13. LCD_WR_DATA8(0x02);
  14. LCD_WR_REG(0xCF);
  15. LCD_WR_DATA8(0x00);
  16. LCD_WR_DATA8(0XC1);
  17. LCD_WR_DATA8(0X30);
  18. LCD_WR_REG(0xE8);
  19. LCD_WR_DATA8(0x85);
  20. LCD_WR_DATA8(0x00);
  21. LCD_WR_DATA8(0x78);
  22. LCD_WR_REG(0xEA);
  23. LCD_WR_DATA8(0x00);
  24. LCD_WR_DATA8(0x00);
  25. LCD_WR_REG(0xED);
  26. LCD_WR_DATA8(0x64);
  27. LCD_WR_DATA8(0x03);
  28. LCD_WR_DATA8(0X12);
  29. LCD_WR_DATA8(0X81);
  30. LCD_WR_REG(0xF7);
  31. LCD_WR_DATA8(0x20);
  32. LCD_WR_REG(0xC0);
  33. LCD_WR_DATA8(0x23);
  34. LCD_WR_REG(0xC1);
  35. LCD_WR_DATA8(0x10);
  36. LCD_WR_REG(0xC5);
  37. LCD_WR_DATA8(0x3e);
  38. LCD_WR_DATA8(0x28);
  39. LCD_WR_REG(0xC7);
  40. LCD_WR_DATA8(0x86);
  41. LCD_WR_REG(0x36);
  42. LCD_WR_DATA8(0x48);
  43. LCD_WR_REG(0x3A);
  44. LCD_WR_DATA8(0x55);
  45. LCD_WR_REG(0xB1);
  46. LCD_WR_DATA8(0x00);
  47. LCD_WR_DATA8(0x18);
  48. LCD_WR_REG(0xB6);
  49. LCD_WR_DATA8(0x08);
  50. LCD_WR_DATA8(0x82);
  51. LCD_WR_DATA8(0x27);
  52. LCD_WR_REG(0xF2);
  53. LCD_WR_DATA8(0x00);
  54. LCD_WR_REG(0x26);
  55. LCD_WR_DATA8(0x01);
  56. LCD_WR_REG(0xE0);
  57. LCD_WR_DATA8(0x0F);
  58. LCD_WR_DATA8(0x31);
  59. LCD_WR_DATA8(0x2B);
  60. LCD_WR_DATA8(0x0C);
  61. LCD_WR_DATA8(0x0E);
  62. LCD_WR_DATA8(0x08);
  63. LCD_WR_DATA8(0x4E);
  64. LCD_WR_DATA8(0xF1);
  65. LCD_WR_DATA8(0x37);
  66. LCD_WR_DATA8(0x07);
  67. LCD_WR_DATA8(0x10);
  68. LCD_WR_DATA8(0x03);
  69. LCD_WR_DATA8(0x0E);
  70. LCD_WR_DATA8(0x09);
  71. LCD_WR_DATA8(0x00);
  72. LCD_WR_REG(0XE1);
  73. LCD_WR_DATA8(0x00);
  74. LCD_WR_DATA8(0x0E);
  75. LCD_WR_DATA8(0x14);
  76. LCD_WR_DATA8(0x03);
  77. LCD_WR_DATA8(0x11);
  78. LCD_WR_DATA8(0x07);
  79. LCD_WR_DATA8(0x31);
  80. LCD_WR_DATA8(0xC1);
  81. LCD_WR_DATA8(0x48);
  82. LCD_WR_DATA8(0x08);
  83. LCD_WR_DATA8(0x0F);
  84. LCD_WR_DATA8(0x0C);
  85. LCD_WR_DATA8(0x31);
  86. LCD_WR_DATA8(0x36);
  87. LCD_WR_DATA8(0x0F);
  88. LCD_WR_REG(0x11);
  89. Delay32M_ms(120);
  90. LCD_WR_REG(0x29);
  91. LCD_WR_REG(0x2c);
  92. }
复制代码


其字符界面显示函数为:


  1. void xianshi()
  2. {
  3. LCD_Clear(RED);
  4. BACK_COLOR=RED;
  5. POINT_COLOR=WHITE;
  6. LCD_ShowString(20,80,160,16,16,"CSM32RV20");
  7. LCD_ShowString(20,120,200,16,16,"2.4 SPI_TFT240*320");
  8. LCD_ShowString(20,240,160,16,16,"jinglxixi ");
  9. LCD_ShowString(20,280,200,16,16,"2022.1.16 ");
  10. }
复制代码


相应的图片显示函数为:


  1. void show_image(void)
  2. {
  3. int i,j,k;
  4. unsigned char picH,picL;
  5. Address_set(0,0,79,79);
  6. k=0;
  7. for(i=0;i<80;i++)
  8. {
  9. for(j=0;j<80;j++)
  10. {
  11. picH=gImage_cgq[k*2];
  12. picL=gImage_cgq[k*2+1];
  13. LCD_WR_DATA8(picH);
  14. LCD_WR_DATA8(picL);
  15. k++;
  16. }
  17. }
  18. }
复制代码


实现显示效果的主程序为:


  1. int main(void)
  2. {
  3. int16_t i;
  4. CLIC_Init();
  5. System_Clock_Init();
  6. GPIO_MODE_Init(GPIOB,PIN0,GPIO_MODE_OUTPUT);
  7. GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
  8. GPIO_MODE_Init(GPIOB,PIN2,GPIO_MODE_OUTPUT);
  9. GPIO_MODE_Init(GPIOB,PIN3,GPIO_MODE_OUTPUT);
  10. GPIO_MODE_Init(GPIOB,PIN4,GPIO_MODE_OUTPUT);
  11. GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
  12. GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_OUTPUT);
  13. GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT);
  14. GPIO_Write(GPIOB,PIN0,GPIO_SET);
  15. GPIO_Write(GPIOB,PIN1,GPIO_SET);
  16. GPIO_Write(GPIOA,PIN8,GPIO_SET);
  17. GPIO_Write(GPIOA,PIN10,GPIO_SET);
  18. GPIO_Write(GPIOA,PIN12,GPIO_SET);
  19. LCD_Init();
  20. LCD_Clear(RED);
  21. xianshi();
  22. Delay32M_ms(2000);
  23. LCD_Clear(BLACK);
  24. show_image();
  25. while(1)
  26. {
  27. GPIO_Toggle(GPIOA,PIN8);
  28. for(i=0;i<10;i++)
  29. {
  30. Delay32M_us(50000);
  31. }
  32. }
  33. return 0;
  34. }
复制代码


经编译与下载,其显示效果如图5和图6所示。
poYBAGIBAeOAFbfVAAA-79hrROI643.jpg
图5显示字符串
pYYBAGIBAeWATwe9AAA7fhYEMTw829.jpg
图6显示字符串


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 南京中科微
    +关注

    关注

    0

    文章

    60

    浏览量

    1369
  • CSM32RV20
    +关注

    关注

    0

    文章

    40

    浏览量

    459
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    EASY EAI Nano-TB(RV1126B)开发板试用】1、初识

    开发板,包装非常的精美。 开发套件 包装也是非常专业。 此次配备了10寸的显示屏。 【上电】 接入12V2A电源,并将TypeC接入USB2接口 【串口调试】 1、我们从设备管理器
    发表于 11-16 11:15

    【EASY EAI Nano-TB(RV1126B)开发板试用】+初识篇

    的摆放布局,见图2所示。 图2 内部摆放 取出显示屏,可发现随开发板所配置的器、配件,,见图3和图4所示。 图3 开发板及器件 图4 显示屏及配件 各器件的名称见图5所示,由于
    发表于 10-25 22:06

    【作品合集】中科昊芯Core_DSC280025C开发板测评

    试用体验】---LED闪烁灯 【中科昊芯Core_DSC280025C开发板试用体验】---定时器中断方式的LED流水灯 【中科昊芯Core
    发表于 09-18 10:52

    【作品合集】玄铁Banana Pi BPI-RV2开发板测评

    测试 作者:chen000000009【Banana Pi BPI-RV2开发板试用体验】开箱+硬件介绍 【Banana Pi BPI-RV2开发板
    发表于 09-17 10:58

    【免费试用】匠芯创D133CBS KunLun Pi开发板试用体验

    匠芯创D133CBSRISC-VKunLunPiV1.0是一款基于D13x芯片的人机交互应用开发板,配备4.3寸LCD显示屏以及电容触摸,支持DVP摄像头。开发板集成了USB烧录、T
    的头像 发表于 07-29 08:06 873次阅读
    【免费<b class='flag-5'>试用</b>】匠芯创D133CBS KunLun Pi<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>体验

    【BPI-CanMV-K230D-Zero开发板体验】+TFT显示驱动及信息显示

    对于BPI-CanMV-K230D-Zero开发板来讲,其标准的显示器配置是基于芯片ST7701的LCD显示屏,该显示屏显示分辨率为800
    发表于 07-02 11:03

    【Banana Pi BPI-RV2开发板试用体验】开箱上电

    BPI-RV2 RISC-V开源路由器之开箱上电 背景 现在刚好正在研究短距及网络相关的东东。 最近刚好有幸得到了一块香蕉派 BPI-RV2 RISC-V 开源路由器开发板。感谢电子发烧友
    发表于 06-26 19:51

    【Banana Pi BPI-RV2开发板试用体验】开发板介绍视频

    一. 开发板介绍香蕉派 BPI-RV2 RISC-V 路由器开发板采用矽昌通信 SF21H8898 芯片方案矽昌 SF21H8898 四核64位RISC-V 处理器, 1.25GHz主频得益于矽昌自
    发表于 06-24 23:51

    有奖丨米尔 瑞芯RK3506开发板免费试用

    米尔与瑞芯合作发布的新品基于瑞芯RK3506应用处理器的MYD-YR3506开发板免费试用名额来啦~~米尔提供了3块价值299元的MYD-YR3506
    的头像 发表于 06-19 08:04 853次阅读
    有奖丨米尔 瑞芯<b class='flag-5'>微</b>RK3506<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    爱芯32位MCU开发板AiP32RV15X介绍

    AiP32RV15X开发板是一款基于RISCV内核的32位MCU开发板,提供了板载调试器、RESET、WAKEUP按键、三色LED、CAN收发器、USB接口、UART、ADC、
    的头像 发表于 06-17 10:54 609次阅读
    中<b class='flag-5'>微</b>爱芯32位MCU<b class='flag-5'>开发板</b>AiP32<b class='flag-5'>RV</b>15X介绍

    有奖丨米尔 瑞芯RK3562开发板免费试用新增名额!

    米尔与瑞芯合作发布的新品基于瑞芯RK3562应用处理器的MYD-YR3562开发板免费试用名额增加
    的头像 发表于 06-13 08:04 854次阅读
    有奖丨米尔 瑞芯<b class='flag-5'>微</b>RK3562<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>新增名额!

    户外显示屏驱动的具体防护措施

    驱动在户外显示屏中的防水设计是确保显示屏长期稳定运行的关键之一。
    的头像 发表于 04-22 15:58 663次阅读

    基于RV1126开发板的按键测试方法与例程

    RV1126开发板的按键测试方法与例程详细描述
    的头像 发表于 04-15 17:03 831次阅读
    基于<b class='flag-5'>RV</b>1126<b class='flag-5'>开发板</b>的按键测试方法与例程

    有奖丨米尔 瑞芯YR3562开发板免费试用

    米尔与瑞芯合作发布的新品基于瑞芯RK3562应用处理器的MYD-YR3562开发板免费试用活动来啦~~米尔提供了3块价值599元的MYD-YR3562
    的头像 发表于 03-20 08:05 806次阅读
    有奖丨米尔 瑞芯<b class='flag-5'>微</b>YR3562<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动
    的头像 发表于 01-23 11:02 3425次阅读
    迅为RK3568<b class='flag-5'>开发板</b><b class='flag-5'>驱动</b>指南Linux中通用<b class='flag-5'>SPI</b>设备<b class='flag-5'>驱动</b>