前面已介绍过一种基于SPI接口的0.96寸彩色OLED屏的显示驱动,这次再介绍一种基于SPI接口的2.2寸TFT屏的显示驱动。为了引脚连接上的方便,该显示屏与开发板的连接关系为: CS ---PB12
RST -PB13
DC ---PB14
SDA ---PB15
SCL ---PB16
BLK---3.3V
这里值得指出的是,TFT屏的背光引脚BLK原本是打算由GPIO口以输出高电平来点亮,但可能是受引脚工作威廉希尔官方网站
的影响,它并不能点亮TFT屏的背光。为此只好直接由3.3V电源点亮,此外由于开发板只提供了一个3.3V的输出引脚,在使用时需要自行加以扩展。 实现高低电平的输出其语句定义如下:
#define LCD_CS_High() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12,GPIO_PIN_SET) //CS
#defineLCD_CS_Low() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
#defineLCD_REST_High() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET) //RES
#defineLCD_REST_Low() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET)
#defineLCD_DC_High() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET) //DC
#defineLCD_DC_Low() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET)
#defineLCD_SDI_High() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15, GPIO_PIN_SET) //DIN
#defineLCD_SDI_Low() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET)
#defineLCD_SCK_High() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_16, GPIO_PIN_SET) //CLK
#defineLCD_SCK_Low() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_16, GPIO_PIN_RESET)
相应的引脚功能配置函数为:
- void App_TFtinit(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- __HAL_RCC_GPIO_CLK_ENABLE();
- GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14| GPIO_PIN_15 | GPIO_PIN_16;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- }
该显示屏的初始化函数为:
- void LCD_Init(void)
- {
- LCD_REST_Low();
- HAL_Delay(20);
- LCD_REST_High();
- HAL_Delay(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);
- HAL_Delay(120);
- LCD_WR_REG(0x29);
- LCD_WR_REG(0x2c);
- }
实现图片显示函数为:
- void LCD_Pictureb(void)
- {
- int i;
- Address_set(0,0,239,319);
- for(i=0;i<76800;i++)
- {
- LCD_WR_DATA8(gImage_123[i*2]);
- LCD_WR_DATA8(gImage_123[i*2+1]);
- }
- }
实现的效果如图1至图4所示:
图1 显示图片效果
图2 显示图片效果
图3 显示图片效果
图4 显示字符与图片