ST7789
简介
ST7789是240*320分辨率的LCD驱动芯片,采用SPI接口。
原理图
引脚 | 功能 |
---|---|
BK | 背光引脚 |
RES | 复位引脚 |
DC | 数据/命令选择引脚 |
CS | 片选引脚 |
CLK | 时钟引脚 |
MOSI | 数据引脚 |
驱动代码
void st7789_init(struct _lcd * lcd)
{
// 硬件初始化
lcd->hard->init();
// 复位
lcd->hard->reset(false);
lcd->hard->delay(10);
lcd->hard->reset(true);
lcd->hard->delay(10);
lcd->hard->reset(false);
write_cmd(0x36); // ST7789_MADCTL
write_data(0x00); //
write_cmd(0x3A); // ST7789_COLMOD
write_data(0x05); // 16bit/pixel
write_cmd(0xb2); // ST7789_FRMCTR2
write_data(0x0c);
write_data(0x0c);
write_data(0x00);
write_data(0x33);
write_data(0x33);
write_cmd(0xb7); // Gate Control
write_data(0x70); // VGH=14.97, VGL=-7.16 // 用来驱动液晶屏的透明度的两个电压参数
write_cmd(0xbb); // VCOM setting
write_data(0x21); // 0.92V
write_cmd(0xc0); // LCM Control
write_data(0x2c);
write_cmd(0xc2); // VDV and VHD Command Enable
write_data(0x01); // enable
write_cmd(0xc3); // VBH Set
write_data(0x0B); //
write_cmd(0xc4); // VDV Set
write_data(0x27);
write_cmd(0xc6); // Frame Rate Control in Normal Mode
write_data(0x0f);
write_cmd(0xd0); // Power Control 1
write_data(0xa4);
write_data(0xA1);
write_cmd(0xe0); // Positive Voltage Gamma Control
write_data(0xD0);
write_data(0x06);
write_data(0x0B);
write_data(0x09);
write_data(0x08);
write_data(0x30);
write_data(0x30);
write_data(0x5B);
write_data(0x4B);
write_data(0x18);
write_data(0x14);
write_data(0x14);
write_data(0x2C);
write_data(0x32);
write_cmd(0xe1); // Negative Voltage Gamma Control
write_data(0xD0);
write_data(0x05);
write_data(0x0A);
write_data(0x0A);
write_data(0x07);
write_data(0x28);
write_data(0x32);
write_data(0x2C);
write_data(0x49);
write_data(0x18);
write_data(0x13);
write_data(0x13);
write_data(0x2C);
write_data(0x33);
write_cmd(0x21); // Display Inversion On
write_cmd(0x2A); // Column Address Set
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0xEF);
write_cmd(0x2B); // Row Address Set
write_data(0x00);
write_data(0x00);
write_data(0x01);
write_data(0x3F);
write_cmd(0x11); // Sleep Out
// lcd->hard->delay(120);
lcd->hard->delay(10);
write_cmd(0x29); // display on
write_cmd(0x2c); // memory write
}