高通字库
版本 V1.0 · 更新于 2024-07-02

6. 屏模块通信

6.1 8080 通信

1.9 寸液晶模组支持 8080 8-bit 并口通信,使用 13 条信号线(DB[7:0] + RD + WR + RS + CS + RESET)。

8080 通信连接图

8080 通信连接图8080 通信连接图

8080 通信原理图

8080 通信原理图8080 通信原理图

点亮屏流程

点亮屏流程点亮屏流程

屏需要初始化驱动 IC 后才能正常显示。8080 模式下需按照 ST7789V 初始化序列配置寄存器,包括退出睡眠、行列扫描顺序、RGB 图像数据格式、Gamma 校正等,之后即可写入帧缓冲区数据进行显示。

6.2 SPI 通信

SPI 模式下使用 4 线 SPI(CS、SCL、SDA、RS),通过设置 IM1=1, IM2=1 切换到 SPI 模式。

SPI 驱动程序示例

void spi_send_byte(uint8_t data) {
    LCD_CS_LOW;
    LCD_DC_HIGH;  // 数据
    // 硬件 SPI 发送
    while (spi_i2s_flag_get(SPIx, SPI_I2S_RDBF_FLAG) == RESET);
    spi_i2s_data_transmit(SPIx, data);
    while (spi_i2s_flag_get(SPIx, SPI_I2S_BF_FLAG) != RESET);
    LCD_CS_HIGH;
}

void lcd_wr_command(uint8_t cmd) {
    LCD_CS_LOW;
    LCD_DC_LOW;  // 命令
    spi_i2s_data_transmit(SPIx, cmd);
    while (spi_i2s_flag_get(SPIx, SPI_I2S_RDBF_FLAG) == RESET);
    LCD_CS_HIGH;
}

void lcd_wr_data(uint8_t data) {
    LCD_CS_LOW;
    LCD_DC_HIGH;
    spi_i2s_data_transmit(SPIx, data);
    while (spi_i2s_flag_get(SPIx, SPI_I2S_RDBF_FLAG) == RESET);
    LCD_CS_HIGH;
}

SPI 初始化序列(ST7789V)

void lcd_spi_init(void) {
    LCD_RESET_HIGH; delay_ms(200);
    LCD_RESET_LOW;  delay_ms(200);
    LCD_RESET_HIGH; delay_ms(800);

    lcd_wr_command(0x11);  // 退出睡眠
    delay_ms(120);

    lcd_wr_command(0x36); lcd_wr_data(0x00);  // 行列扫描顺序
    lcd_wr_command(0x3A); lcd_wr_data(0x55);  // RGB565 格式
    lcd_wr_command(0xB2); lcd_wr_data(0x1F); lcd_wr_data(0x1F);
                          lcd_wr_data(0x00); lcd_wr_data(0x33); lcd_wr_data(0x33);
    lcd_wr_command(0xB7); lcd_wr_data(0x73);  // Gate Control
    lcd_wr_command(0xBB); lcd_wr_data(0x1E);  // VCOM Setting
    lcd_wr_command(0xC0); lcd_wr_data(0x2C);  // LCM Control
    lcd_wr_command(0xC2); lcd_wr_data(0x01);
    lcd_wr_command(0xC3); lcd_wr_data(0x13);  // VRH Set
    lcd_wr_command(0xC4); lcd_wr_data(0x20);  // VDV Set
    lcd_wr_command(0xC6); lcd_wr_data(0x0F);  // Frame Rate
    lcd_wr_command(0xD0); lcd_wr_data(0xA4); lcd_wr_data(0xA1);
    // Gamma 校正
    lcd_wr_command(0xE0); lcd_wr_data(0xF0); lcd_wr_data(0x0C); /* ... 14 bytes */;
    lcd_wr_command(0xE1); lcd_wr_data(0xF0); lcd_wr_data(0x17); /* ... 14 bytes */;
    lcd_wr_command(0x21);  // 颜色翻转
    lcd_wr_command(0x29);  // 开启显示

    LCD_BL_LOW;  // 点亮背光
}

完整驱动程序示例代码(含 lcd_setblocklcd_drawpointlcd_clearlcd_display_imageshow_ch 等函数)请参阅完整 PDF 数据手册。