打印
[活动专区]

【AT-START-F407测评】+2.8'TFT显示屏的驱动

[复制链接]
561|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2021-3-10 12:37 编辑

TFT显示屏有多种类型,常见有2.2 /2.4/2.8/3.2/3.5/4.0寸等,多采用SPI接口工作。
这里介绍的2.8寸显示屏也是采用SPI接口,且带有触摸的功能。
为了便于移植使用,这里以I/O口来模拟SPI接口来驱动它,其与MCU的连接关系如下:
CS---PB13
RES---PB11
DC--- PB12
SDA--- PB9
SCK--- PB8
BLK--- PB14
定义相关引脚输出高低电平的引脚为:
#defineLCD_CS_High()    GPIO_SetBits(GPIOB,GPIO_Pins_13)   //CS
#defineLCD_CS_Low()     GPIO_ResetBits(GPIOB,GPIO_Pins_13)

#defineLCD_REST_High()  GPIO_SetBits(GPIOB, GPIO_Pins_11)  //RES
#defineLCD_REST_Low()   GPIO_ResetBits(GPIOB,GPIO_Pins_11)

#defineLCD_DC_High()    GPIO_SetBits(GPIOB,GPIO_Pins_12)   //DC
#defineLCD_DC_Low()     GPIO_ResetBits(GPIOB,GPIO_Pins_12)

#defineLCD_SDI_High()   GPIO_SetBits(GPIOB, GPIO_Pins_9)    //SDA
#defineLCD_SDI_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_9)

#defineLCD_SCK_High()   GPIO_SetBits(GPIOB,GPIO_Pins_8)   //SCK
#defineLCD_SCK_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_8)

#defineLCD_LED_High()   GPIO_SetBits(GPIOB, GPIO_Pins_14) //BLK
#defineLCD_LED_Low()    GPIO_ResetBits(GPIOB,GPIO_Pins_14)
模拟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();
}      
}

显示屏的初始化函数为:
void tft_Init(void)
{
LCD_REST_Low();
Delay_ms(50);
LCD_REST_High();
Delay_ms(50);
LCD_WR_REG(0xCF);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0xD9);
LCD_WR_DATA8(0X30);
LCD_WR_REG(0xED);
LCD_WR_DATA8(0x64);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0X12);
LCD_WR_DATA8(0X81);
LCD_WR_REG(0xE8);
LCD_WR_DATA8(0x85);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x78);
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(0xF7);
LCD_WR_DATA8(0x20);
LCD_WR_REG(0xEA);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x21);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0x12);
LCD_WR_REG(0xC5);
LCD_WR_DATA8(0x32);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xC7);
LCD_WR_DATA8(0xC1);
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x08);
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(0x0A);
LCD_WR_DATA8(0xA2);
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(0x20);
LCD_WR_DATA8(0x1E);
LCD_WR_DATA8(0x09);
LCD_WR_DATA8(0x12);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x50);
LCD_WR_DATA8(0xBA);
LCD_WR_DATA8(0x44);
LCD_WR_DATA8(0x09);
LCD_WR_DATA8(0x14);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x23);
LCD_WR_DATA8(0x21);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x19);
LCD_WR_DATA8(0x19);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x12);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x28);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x0F);
LCD_WR_REG(0x11);
Delay_ms(120);
LCD_WR_REG(0x29);
LCD_Clear(WHITE);
}

配置相应工具为输出口的函数为:
void AT32_LCD_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins =    GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14;        
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
LCD_LED_High();
}

实现显示效果的主程序为:
int main(void)
{
AT32_Board_Init();
AT32_LCD_Init();
tft_Init();
AT32_jm();
while(1) ;
}

显示效果图







使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝