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

6. 屏模块通信

6.1 SPI 通信

2.8 寸液晶模组支持 SPI 4 线串行通信,使用 4 条信号线(CS、SCL、SDA、RS)。

SPI 通信连接图

SPI 通信连接图SPI 通信连接图

SPI 通信原理图

SPI 通信原理图SPI 通信原理图

点亮屏流程

点亮屏流程点亮屏流程

屏需要初始化驱动 IC 后才能正常显示。使用 SPI 模式时,需按照 ST7789V 初始化序列配置寄存器,包括电源设置、时序配置、Gamma 校正等,之后即可写入帧缓冲区数据进行显示。

6.2 8080 通信

2.8 寸液晶模组同时支持 8080 8-bit 并口通信,使用 13 条信号线。通过设置 IM1=0, IM2=0 切换到 8080 模式。

8080 驱动程序示例

void SendData(unsigned char dat) {
    if(dat & 0x01) LCD_D0_HIGH; else LCD_D0_LOW;
    if(dat & 0x02) LCD_D1_HIGH; else LCD_D1_LOW;
    if(dat & 0x04) LCD_D2_HIGH; else LCD_D2_LOW;
    if(dat & 0x08) LCD_D3_HIGH; else LCD_D3_LOW;
    if(dat & 0x10) LCD_D4_HIGH; else LCD_D4_LOW;
    if(dat & 0x20) LCD_D5_HIGH; else LCD_D5_LOW;
    if(dat & 0x40) LCD_D6_HIGH; else LCD_D6_LOW;
    if(dat & 0x80) LCD_D7_HIGH; else LCD_D7_LOW;
}

void WriteComm(unsigned int i) {
    LCD_CS_LOW; LCD_DC_LOW; SendData(i);
    LCD_WR_LOW; LCD_WR_HIGH; LCD_CS_HIGH;
}

void WriteData(unsigned int i) {
    LCD_CS_LOW; LCD_DC_HIGH; SendData(i);
    LCD_WR_LOW; LCD_WR_HIGH; LCD_CS_HIGH;
}

6.3 驱动程序

void lcd_setblock(uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye) {
    lcd_wr_command(0x2A);  // 行范围
    lcd_wr_data(xs >> 8); lcd_wr_data(xs);
    lcd_wr_data(xe >> 8); lcd_wr_data(xe);
    lcd_wr_command(0x2B);  // 列范围
    lcd_wr_data(ys >> 8); lcd_wr_data(ys);
    lcd_wr_data(ye >> 8); lcd_wr_data(ye);
    lcd_wr_command(0x2C);  // 写寄存器
}

void lcd_display_image(uint32_t address, uint16_t x, uint16_t y,
                        uint16_t w, uint16_t h) {
    uint8_t *buff = buffer_write;
    uint32_t len = w * h << 1;
    lcd_setblock(x, y, x + w - 1, y + h - 1);
    spiflash_read(buff, address, len);
    for (uint32_t i = 0; i < len; i++)
        lcd_wr_data(buff[i]);
}

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