这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » SWM221CBT7显示开发板驱动TFT显示屏

共1条 1/1 1 跳转至

SWM221CBT7显示开发板驱动TFT显示屏

菜鸟
2025-11-13 20:53:37     打赏

相对于OLED屏来讲,TFT显示屏在屏幕规格大小及显示内容方面都更胜一筹。为此,可在SWM221CBT7显示开发板上尝试对TFT显示屏的驱动。

为便于后续对硬件驱动方式的支持,这里是选取相应的SPI引脚以模拟的方式来实现,具体的引脚连接关系为:

CS-----PB4

RST-----PA2

DC-----PB5

SDI-----PB12

SCK-----PB11

BL-----PB13

开发板为支持LCD屏显示所提供的引脚资源如图1所示:

image.png

1  LCD屏所用引脚资源

 

为将所用引脚配置为输出模式,其配置函数为:

void SPI_CONFIG()
{
GPIO_Init(GPIOB, PIN4, 1, 0, 0, 0);
GPIO_Init(GPIOB, PIN5, 1, 0, 0, 0);
GPIO_Init(GPIOB, PIN11, 1, 0, 0, 0);
GPIO_Init(GPIOB, PIN12, 1, 0, 0, 0);
GPIO_Init(GPIOB, PIN13, 1, 0, 0, 0);
GPIO_Init(GPIOA, PIN2, 1, 0, 0, 0);
}

为便于控制高低电平的输出,所定义的语句为:

#define LCD_CS_High()   GPIO_SetBit(GPIOB, PIN4)

#define LCD_CS_Low()    GPIO_ClrBit(GPIOB, PIN4) 

#define LCD_REST_High() GPIO_SetBit(GPIOA, PIN2)

#define LCD_REST_Low()  GPIO_ClrBit(GPIOA, PIN2) 

#define LCD_DC_High()   GPIO_SetBit(GPIOB, PIN5)

#define LCD_DC_Low()    GPIO_ClrBit(GPIOB, PIN5) 

#define LCD_SDI_High()  GPIO_SetBit(GPIOB, PIN12)

#define LCD_SDI_Low()   GPIO_ClrBit(GPIOB, PIN12) 

#define LCD_SCK_High()  GPIO_SetBit(GPIOB, PIN11)

#define LCD_SCK_Low()   GPIO_ClrBit(GPIOB, PIN11) 

#define LCD_LED_High()  GPIO_SetBit(GPIOB, PIN13)

#define LCD_LED_Low()   GPIO_ClrBit(GPIOB, PIN13)

模拟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_1us(1);
          LCD_SCK_Low();
           LCD_SCK_High();
      } 
}

对所用显示屏的初始化函数为:

void tft_Init(void)
{   // ili9220B 
    LCD_REST_Low();
    Delay_ms(20); 
    LCD_REST_High();
    Delay_ms(20);
    LCD_CS_Low();  
    LCD_WR_REG(0xCB);  
    LCD_WR_DATA8(0x39); 
    LCD_WR_DATA8(0x2C); 
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0x34); 
    LCD_WR_DATA8(0x02); 
    LCD_WR_REG(0xCF);  
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0XC1); 
    LCD_WR_DATA8(0X30);  
    LCD_WR_REG(0xE8);  
    LCD_WR_DATA8(0x85); 
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0x78);  
    LCD_WR_REG(0xEA);  
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0x00);  
    LCD_WR_REG(0xED);  
    LCD_WR_DATA8(0x64); 
    LCD_WR_DATA8(0x03); 
    LCD_WR_DATA8(0X12); 
    LCD_WR_DATA8(0X81); 
    LCD_WR_REG(0xF7);  
    LCD_WR_DATA8(0x20);   
    LCD_WR_REG(0xC0); 
    LCD_WR_DATA8(0x23); 
    LCD_WR_REG(0xC1); 
    LCD_WR_DATA8(0x10);  
    LCD_WR_REG(0xC5); 
    LCD_WR_DATA8(0x3e);
    LCD_WR_DATA8(0x28);  
    LCD_WR_REG(0xC7); 
    LCD_WR_DATA8(0x86); 
    LCD_WR_REG(0x36); 
    LCD_WR_DATA8(0x48);
    LCD_WR_REG(0x3A);    
    LCD_WR_DATA8(0x55); 
    LCD_WR_REG(0xB1);    
    LCD_WR_DATA8(0x00);  
    LCD_WR_DATA8(0x18);  
    LCD_WR_REG(0xB6); 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x82);
    LCD_WR_DATA8(0x27);   
    LCD_WR_REG(0xF2); 
    LCD_WR_DATA8(0x00);  
    LCD_WR_REG(0x26); 
    LCD_WR_DATA8(0x01); 
    LCD_WR_REG(0xE0); 
    LCD_WR_DATA8(0x0F); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0x2B); 
    LCD_WR_DATA8(0x0C); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x4E); 
    LCD_WR_DATA8(0xF1); 
    LCD_WR_DATA8(0x37); 
    LCD_WR_DATA8(0x07); 
    LCD_WR_DATA8(0x10); 
    LCD_WR_DATA8(0x03); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x09); 
    LCD_WR_DATA8(0x00); 
    LCD_WR_REG(0XE1);  
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x14); 
    LCD_WR_DATA8(0x03); 
    LCD_WR_DATA8(0x11); 
    LCD_WR_DATA8(0x07); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0xC1); 
    LCD_WR_DATA8(0x48); 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x0F); 
    LCD_WR_DATA8(0x0C); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0x36); 
    LCD_WR_DATA8(0x0F);  
    LCD_WR_REG(0x11); 
    Delay_ms(120);
    LCD_WR_REG(0x29); 
    LCD_WR_REG(0x2c); 
    LCD_LED_High();
}


实现指定色彩存储屏幕的函数为:

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);
        }
   }
}


进行驱动测试的主程序为:

int main(void)
{
  SystemInit();
  GPIO_Init(GPIOA, PIN2, 0, 1, 0, 0);
  GPIO_Init(GPIOA, PIN5, 1, 0, 0, 0);
  SPI_CONFIG();
  tft_Init(); 
  LCD_Clear(RED);
  BACK_COLOR=RED;
  POINT_COLOR=WHITE;
  LCD_ShowString(20,60,"SWM221CBT7");
  while(1)
  {
      if(GPIO_GetBit(GPIOA, PIN2) == 1)          
      {
            GPIO_SetBit(GPIOA, PIN5);
      }
      else
      {
            GPIO_ClrBit(GPIOA, PIN5);
       }
  }
}

经程序的编译和下载,其测试效果如图2所示,说明驱动效应,可以在此基础上进一步添加中文显示、图形绘制及图形显示函数等。

image.png

2 测试效果

后续会在模拟方式的基础上,来解决硬件驱动的问题,使该开发板的性能进一步展示出来。





关键词: SWM221CBT7    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]