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
}

参考文档