查看: 4762|回复: 2

【RT1052】TFT串口屏显示功能的实现

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

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
    发表于 2018-11-13 15:10:45 | 显示全部楼层 |阅读模式
          使用OLED屏在输出信息较多时还是有些难以满足需求,前面有驱动SPI接口OLED屏的经验,这此就使用SPI接口来驱动TFT串口屏。在构建中文字库的情况下,可便捷地实现图1所示的中文界面。
          此外,若将位图的数据存放到数组中,还可以实现图片的显示,其效果见图2所示。
    图片1.png
    1 文字显示界面

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

    TFT串口屏的引脚仍然是通过KEY_PAD接口来连接,电源则从P13接口获取,其连接关系如下:
    CS    --P1.24
    REST --P1.28
    DC   --P1.26
    SDI  --P1.27
    SCK  --P1.25
    LED  --P1.30

    输出高低电平的定义语句如下:
    #define LCD_CS_High()             GPIO_PinWrite(GPIO1, (24U), 1U);
    #define LCD_CS_Low()             GPIO_PinWrite(GPIO1, (24U), 0U);
    #define LCD_REST_High()         GPIO_PinWrite(GPIO1, (28U), 1U);
    #define LCD_REST_Low()         GPIO_PinWrite(GPIO1, (28U), 0U);
    #define LCD_DC_High()            GPIO_PinWrite(GPIO1, (26U), 1U);
    #define LCD_DC_Low()             GPIO_PinWrite(GPIO1, (26U), 0U);
    #define LCD_SDI_High()            GPIO_PinWrite(GPIO1, (27U), 1U);
    #define LCD_SDI_Low()            GPIO_PinWrite(GPIO1, (27U), 0U);
    #define LCD_SCK_High()           GPIO_PinWrite(GPIO1, (25U), 1U);
    #define LCD_SCK_Low()            GPIO_PinWrite(GPIO1, (25U), 0U);
    #define LCD_LED_High()            GPIO_PinWrite(GPIO1, (30U), 1U);
    #define LCD_LED_Low()            GPIO_PinWrite(GPIO1, (30U), 0U);

    配置相应引脚为输出端口的函数为:
    1. void LCD_GPIO_Cogfig(void)
    2. {
    3.         gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
    4.         GPIO_PinInit(GPIO1, (25U), &led_config);
    5.         GPIO_PinInit(GPIO1, (27U), &led_config);
    6.         GPIO_PinInit(GPIO1, (24U), &led_config);
    7.         GPIO_PinInit(GPIO1, (26U), &led_config);
    8.         GPIO_PinInit(GPIO1, (28U), &led_config);
    9.         GPIO_PinInit(GPIO1, (30U), &led_config);
    10.         GPIO_PinWrite(GPIO1, (30U), 1U);
    11. }
    复制代码

    使TFT串口屏清屏的函数为:
    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. void showimage(unsigned int x,unsigned int y)
    2. {  
    3.         unsigned int i,j,k;
    4.         unsigned int da;
    5.         k=0;
    6.         for(i=0;i<320;i++)
    7.         {        
    8.                 LCD_SetCursor(x,y+i);
    9.                 LCD_WriteRAM_Prepare();                                    
    10.                 for(j=0;j<240;j++)
    11.                 {
    12.                         da=gImage_ybc[k*2];
    13.                         da<<=8;
    14.                         da|=gImage_ybc[k*2+1];
    15.                         LCD_WR_DATA(da);                                       
    16.                         k++;         
    17.                 }
    18.         }
    19. }
    复制代码

    实现图1和图2的显示主程序为:
    1. int main(void)
    2. {
    3.         uint16_t i=0;
    4.         gpio_pin_config_t sw_config = {
    5.         kGPIO_DigitalInput, 0,
    6.         kGPIO_IntRisingEdge,
    7.         };
    8.         GPIO_PinInit(GPIO5, (0U), &sw_config);
    9.         gpio_pin_config_t led_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
    10.         BOARD_ConfigMPU();
    11.         BOARD_InitPins();
    12.         BOARD_BootClockRUN();
    13.         BOARD_InitDebugConsole();
    14.        delay();
    15.         LCD_GPIO_Cogfig();
    16.         Lcd_Init();
    17.         showimage(0,0);
    18.         while (1 == GPIO_PinRead(GPIO5, (0U)));
    19.         LCD_Clear(RED);
    20.         BACK_COLOR=RED;
    21.         POINT_COLOR=WHITE;
    22.         showhanzi16(20,20,0);
    23.         showhanzi16(36,20,1);        
    24.         showhanzi16(124,20,2);
    25.         showhanzi16(140,20,3);
    26.         showhanzi16(156,20,4);
    27.         showhanzi16(56,50,5);
    28.         showhanzi16(72,50,6);
    29.         showhanzi16(88,50,7);
    30.         LCD_ShowString(52,20,100,16,16," OK1052-C");
    31.         LCD_ShowString(20,50,48,16,16,"TFT");
    32.         LCD_ShowString(20,80,90,16,16,"JINGLIXIXI");
    33.         LCD_ShowString(20,110,90,16,16,"2018-11-10");
    34.         while(1);
    35. }
    复制代码


    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    108

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    398
    最后登录
    2025-1-15
    发表于 2018-11-15 09:45:29 | 显示全部楼层
    showimage 中的g_Imageybc数据是怎么生成的?
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
     楼主| 发表于 2018-11-15 13:49:47 | 显示全部楼层
    mars4zhu 发表于 2018-11-15 09:45
    showimage 中的g_Imageybc数据是怎么生成的?

    使用Image2Lcd 软件
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-19 03:50 , Processed in 0.074290 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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