查看: 3116|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2020-12-18 00:51:45 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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.jpg
    图1 功能选择界面

    2.jpg
    图2 功能选择


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 03:05 , Processed in 0.115295 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.