查看: 4824|回复: 2

[原创] 基于LPC55S69-EVK开发板的2.8寸显示屏驱动

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7125
    最后登录
    2023-4-20
    发表于 2021-1-16 20:37:13 | 显示全部楼层 |阅读模式
    前段时间为参加RT-Thread x STM32 全连接创意创客大赛特意购置一个2.8寸的触摸屏,由于时间紧没有很好地排上用场,这段时间有了些空闲时间,决定让它在为LPC55S69-EVK开发板展示一下伸手。
    由于先前曾使用该开发板驱动过SPI接口的2.2寸串口屏,故打算不用厂家提供的例程,而是直接在2.2寸串口屏的程序上,直接修改初始化函数来解决。
    2.8寸显示屏的初始化函数为:
    1. void LCDv_Init(void)
    2. {
    3. LCD_REST_Low();
    4. SysTick_DelayTicks(50);
    5. LCD_REST_High();
    6. SysTick_DelayTicks(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. SysTick_DelayTicks(120);
    88. LCD_WR_REG(0x29);
    89. LCD_Clear(WHITE);
    90. }
    复制代码

    该显示屏与MCU的连接关系如下:
    SCK---PIO1_20
    SDI---PIO1_21
    D/C---PIO1_2
    RST---PIO1_3
    CS ---PIO0_26
    LED---PIO1_1
    其使用的引脚则是P17扩展接口上的引脚,其引脚分配如图1所示。
    T1.png
    1  P17扩展接口

    相关引脚输出高低电平的语句定义为:
    #define LCD_SCK_Low()   GPIO_PinWrite(GPIO, 1u, 20u, 0)  //CLK
    #define LCD_SCK_High()  GPIO_PinWrite(GPIO, 1u, 20u, 1)  //PIO1_20 FC4_I2C_SCL_ADD

    #define LCD_SDI_Low()   GPIO_PinWrite(GPIO, 1u, 21u, 0)  //DIN
    #define LCD_SDI_High()  GPIO_PinWrite(GPIO, 1u, 21u, 1)   //PIO1_21 FC4_I2C_SDA_ADD

    #define LCD_REST_Low()  GPIO_PinWrite(GPIO, 1u, 2u, 0)  //RES
    #define LCD_REST_High() GPIO_PinWrite(GPIO,1u, 2u, 1)   //PIO1_2    LSP1_HS_SCK

    #define LCD_DC_Low()    GPIO_PinWrite(GPIO, 1u, 3u, 0)  //DC
    #define LCD_DC_High()   GPIO_PinWrite(GPIO, 1u, 3u, 1)   //PIO1_3   LSP1_HS_MISO

    #define LCD_CS_Low()    GPIO_PinWrite(GPIO, 0u, 26u, 0)  //CS
    #define LCD_CS_High()   GPIO_PinWrite(GPIO, 0u, 26u, 1)   //PIO0_26 LSP1_HS_MOSI

    #define LCD_LED_Low()   GPIO_PinWrite(GPIO, 1u, 1u, 0)   //BLK
    #define LCD_LED_High()  GPIO_PinWrite(GPIO, 1u, 1u, 1)    //PIO1_1   LSP1_HS_SSEL1

    配置相关引脚为输出功能的函数为:
    1. void app_tft_init(void)
    2. {
    3. gpio_pin_config_t   gpioPinConfig;
    4. gpioPinConfig.pinDirection = kGPIO_DigitalOutput;
    5. gpioPinConfig.outputLogic  = 1u;
    6. GPIO_PinInit (GPIO, 1u, 20u, &gpioPinConfig);
    7. GPIO_PinInit (GPIO, 1u, 21u, &gpioPinConfig);
    8. GPIO_PinInit (GPIO, 1u, 2u, &gpioPinConfig);
    9. GPIO_PinInit (GPIO, 1u, 3u, &gpioPinConfig);
    10. GPIO_PinInit (GPIO, 0u, 26u, &gpioPinConfig);
    11. GPIO_PinInit (GPIO, 1u, 1u, &gpioPinConfig);
    12. LCD_CS_Low();
    13. LCD_LED_High();
    14. }
    复制代码

    显示图2演示效果的函数为:
    1. void show_pic(const unsigned char *p)
    2. {
    3. int i,j;
    4. unsigned char picH,picL;
    5. Address_set(0,0,LCD_W-1,LCD_H-1);
    6. for(i=0;i<240;i++)
    7. {
    8. for(j=0;j<320;j++)
    9. {
    10. picH=*p++;
    11. picL=*p++;
    12. LCD_WR_DATA8(picH);
    13. LCD_WR_DATA8(picL);
    14. }
    15. }
    16. }
    复制代码

    T2.png
    2 图片显示


    此外,它还适于作功能选择界面,见图3所示。
    T3.png
    3 功能界面制作效果


    回复

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3306
    最后登录
    2023-6-23
    发表于 2021-1-18 16:02:40 | 显示全部楼层
    用GPIO不是很慢,怎么不用SPI模块直接驱动呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7125
    最后登录
    2023-4-20
     楼主| 发表于 2021-1-18 18:00:03 | 显示全部楼层
    香水橙 发表于 2021-1-18 16:02
    用GPIO不是很慢,怎么不用SPI模块直接驱动呢?

    一直感到,GPIO口的移植性更强,使用时可以随意放置到近于任何引脚,而使用SPI即使引脚映射也会有所限制,当然在速度上会有所折中。可有时也会出现要在模拟SPI中加延时的情况,说明此时其速度或许也不慢。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 18:36 , Processed in 0.100651 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表