【沁恒 CH32V208 开发板免费试用】+TFT屏显示驱动与图像显示 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【沁恒 CH32V208 开发板免费试用】+TFT屏显示驱动与图像显示

为了进行图像显示,彩色屏的使用是不可少的,这里选取的是一款SPI接口的2.2寸TFT显示屏,其显示分辨率为320*240像素点。

为便于连接,所使用的是J7扩展接口,见图1所示。
image.png

图1 扩展接口

该显示屏与开发板的连接关系为:

CS---PB13

REST
---PB14

DC
---PB15

SDI
---PB12

SCK
---PB0

BLK---3.3V

相关引脚输出高低电平的引脚定义为:

#define LCD_CS_High() GPIO_WriteBit(GPIOB, GPIO_Pin_13,Bit_SET) // CS

#define LCD_CS_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_13,Bit_RESET)

#define LCD_REST_High() GPIO_WriteBit(GPIOB,
GPIO_Pin_14,Bit_SET) // RES

#define LCD_REST_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_14,Bit_RESET)

#define LCD_DC_High()
GPIO_WriteBit(GPIOB, GPIO_Pin_15,Bit_SET) // DC

#define LCD_DC_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_15,Bit_RESET)

#define LCD_SDI_High() GPIO_WriteBit(GPIOB, GPIO_Pin_12,Bit_SET) // DIN

#define LCD_SDI_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_12,Bit_RESET)

#define LCD_SCK_High() GPIO_WriteBit(GPIOB,
GPIO_Pin_0,Bit_SET) // CLK

#define LCD_SCK_Low()
GPIO_WriteBit(GPIOB, GPIO_Pin_0,Bit_RESET)

以GPIO口模拟SPI发送字节数据的函数为:

void LCD_Writ_Bus(unsigned char com)
{
  unsigned char uci;
  for(uci=0;uci<8;uci++)
  {
     if(com & 0x80)
     {
          LCD_SDI_High();
     }
     else
     {
          LCD_SDI_Low();
     }
     com = com << 1;
     Delay_Us(1);
     LCD_SCK_Low();
     LCD_SCK_High();
  }
}
  1. 色彩清屏

为便于测试TFT屏的驱动效果,可利用参数清屏函数来进行,该清屏函数的内容为:

void LCD_Clear(unsigned int Color)
{
    char VH,VL;
    unsigned int i,j;
    VH=Color>>8;
    VL=Color;   
    Address_set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
    {
      for (j=0;j<LCD_H;j++)
      {
           LCD_WR_DATA8(VH);
           LCD_WR_DATA8(VL);
      }
    }
}

经程序的下载测试,可完成指定色彩的刷屏处理,说明基本的驱动函数没有问题。

  1. 显示图像

在色彩清屏函数的基础上,可完成图像显示函数的设计,该函数的内容为:

void show_pic(const unsigned char *p)
{
    int i,j;
    unsigned char picH,picL;
    Address_set(20,20,179,99);
    for(i=0;i<80;i++)
    {
      for(j=0;j<160;j++)
      {
            picH=*p++;
            picL=*p++;
            LCD_WR_DATA8(picH);
            LCD_WR_DATA8(picL);
      }
  }
}

实现图像显示的主程序为:

int main(void)
{   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    GPIO_INIT();
    tft_Init();
    BACK_COLOR=YELLOW;
    POINT_COLOR=RED;
    LCD_Clear(RED);
    Delay_Ms(1000);
    show_pic(gImage_RW);
    while(1)
    {
             Delay_Ms(250);
             GPIO_WriteBit(GPIOA,GPIO_Pin_0, Bit_RESET);
             Delay_Ms(250);
             GPIO_WriteBit(GPIOA,GPIO_Pin_0, Bit_SET);
    }
}

在程序下载后,其显示效果如图2所示。

值得指出的是:CH32V208的Flash容量为128KB,而对于一幅满屏的图片则要占用3202402=153.6KB,因此在程序中是无法存放一幅满屏图像的。
image.png

图2 显示效果

此外,该显示屏提供控制字可自由的切换屏幕的显示模式,图3所示为横屏模式下的图像显示效果。

相应的屏幕显示模式控制语句为:

LCD_WR_REG(0x36);

LCD_WR_DATA8(0x48); // 48、68 为竖屏,28、E8 为横屏。
image.png
图3 横屏显示效果

更多回帖

×
发帖