回答

收藏

ART-Pi开发板 驱动TFT显示屏及功能界面设计

#竞赛 #竞赛 4253 人阅读 | 0 人回复 | 2020-12-18

本帖最后由 jinglixixi 于 2020-12-18 00:52 编辑

为实现桌面式智能家居控制系统的设计,TFT显示屏的使用是不可或缺的。本已购置一块2.8寸的触摸屏,但由于时间的紧张只能暂时舍弃了。
就开发板所能直接使用的GPIO资源看,暂时将显示屏的连接关系指定为:
CLK--- PH11
DIN--- PH12
RES---  PH13
DC --- PH15
CS--- PH7
BLK--- PH9

定义相关引脚输出高低电平的语句为:
#define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET)  //CLK
#define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET)

#define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET)  //DIN
#define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET)

#define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_RESET)  //RES
#define OLED_RST_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_SET)

#define OLED_DC_Clr()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET)  //DC
#define OLED_DC_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET)

#define OLED_CS_Clr()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_RESET)  //CS
#define OLED_CS_Set()  HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_SET)

#define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_RESET)  //BLK
#define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_SET)

配置相关引脚为输出功能的函数为:
  1. void app_TFT_init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_Initure;
  4. __HAL_RCC_GPIOH_CLK_ENABLE();
  5. GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15;
  6. GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
  7. GPIO_Initure.Speed=GPIO_SPEED_FREQ_LOW;
  8. HAL_GPIO_Init(GPIOH,&GPIO_Initure);
  9. LCD_LED_High();
  10. }
复制代码

TFT显示屏的初始化函数为:
  1. void Lcd_Init(void)
  2. {
  3. LCD_REST_Low();
  4. delay_ms(20);
  5. LCD_REST_High();
  6. delay_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. delay_ms(120);
  90. LCD_WR_REG(0x29);
  91. LCD_WR_REG(0x2c);
  92. }
复制代码

实现图标显示的函数为:
  1. void show_tbh(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<50;i++)
  7. {      
  8. for(j=0;j<50;j++)
  9. {
  10. if(n==0) da=gImage_tb[k*2];
  11. if(n==1) da=gImage_pwm[k*2];
  12. if(n==2) da=gImage_rtc[k*2];
  13. if(n==3) da=gImage_adc[k*2];
  14. if(n==4) da=gImage_tft[k*2];
  15. if(n==5) da=gImage_sz[k*2];
  16. if(n==6) da=gImage_kz[k*2];
  17. if(n==7) da=gImage_dht[k*2];
  18. da<<=8;
  19. if(n==0) da|=gImage_tb[k*2+1];
  20. if(n==1) da|=gImage_pwm[k*2+1];
  21. if(n==2) da|=gImage_rtc[k*2+1];
  22. if(n==3) da|=gImage_adc[k*2+1];
  23. if(n==4) da|=gImage_tft[k*2+1];
  24. if(n==5) da|=gImage_sz[k*2+1];
  25. if(n==6) da|=gImage_kz[k*2+1];
  26. if(n==7) da|=gImage_dht[k*2+1];
  27. POINT_COLOR=da;
  28. LCD_DrawPoint(x+i,y+j);
  29. k++;
  30. }
  31. }
  32. }
复制代码

实现界面显示效果的主程序是:
  1. int main(void)
  2. {
  3. Cache_Enable();
  4. HAL_Init();
  5. Stm32_Clock_Init(160,5,2,4);
  6. delay_init(400);
  7. delay_ms(200);
  8. app_TFT_init();
  9. Lcd_Init();
  10. LCD_Clear(WHITE);
  11. show_tbh(20,240,0);
  12. showhanzi16h(80,280,3,0);
  13. showhanzi16h(80,264,4,0);
  14. show_tbh(20,180,1);
  15. show_tbh(20,120,2);
  16. show_tbh(20,60,3);
  17. showhanzi16h(80,100,5,1);
  18. showhanzi16h(80,84,6,1);
  19. show_tbh(120,60,4);
  20. show_tbh(120,120,5);
  21. show_tbh(120,180,6);
  22. show_tbh(120,240,7);
  23. showhanzi16h(180,280,13,1);
  24. showhanzi16h(180,264,14,1);
  25. showhanzi16h(180,220,11,1);
  26. showhanzi16h(180,204,12,1);
  27. showhanzi16h(180,160,9,1);
  28. showhanzi16h(180,144,10,1);
  29. showhanzi16h(180,100,7,1);
  30. showhanzi16h(180,84,8,1);
  31. BACK_COLOR=WHITE;
  32. POINT_COLOR=RED;
  33. LCD_ShowCharh(80,160,'R',1);
  34. LCD_ShowCharh(80,152,'T',1);
  35. LCD_ShowCharh(80,144,'C',1);
  36. LCD_ShowCharh(80,220,'P',1);
  37. LCD_ShowCharh(80,212,'W',1);
  38. LCD_ShowCharh(80,204,'M',1);
  39. delay_ms(2000);
  40. LED_Init();
  41. while(1)
  42. {
  43. LED2(1);
  44. delay_ms(500);
  45. LED2(0);  
  46. delay_ms(500);
  47. }
  48. }
复制代码

经程序的编译下载,其显示效果图1和图2所示。
图1 功能选择界面

图2 功能选择


分享到:
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条