[活动专区] 【AT-START-F407测评】+2.8'TFT显示屏的驱动

[复制链接]
1279|0
 楼主| jinglixixi 发表于 2021-1-29 22:05 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2021-3-10 12:37 编辑

TFT显示屏有多种类型,常见有2.2 /2.4/2.8/3.2/3.5/4.0寸等,多采用SPI接口工作。
这里介绍的2.8寸显示屏也是采用SPI接口,且带有触摸的功能。
为了便于移植使用,这里以I/O口来模拟SPI接口来驱动它,其与MCU的连接关系如下:
CS---PB13
RES---PB11
DC--- PB12
SDA--- PB9
SCK--- PB8
BLK--- PB14
定义相关引脚输出高低电平的引脚为:
#defineLCD_CS_High()    GPIO_SetBits(GPIOB,GPIO_Pins_13)   //CS
#defineLCD_CS_Low()     GPIO_ResetBits(GPIOB,GPIO_Pins_13)

#defineLCD_REST_High()  GPIO_SetBits(GPIOB, GPIO_Pins_11)  //RES
#defineLCD_REST_Low()   GPIO_ResetBits(GPIOB,GPIO_Pins_11)

#defineLCD_DC_High()    GPIO_SetBits(GPIOB,GPIO_Pins_12)   //DC
#defineLCD_DC_Low()     GPIO_ResetBits(GPIOB,GPIO_Pins_12)

#defineLCD_SDI_High()   GPIO_SetBits(GPIOB, GPIO_Pins_9)    //SDA
#defineLCD_SDI_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_9)

#defineLCD_SCK_High()   GPIO_SetBits(GPIOB,GPIO_Pins_8)   //SCK
#defineLCD_SCK_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_8)

#defineLCD_LED_High()   GPIO_SetBits(GPIOB, GPIO_Pins_14) //BLK
#defineLCD_LED_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_14)
模拟SPI发送数据的函数为:
  1. void LCD_Writ_Bus(unsigned char com)  
  2. {      
  3. unsigned char uci;
  4. for(uci=0;uci<8;uci++)
  5. {
  6. if(com & 0x80)
  7. {
  8. LCD_SDI_High();
  9. }
  10. else
  11. {
  12. LCD_SDI_Low();
  13. }
  14. com = com << 1;
  15. Delay_us(1);
  16. LCD_SCK_Low();
  17. LCD_SCK_High();
  18. }      
  19. }

显示屏的初始化函数为:
  1. void tft_Init(void)
  2. {
  3. LCD_REST_Low();
  4. Delay_ms(50);
  5. LCD_REST_High();
  6. Delay_ms(50);
  7. LCD_WR_REG(0xCF);
  8. LCD_WR_DATA8(0x00);
  9. LCD_WR_DATA8(0xD9);
  10. LCD_WR_DATA8(0X30);
  11. LCD_WR_REG(0xED);
  12. LCD_WR_DATA8(0x64);
  13. LCD_WR_DATA8(0x03);
  14. LCD_WR_DATA8(0X12);
  15. LCD_WR_DATA8(0X81);
  16. LCD_WR_REG(0xE8);
  17. LCD_WR_DATA8(0x85);
  18. LCD_WR_DATA8(0x10);
  19. LCD_WR_DATA8(0x78);
  20. LCD_WR_REG(0xCB);
  21. LCD_WR_DATA8(0x39);
  22. LCD_WR_DATA8(0x2C);
  23. LCD_WR_DATA8(0x00);
  24. LCD_WR_DATA8(0x34);
  25. LCD_WR_DATA8(0x02);
  26. LCD_WR_REG(0xF7);
  27. LCD_WR_DATA8(0x20);
  28. LCD_WR_REG(0xEA);
  29. LCD_WR_DATA8(0x00);
  30. LCD_WR_DATA8(0x00);
  31. LCD_WR_REG(0xC0);
  32. LCD_WR_DATA8(0x21);
  33. LCD_WR_REG(0xC1);
  34. LCD_WR_DATA8(0x12);
  35. LCD_WR_REG(0xC5);
  36. LCD_WR_DATA8(0x32);
  37. LCD_WR_DATA8(0x3C);
  38. LCD_WR_REG(0xC7);
  39. LCD_WR_DATA8(0xC1);
  40. LCD_WR_REG(0x36);
  41. LCD_WR_DATA8(0x08);
  42. LCD_WR_REG(0x3A);
  43. LCD_WR_DATA8(0x55);
  44. LCD_WR_REG(0xB1);
  45. LCD_WR_DATA8(0x00);
  46. LCD_WR_DATA8(0x18);
  47. LCD_WR_REG(0xB6);
  48. LCD_WR_DATA8(0x0A);
  49. LCD_WR_DATA8(0xA2);
  50. LCD_WR_REG(0xF2);
  51. LCD_WR_DATA8(0x00);
  52. LCD_WR_REG(0x26);
  53. LCD_WR_DATA8(0x01);
  54. LCD_WR_REG(0xE0);
  55. LCD_WR_DATA8(0x0F);
  56. LCD_WR_DATA8(0x20);
  57. LCD_WR_DATA8(0x1E);
  58. LCD_WR_DATA8(0x09);
  59. LCD_WR_DATA8(0x12);
  60. LCD_WR_DATA8(0x0B);
  61. LCD_WR_DATA8(0x50);
  62. LCD_WR_DATA8(0xBA);
  63. LCD_WR_DATA8(0x44);
  64. LCD_WR_DATA8(0x09);
  65. LCD_WR_DATA8(0x14);
  66. LCD_WR_DATA8(0x05);
  67. LCD_WR_DATA8(0x23);
  68. LCD_WR_DATA8(0x21);
  69. LCD_WR_DATA8(0x00);
  70. LCD_WR_REG(0xE1);
  71. LCD_WR_DATA8(0x00);
  72. LCD_WR_DATA8(0x19);
  73. LCD_WR_DATA8(0x19);
  74. LCD_WR_DATA8(0x00);
  75. LCD_WR_DATA8(0x12);
  76. LCD_WR_DATA8(0x07);
  77. LCD_WR_DATA8(0x2D);
  78. LCD_WR_DATA8(0x28);
  79. LCD_WR_DATA8(0x3F);
  80. LCD_WR_DATA8(0x02);
  81. LCD_WR_DATA8(0x0A);
  82. LCD_WR_DATA8(0x08);
  83. LCD_WR_DATA8(0x25);
  84. LCD_WR_DATA8(0x2D);
  85. LCD_WR_DATA8(0x0F);
  86. LCD_WR_REG(0x11);
  87. Delay_ms(120);
  88. LCD_WR_REG(0x29);
  89. LCD_Clear(WHITE);
  90. }

配置相应工具为输出口的函数为:
  1. void AT32_LCD_Init(void)
  2. {
  3. GPIO_InitType GPIO_InitStructure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
  5. GPIO_StructInit(&GPIO_InitStructure);
  6. GPIO_InitStructure.GPIO_Pins =    GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14;        
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
  8. GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);
  10. LCD_LED_High();
  11. }

实现显示效果的主程序为:
  1. int main(void)
  2. {
  3. AT32_Board_Init();
  4. AT32_LCD_Init();
  5. tft_Init();
  6. AT32_jm();
  7. while(1) ;
  8. }
1.jpg
显示效果图







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

本版积分规则

521

主题

2949

帖子

39

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