[活动专区] 【AutoChips 7801x MCU评测报告】+TFT2.4寸彩屏显示驱动

[复制链接]
1245|6
 楼主| jinglixixi 发表于 2020-6-10 07:53 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2020-6-10 07:55 编辑

使用SPI接口,还可以驱动TFT2.4寸彩屏。
TFT屏与MCU的连接关系为:
LCD_ SCK  ——PB11
LCD_ SDI  ——PB12
LCD_LED  ——3.3V
LCD_CS   ——GND
LCD_DC   ——PB5
LCD_ REST ——PB4
其余的两个引脚则接3.3V工作电源


定义GPIO口输出高低电平的语句为:
#define LCD_CS_High()    GPIO_SetPinLevel(GPIOA, GPIO_PIN8, GPIO_LEVEL_HIGH       // PA8
#define LCD_CS_Low()     GPIO_SetPinLevel(GPIOA, GPIO_PIN8, GPIO_LEVEL_LOW);

#define LCD_SCK_High()   GPIO_SetPinLevel(GPIOB, GPIO_PIN11, GPIO_LEVEL_HIGH);  // PB11
#define LCD_SCK_Low()    GPIO_SetPinLevel(GPIOB, GPIO_PIN11, GPIO_LEVEL_LOW);

#define LCD_SDI_High()    GPIO_SetPinLevel(GPIOB, GPIO_PIN12, GPIO_LEVEL_HIGH);  // PB12
#define LCD_SDI_Low()    GPIO_SetPinLevel(GPIOB, GPIO_PIN12, GPIO_LEVEL_LOW);

#define LCD_DC_High()     GPIO_SetPinLevel(GPIOB, GPIO_PIN5, GPIO_LEVEL_HIGH);   // PB5
#define LCD_DC_Low()      GPIO_SetPinLevel(GPIOB, GPIO_PIN5, GPIO_LEVEL_LOW);

#define LCD_REST_High()  GPIO_SetPinLevel(GPIOB, GPIO_PIN4, GPIO_LEVEL_HIGH);   // PB4
#define LCD_REST_Low()   GPIO_SetPinLevel(GPIOB, GPIO_PIN4, GPIO_LEVEL_LOW);

TFT屏的初始化函数为:
  1. void Lcd_Init(void)
  2. {
  3. LCD_REST_Low();
  4. mdelay(20);
  5. LCD_REST_High();
  6. mdelay(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);     //Power control
  33. LCD_WR_DATA8(0x23);   //VRH[5:0]
  34. LCD_WR_REG(0xC1);     //Power control
  35. LCD_WR_DATA8(0x10);   //SAP[2:0];BT[3:0]
  36. LCD_WR_REG(0xC5);     //VCM control
  37. LCD_WR_DATA8(0x3e);   //?????
  38. LCD_WR_DATA8(0x28);
  39. LCD_WR_REG(0xC7);     // VCM control2
  40. LCD_WR_DATA8(0x86);   // --
  41. LCD_WR_REG(0x36);     // Memory Access Control
  42. LCD_WR_DATA8(0x48);   // C8
  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);    // Display Function Control
  49. LCD_WR_DATA8(0x08);
  50. LCD_WR_DATA8(0x82);
  51. LCD_WR_DATA8(0x27);  
  52. LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  53. LCD_WR_DATA8(0x00);
  54. LCD_WR_REG(0x26);    // Gamma curve selected
  55. LCD_WR_DATA8(0x01);
  56. LCD_WR_REG(0xE0);    // Set Gamma
  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);    //Set Gamma
  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);    //Exit Sleep
  89. mdelay(120);
  90. LCD_WR_REG(0x29);    //Display on
  91. LCD_WR_REG(0x2c);
  92. }
清屏处理函数为:
  1. void LCD_Clear(uint16_t Color)
  2. {
  3. char VH,VL;
  4. uint16_t i,j;
  5. VH=Color>>8;
  6. VL=Color;
  7. Address_set(0,0,LCD_W-1,LCD_H-1);
  8. for(i=0;i<LCD_W;i++)
  9. {
  10.      for (j=0;j<LCD_H;j++)
  11. {
  12. LCD_WR_DATA8(VH);
  13. LCD_WR_DATA8(VL);
  14. }
  15. }
  16. }
实现图1和图2显示效果的主程序为:
  1. int main(void)
  2. {
  3. InitDelay();
  4. mdelay(200);
  5. GPIO_Configuration();
  6. Lcd_Init();
  7. LCD_Clear(RED);  
  8. BACK_COLOR=RED;
  9. POINT_COLOR=WHITE;
  10. LCD_ShowString(20,80,160,16,16,"AC8701 TEST");
  11. LCD_ShowString(20,100,200,16,16,"SPI_TFT 2.4'  240*320");
  12. LCD_ShowString(20,120,160,16,16,"jinglxixi ");
  13. mdelay(1000);
  14. LCD_Clear(WHITE);  
  15. show_imageh(10,300,1);
  16. while(1);
  17. }
图片1.png
1  文字显示效果

2的显示函数为:
  1. void show_imageh(unsigned int x,unsigned int y,unsigned int n)  //200*200
  2. {
  3. unsigned int i,j,k;
  4. unsigned int da;
  5. k=0;
  6. for(i=0;i<200;i++)
  7. {
  8.   for(j=0;j<200;j++)
  9. {
  10. //if(n==0) da=gImage_yj[k*2];
  11. if(n==1) da=gImage_zs[k*2];
  12. da<<=8;
  13. //if(n==0) da|=gImage_yj[k*2+1];
  14. if(n==1) da|=gImage_zs[k*2+1];
  15. POINT_COLOR=da;
  16. LCD_DrawPoint(x+i,y-j);
  17. k++;  
  18. }
  19. }
  20. }


图片2.png
2  图片显示效果

zeshoufx 发表于 2020-6-10 08:28 | 显示全部楼层
谢谢分享,,,,,,,,,,,,,
 楼主| jinglixixi 发表于 2020-6-10 08:29 | 显示全部楼层
zeshoufx 发表于 2020-6-10 08:28
谢谢分享,,,,,,,,,,,,,

感谢支持!!!
Cjy_JDxy 发表于 2020-6-10 09:07 | 显示全部楼层
这个很不错,楼主液晶不少
 楼主| jinglixixi 发表于 2020-6-10 09:19 | 显示全部楼层
Cjy_JDxy 发表于 2020-6-10 09:07
这个很不错,楼主液晶不少

积攒的小玩意儿,因为数码管显示模块比较耗电,且显示信息少,液晶屏会好一些。
JasonLee27 发表于 2020-6-10 17:18 | 显示全部楼层
jinglixixi 发表于 2020-6-10 09:19
积攒的小玩意儿,因为数码管显示模块比较耗电,且显示信息少,液晶屏会好一些。 ...

液晶屏不应该更耗电?
 楼主| jinglixixi 发表于 2020-6-11 07:55 | 显示全部楼层
JasonLee27 发表于 2020-6-10 17:18
液晶屏不应该更耗电?

除了大屏,基本上比数码管的要省。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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