相对于OLED屏来讲,TFT显示屏在屏幕规格大小及显示内容方面都更胜一筹。为此,可在SWM221CBT7显示开发板上尝试对TFT显示屏的驱动。
为便于后续对硬件驱动方式的支持,这里是选取相应的SPI引脚以模拟的方式来实现,具体的引脚连接关系为:
CS-----PB4
RST-----PA2
DC-----PB5
SDI-----PB12
SCK-----PB11
BL-----PB13
开发板为支持LCD屏显示所提供的引脚资源如图1所示:

图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所示,说明驱动效应,可以在此基础上进一步添加中文显示、图形绘制及图形显示函数等。

图2 测试效果
后续会在模拟方式的基础上,来解决硬件驱动的问题,使该开发板的性能进一步展示出来。
我要赚赏金
