概要
LCD屏显示驱动程序
整体架构流程
熟悉开发屏幕显示的学者应该了解屏幕的开发几个要点,流程不是太复杂,这里我们只用文字介绍下总体框架流程,即根据屏的控制器的时序写好发命令和数据的接口即可。
技术名词解释
- 时序:广义上即指数据发送的时间顺序,狭义上可以理解为单片机开发中的意义为当主机要发某种数据数据时,需要满足什么样的条件。
技术细节
如本文前文所述,主要是按照屏幕控制器的时序来编写发送指令和数据的接口,一般屏的初始化即对屏的各种参数设置,都是发送屏的指令。
void LCD_Init(void)
{
LCD_WriteCommand(0xe2); //config PLL to 200MHz
LCD_WriteData(0x3B);
LCD_WriteData(0x02);
LCD_WriteData(0x04);
Delay_ms(1);
LCD_WriteCommand(0xe0); // enable PLL
LCD_WriteData(0x01);
Delay_ms(10);
LCD_WriteCommand(0xe0); // switch to use PLL clock
LCD_WriteData(0x03);
Delay_ms(1);
LCD_WriteCommand(0x11); // exit_sleep_mode
LCD_WriteCommand(0x13); // enter_normal_mode (exit_partial_mode)
LCD_WriteCommand(0x20); // exit_invert_mode
LCD_WriteCommand(0x38); // exit_idle_mode (using full color)
LCD_WriteCommand(0xB8); // set_gpio_conf
LCD_WriteData(0x0f); // GPIO[0~3] controlled by host
LCD_WriteData(0x01); // GPIO as normal GPIO
LCD_WriteCommand(0xba); // GPIO[0~3]=0001, TFT /DISPOFF set to Hi
LCD_WriteData(0x01);
Delay_ms(1);
LCD_WriteCommand(0xba); // GPIO[0~3]=0011, enable backlight booster
LCD_WriteData(0x03);
Delay_ms(1);
LCD_WriteCommand(0xf0); // set_pixel_data_interface (MCU) 16bit(5:6:5)
LCD_WriteData(0x03);
LCD_WriteCommand(0xb0); // set_lcd_mode
LCD_WriteData(0x00);
LCD_WriteData(0x20);
LCD_WriteData(0x03);
LCD_WriteData(0x1f); // panel size 800-1
LCD_WriteData(0x01);
LCD_WriteData(0xdf); // panel size 480-1
LCD_WriteData(0x00); // odd line and even line are in RGB seq
LCD_WriteCommand(0xb4); // set_hori_period
LCD_WriteData(0x03);
LCD_WriteData(0x9f); // total pluse per line, HT=928-1
LCD_WriteData(0x00);
LCD_WriteData(0x58); // horizontal back porch, HPS=88
LCD_WriteData(0x2f); // HPW=48-1 (suggested value)
LCD_WriteData(0x00);
LCD_WriteData(0x00); // LPS=0x0000(default), not use
LCD_WriteData(0x00); // LPSPP=0x00(default), not use
LCD_WriteCommand(0xb6); // set_vert_period
LCD_WriteData(0x02);
LCD_WriteData(0x0c); // total line per frame, VT=525-1
LCD_WriteData(0x00);
LCD_WriteData(0x20); // vertical back porch, VPS=32
LCD_WriteData(0x02); // VPW=3-1(suggest value)
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData(0x00); // FPS=0x0000(default),not use
LCD_WriteCommand(0xe6); // config PCLK=32ns(PLL@200MHz)
LCD_WriteData(0x02);
LCD_WriteData(0x70);
LCD_WriteData(0x00);
LCD_WriteCommand(0x36); // set_address_mode
LCD_WriteData(0x00); // top to bottom, left to right, RGB, normal
// 设置显示屏开启
LCD_WriteCommand(0x29);
}
在这里插入代码片
小结
总的来说程序很简单,一个点屏的小程序,但其中有两个注意点,一是要注意硬件的连接,根据ssd1963的手册说明,当CONF引脚拉低或拉高,对应的时序选择都将不同,二是该控制器支持锁存功能,如果使用锁存功能和并口时序的时候,要注意发送16位数据时先发送高8位,后发送低8位。