ESP32 IDF开发——RGB LCD显示屏(ST7701S)

ESP32 IDF开发——RGB LCD显示屏(ST7701S)

1 硬件描述

我这里用的LCD是RGB接口的,驱动IC为ST7701S,用ESP32S3驱动,RGB565 16根数据线,接线如下:

ESP32S3LCDSPI数据线
IO48SDASPI数据线
IO16SCKSPI时钟线
IO15CSSPI片选线
IO14PCLKRGB时钟线
IO13DERGB数据使能
IO12VSYNC垂直同步
IO11HSYNC水平同步
DB0数据线0
IO10DB1数据线1 B1
IO9DB2数据线2 B2
IO8DB3数据线3 B3
IO7DB4数据线4 B4
IO6DB5数据线5 B5
IO5DB6数据线6 G0
IO4DB7数据线7 G1
IO3DB8数据线8 G2
IO2DB9数据线9 G3
IO1DB10数据线10 G4
IO0DB11数据线11 G5
DB12数据线12
IO42DB13数据线13 R1
IO41DB14数据线14 R2
IO40DB15数据线15 R3
IO39DB16数据线16 R4
IO38DB17数据线17 R5

2 软件编程

开发环境基于VScode + ESP-IDF。关于RGB屏幕显示原理,这里不细说,只讲编程,感兴趣的同学可以自行查阅。

注:关于怎么在Vscode里面搭建ESP-IDF的开环环境,这里不具体说了,网上教程很多,不懂的同学请先自行搭建好环境。

2.1 新建工程

打开ESP-IDF,点击Show example
在这里插入图片描述

选择rgb_panel例程作为我们的工程的基础模版。
在这里插入图片描述
保存至本地,会得到一个工程模板,如下图:
在这里插入图片描述

在最底下的状态栏,配置目标芯片,要选择esp32s3
注:esp32s3具备rgb接口,其他像esp32和esp32s2是没有的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开配置列表,配置时钟、FLASH和PSRAM等参数。
在这里插入图片描述
我的配置如下(仅供参考):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

初步编译一下。
注:因为这个模板默认把lvgl库加进来了,因此在编译的时候会自动下载lvgl组件并参与编译。如果不需要使用lvgl的话可以在idf_component.yml文件里面把lvgl/lvgl: "~8.3.0"删掉,这样就不会把lvgl加入进来,同时,还要把main里面所有跟lvgl相关的代码删掉,才能编译通过。

编译如果通过后,那工程的建立就没问题了。

2.2 编写ST7701S驱动程序

在工程main文件夹目录下新建st7701s.cst7701s.h文件,并且在CMakeLists.txt文件加入"st7701s.c",如下:
添加st7701s.c之前:

idf_component_register(SRCS "rgb_lcd_example_main.c" "lvgl_demo_ui.c"
                       INCLUDE_DIRS ".")

添加st7701s.c之后:

idf_component_register(SRCS "rgb_lcd_example_main.c" "lvgl_demo_ui.c" "st7701s.c"
                       INCLUDE_DIRS ".")

文件目录如下:
在这里插入图片描述
然后编写ST7701S驱动程序,示例代码如下:
st7701s.c:

#include "st7701s.h"

#define SPI_WriteComm(cmd) st7701s_write_cmd(st7701s_handle, cmd)
#define SPI_WriteData(data) st7701s_write_data(st7701s_handle, data)
#define Delay(ms) vTaskDelay(ms / portTICK_PERIOD_MS)

void ioexpander_init(){};
void ioexpander_write_cmd(){};
void ioexpander_write_data(){};

/**
 * @brief 新建st7701s对象
 * @param sda sda引脚
 * @param scl scl引脚
 * @param cs  cs引脚
 * @param channel_select SPI, I2C通道选择
 * @param method_select 可以选择SPI_METHOD,IOEXPANDER_METHOD
 * @note channel_select可选SPI控制器, SPI3_HOST OR SPI4_HOST in ESP32S3
 * @note channel_select可选I2C控制器
*/
vernon_st7701s_handle st7701s_new_object(int sda, int scl, int cs, char channel_select, char method_select)
{
    // if you use `malloc()`, please set 0 in the area to be assigned.
    vernon_st7701s_handle vernon_st7701s_handle = heap_caps_calloc(1, sizeof(vernon_st7701s), MALLOC_CAP_DEFAULT);
    vernon_st7701s_handle->method_select = method_select;
    
    if(method_select)
    {
        vernon_st7701s_handle->spi_io_config_t.miso_io_num = -1;
        vernon_st7701s_handle->spi_io_config_t.mosi_io_num = sda;
        vernon_st7701s_handle->spi_io_config_t.sclk_io_num = scl;
        vernon_st7701s_handle->spi_io_config_t.quadwp_io_num = -1;
        vernon_st7701s_handle->spi_io_config_t.quadhd_io_num = -1;

        // 默认值,启用DMA应设置为0
        vernon_st7701s_handle->spi_io_config_t.max_transfer_sz = SOC_SPI_MAXIMUM_BUFFER_SIZE;
        // 不使用DMA最后赋值0
        ESP_ERROR_CHECK(spi_bus_initialize(channel_select, &(vernon_st7701s_handle->spi_io_config_t), 0));
        vernon_st7701s_handle->st7701s_protocol_config_t.command_bits = 1;
        vernon_st7701s_handle->st7701s_protocol_config_t.address_bits = 8;
        vernon_st7701s_handle->st7701s_protocol_config_t.clock_speed_hz = 40000000;
        /**
         * < 时钟极性以及时钟相位设置(CPOL, CPHA):
             - 0: (0, 0)
            - 1: (0, 1)
            - 2: (1, 0)
            - 3: (1, 1)
            **/
        vernon_st7701s_handle->st7701s_protocol_config_t.mode = 0;
        vernon_st7701s_handle->st7701s_protocol_config_t.spics_io_num = cs;
        vernon_st7701s_handle->st7701s_protocol_config_t.queue_size = 1;
        ESP_ERROR_CHECK(spi_bus_add_device(channel_select, &(vernon_st7701s_handle->st7701s_protocol_config_t),
                                        &(vernon_st7701s_handle->spi_device)));
        
        return vernon_st7701s_handle;
    }
    else
    {
        ioexpander_init();
    }
    return NULL;
}

/**
 * @brief 屏幕初始化
 * @param st7701s_handle 类实例指针
 * @param type 选择初始化类型 [1~x]
 * @note 以下类型来自不同地方,对应命令功能未知
*/
void st7701s_screen_init(vernon_st7701s_handle st7701s_handle, unsigned char type)
{
    if (type == 1)
    {//从商家提供的资料复制
        SPI_WriteComm(0x11); //sleep out í?3??ˉ???£ê?
        Delay(10);
        //--------------------------Bank0 Setting-----------------------------------//
        //----------------------Display Control setting-----------------------------//
        //--------------------------Bank1 Setting-----------------------------------//
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x10);

        SPI_WriteComm(0xC0);
        SPI_WriteData(0x3B);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xC1);
        SPI_WriteData(0x0D);
        SPI_WriteData(0x02);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x31);
        SPI_WriteData(0x05);
    //--------------------------Gamma Cluster Setting--------------------------//
        SPI_WriteComm(0xB0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x18);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x11);
        SPI_WriteData(0x06);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x07);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x12);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xAA);
        SPI_WriteData(0x31);
        SPI_WriteData(0x18);

        SPI_WriteComm(0xB1);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x19);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x12);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0xA9);
        SPI_WriteData(0x32);
        SPI_WriteData(0x18);

    //-------------------------Bank1 Setting---------------------------------//
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xb0);
        SPI_WriteData(0x60);
    //--------------------------Vcom Setting--------------------------------//
        SPI_WriteComm(0xb1);
        SPI_WriteData(0x32);
    //-----------------------End Vcom Setting------------------------------//
        SPI_WriteComm(0xb2);
        SPI_WriteData(0x07);

        SPI_WriteComm(0xb3);
        SPI_WriteData(0x80);

        SPI_WriteComm(0xb5);
        SPI_WriteData(0x49);

        SPI_WriteComm(0xb7);
        SPI_WriteData(0x85);

        SPI_WriteComm(0xb8);
        SPI_WriteData(0x21);

        SPI_WriteComm(0xC1);
        SPI_WriteData(0x78);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x78);

        // SPI_WriteComm(0xD0);
        // SPI_WriteData(0x88);
    //-----------End Power Control Registers Initial ------------------//
        // DelayNms(100);
    //----------------GIP Setting--------------------------------------//
        SPI_WriteComm(0xE0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x1B);
        SPI_WriteData(0x02);

        SPI_WriteComm(0xE1);
        SPI_WriteData(0x08);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x07);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);

        SPI_WriteComm(0xE2);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteData(0xED);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE3);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xE4);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);

        SPI_WriteComm(0xE5);
        SPI_WriteData(0x0A);
        SPI_WriteData(0xE9);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0C);
        SPI_WriteData(0xEB);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0E);
        SPI_WriteData(0xED);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x10);
        SPI_WriteData(0xEF);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);

        SPI_WriteComm(0xE6);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xE7);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);

        SPI_WriteComm(0xE8);
        SPI_WriteData(0x09);
        SPI_WriteData(0xE8);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0B);
        SPI_WriteData(0xEA);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0D);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xEE);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);

        SPI_WriteComm(0xEB);
        SPI_WriteData(0x02);
        SPI_WriteData(0x00);
        SPI_WriteData(0xE4);
        SPI_WriteData(0xE4);
        SPI_WriteData(0x88);
        SPI_WriteData(0x00);
        SPI_WriteData(0x40);

        SPI_WriteComm(0xEC);
        SPI_WriteData(0x3c);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xED); //ok
        SPI_WriteData(0xAB);
        SPI_WriteData(0x89);
        SPI_WriteData(0x76);
        SPI_WriteData(0x54);
        SPI_WriteData(0x02);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0x20);
        SPI_WriteData(0x45);
        SPI_WriteData(0x67);
        SPI_WriteData(0x98);
        SPI_WriteData(0xBA);

        SPI_WriteComm(0x35); SPI_WriteData(0x00);    // Sleep-Out

        SPI_WriteComm(0x36); SPI_WriteData(0x00);//BGR
        // SPI_WriteComm(0x36); SPI_WriteData(0x08); //RGB

        // SPI_WriteComm(0x3A); SPI_WriteData(0x77); //24bit
        // SPI_WriteComm(0x20);//display inversion off
        SPI_WriteComm(0x3A); SPI_WriteData(0x55);//16bit
        // SPI_WriteComm(0x3A); SPI_WriteData(0x66);//18bit
        // SPI_WriteComm(0x22);//All pixel off
        
        // SPI_WriteCmd(0x21);    //Normal Black
        // SPI_WriteComm(0x11);//sleep out í?3??ˉ???£ê?

    //--------------------------Bank3 Setting--------------------------------//
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);

        SPI_WriteComm(0xE5);
        SPI_WriteData(0xE4);

        Delay(10);
        SPI_WriteComm(0x29);

    }
    else if(type == 2)
    {//从Arduino GFX库中移植
        SPI_WriteComm(0x11); //reset command

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x10);

        SPI_WriteComm(0xC0);
        SPI_WriteData(0x3B);
        SPI_WriteData(0x00);
        
        SPI_WriteComm(0xC1);
        SPI_WriteData(0x0D);
        SPI_WriteData(0x02);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x31);
        SPI_WriteData(0x05);

        SPI_WriteComm(0xCD);
        SPI_WriteData(0x08);

        SPI_WriteComm(0xB0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x18);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x11);
        SPI_WriteData(0x06);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x07);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x12);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xAA);
        SPI_WriteData(0x31);
        SPI_WriteData(0x18);

        SPI_WriteComm(0xB1);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x19);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x12);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0xA9);
        SPI_WriteData(0x32);
        SPI_WriteData(0x18);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xB0);
        SPI_WriteData(0x60);

        SPI_WriteComm(0xB1);
        SPI_WriteData(0x32);

        SPI_WriteComm(0xB2);
        SPI_WriteData(0x07);

        SPI_WriteComm(0xB3);
        SPI_WriteData(0x80);

        SPI_WriteComm(0xB5);
        SPI_WriteData(0x49);

        SPI_WriteComm(0xB7);
        SPI_WriteData(0x85);

        SPI_WriteComm(0xB8);
        SPI_WriteData(0x21);

        SPI_WriteComm(0xC1);
        SPI_WriteData(0x78);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x78);

        SPI_WriteComm(0xE0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x1B);
        SPI_WriteData(0x02);
        
        SPI_WriteComm(0xE1);
        SPI_WriteData(0x08);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x07);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);

        SPI_WriteComm(0xE2);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteData(0xED);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE3);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xE4);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        
        SPI_WriteComm(0xE5);
        SPI_WriteData(0x0A);
        SPI_WriteData(0xE9);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0C);
        SPI_WriteData(0xEB);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0E);
        SPI_WriteData(0xED);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x10);
        SPI_WriteData(0xEF);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);

        SPI_WriteComm(0xE6);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xE7);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);

        SPI_WriteComm(0xE8);
        SPI_WriteData(0x09);
        SPI_WriteData(0xE8);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0B);
        SPI_WriteData(0xEA);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0D);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xEE);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);

        SPI_WriteComm(0xEB);
        SPI_WriteData(0x02);
        SPI_WriteData(0x00);
        SPI_WriteData(0xE4);
        SPI_WriteData(0xE4);
        SPI_WriteData(0x88);
        SPI_WriteData(0x00);
        SPI_WriteData(0x40);
        
        SPI_WriteComm(0xEC);
        SPI_WriteData(0x3C);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xED);
        SPI_WriteData(0xAB);
        SPI_WriteData(0x89);
        SPI_WriteData(0x76);
        SPI_WriteData(0x54);
        SPI_WriteData(0x02);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0x20);
        SPI_WriteData(0x45);
        SPI_WriteData(0x67);
        SPI_WriteData(0x98);
        SPI_WriteData(0xBA);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);

        SPI_WriteComm(0xE5);
        SPI_WriteData(0xE4);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0x3A);
        SPI_WriteData(0x60);

        SPI_WriteComm(0x11);

        Delay(120);

        SPI_WriteComm(0x29);

        //after batchOperation
        SPI_WriteComm(0x21);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x10);
        SPI_WriteComm(0xC7);
        SPI_WriteData(0x00);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteComm(0x36);
        SPI_WriteData(0x00); //BGR
        // SPI_WriteData(0x08); //RGB

    }
    else if(type == 3)
    {//网络查询复制, https://www.bilibili.com/video/BV1hB4y197YN/
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);
        SPI_WriteComm(0xEF);
        SPI_WriteData(0x08);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x10);
        SPI_WriteComm(0xC0);
        SPI_WriteData(0x3B);
        SPI_WriteData(0x00);
        SPI_WriteComm(0xC1);
        SPI_WriteData(0x0D);
        SPI_WriteData(0x02);
        SPI_WriteComm(0xC2);
        SPI_WriteData(0x21);
        SPI_WriteData(0x08);

        SPI_WriteComm(0xCD);
        SPI_WriteData(0x08);//18-bit/pixel: MDT=0:D[21:16]=R,D[13:8]=G,D[5:0]=B(CDH=00) ;
                            //              MDT=1:D[17:12]=R,D[11:6]=G,D[5:0]=B(CDH=08) ;

        SPI_WriteComm(0xB0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x18);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x11);
        SPI_WriteData(0x06);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x07);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x12);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xAA);
        SPI_WriteData(0x31);
        SPI_WriteData(0x18);
        SPI_WriteComm(0xB1);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x19);
        SPI_WriteData(0x0E);
        SPI_WriteData(0x12);
        SPI_WriteData(0x07);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x08);
        SPI_WriteData(0x22);
        SPI_WriteData(0x04);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0xA9);
        SPI_WriteData(0x32);
        SPI_WriteData(0x18);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteComm(0xB0);
        SPI_WriteData(0x60);
        SPI_WriteComm(0xB1);
        SPI_WriteData(0x30);
        SPI_WriteComm(0xB2);
        SPI_WriteData(0x87);
        SPI_WriteComm(0xB3);
        SPI_WriteData(0x80);
        SPI_WriteComm(0xB5);
        SPI_WriteData(0x49);
        SPI_WriteComm(0xB7);
        SPI_WriteData(0x85);
        SPI_WriteComm(0xB8);
        SPI_WriteData(0x21);
        SPI_WriteComm(0xC1);
        SPI_WriteData(0x78);
        SPI_WriteComm(0xC2);
        SPI_WriteData(0x78);
        Delay(2);
        SPI_WriteComm(0xE0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x1B);
        SPI_WriteData(0x02);
        SPI_WriteComm(0xE1);
        SPI_WriteData(0x08);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x07);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteComm(0xE2);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteData(0xED);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteComm(0xE3);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteComm(0xE4);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteComm(0xE5);
        SPI_WriteData(0x0A);
        SPI_WriteData(0xE9);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0C);
        SPI_WriteData(0xEB);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0E);
        SPI_WriteData(0xED);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x10);
        SPI_WriteData(0xEF);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteComm(0xE6);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x11);
        SPI_WriteComm(0xE7);
        SPI_WriteData(0x44);
        SPI_WriteData(0x44);
        SPI_WriteComm(0xE8);
        SPI_WriteData(0x09);
        SPI_WriteData(0xE8);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0B);
        SPI_WriteData(0xEA);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0D);
        SPI_WriteData(0xEC);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x0F);
        SPI_WriteData(0xEE);
        SPI_WriteData(0xD8);
        SPI_WriteData(0xA0);
        SPI_WriteComm(0xEB);
        SPI_WriteData(0x02);
        SPI_WriteData(0x00);
        SPI_WriteData(0xE4);
        SPI_WriteData(0xE4);
        SPI_WriteData(0x88);
        SPI_WriteData(0x00);
        SPI_WriteData(0x40);
        SPI_WriteComm(0xEC);
        SPI_WriteData(0x3C);
        SPI_WriteData(0x00);
        SPI_WriteComm(0xED);
        SPI_WriteData(0xAB);
        SPI_WriteData(0x89);
        SPI_WriteData(0x76);
        SPI_WriteData(0x54);
        SPI_WriteData(0x02);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0xFF);
        SPI_WriteData(0x20);
        SPI_WriteData(0x45);
        SPI_WriteData(0x67);
        SPI_WriteData(0x98);
        SPI_WriteData(0xBA);
        SPI_WriteComm(0xEF);
        SPI_WriteData(0x10);
        SPI_WriteData(0x0D);
        SPI_WriteData(0x04);
        SPI_WriteData(0x08);
        SPI_WriteData(0x3F);
        SPI_WriteData(0x1F);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0x3A);
        SPI_WriteData(0x50);    //55/50=16bit(RGB565);66=18bit(RGB666);77或默认不写3AH是=24bit(RGB888)

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);
        SPI_WriteComm(0xE8);
        SPI_WriteData(0x00);
        SPI_WriteData(0x0E);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteComm(0x11);
        Delay(12);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);
        SPI_WriteComm(0xE8);
        SPI_WriteData(0x00);
        SPI_WriteData(0x0C);
        Delay(1);
        SPI_WriteComm(0xE8);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0x36);
        SPI_WriteData(0x00);

        SPI_WriteComm(0x20);

        SPI_WriteComm(0x29);
        Delay(2);

    }
    else if(type == 4)
    {//网络查询复制, https://www.bilibili.com/video/BV1hB4y197YN/
        SPI_WriteComm(0x11); 
        Delay(1);
            
        SPI_WriteComm (0xFF);
        SPI_WriteData (0x77);
        SPI_WriteData (0x01);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x10);

        SPI_WriteComm (0xC0);
        SPI_WriteData (0x3B);
        SPI_WriteData (0x00);

        SPI_WriteComm (0xC1);
        SPI_WriteData (0x0D);
        SPI_WriteData (0x02);

        SPI_WriteComm (0xC2);
        SPI_WriteData (0x31);
        SPI_WriteData (0x05);

        SPI_WriteComm (0xB0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x11);
        SPI_WriteData (0x18);
        SPI_WriteData (0x0E);
        SPI_WriteData (0x11);
        SPI_WriteData (0x06);
        SPI_WriteData (0x07);
        SPI_WriteData (0x08);
        SPI_WriteData (0x07);
        SPI_WriteData (0x22);
        SPI_WriteData (0x04);
        SPI_WriteData (0x12);
        SPI_WriteData (0x0F);
        SPI_WriteData (0xAA);
        SPI_WriteData (0x31);
        SPI_WriteData (0x18);

        SPI_WriteComm (0xB1);
        SPI_WriteData (0x00);
        SPI_WriteData (0x11);
        SPI_WriteData (0x19);
        SPI_WriteData (0x0E);
        SPI_WriteData (0x12);
        SPI_WriteData (0x07);
        SPI_WriteData (0x08);
        SPI_WriteData (0x08);
        SPI_WriteData (0x08);
        SPI_WriteData (0x22);
        SPI_WriteData (0x04);
        SPI_WriteData (0x11);
        SPI_WriteData (0x11);
        SPI_WriteData (0xA9);
        SPI_WriteData (0x32);
        SPI_WriteData (0x18);

        SPI_WriteComm (0xFF);
        SPI_WriteData (0x77);
        SPI_WriteData (0x01);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x11);

        SPI_WriteComm (0xB0);
        SPI_WriteData (0x60);

        SPI_WriteComm (0xB1);
        SPI_WriteData (0x30);

        SPI_WriteComm (0xB2);
        SPI_WriteData (0x87);

        SPI_WriteComm (0xB3);
        SPI_WriteData (0x80);

        SPI_WriteComm (0xB5);
        SPI_WriteData (0x49);

        SPI_WriteComm (0xB7);
        SPI_WriteData (0x85);

        SPI_WriteComm (0xB8);
        SPI_WriteData (0x21);

        SPI_WriteComm (0xC1);
        SPI_WriteData (0x78);

        SPI_WriteComm (0xC2);
        SPI_WriteData (0x78);
        Delay(2);
        SPI_WriteComm (0xE0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x1B);
        SPI_WriteData (0x02);

        SPI_WriteComm (0xE1);
        SPI_WriteData (0x08);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x07);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x44);
        SPI_WriteData (0x44);

        SPI_WriteComm (0xE2);
        SPI_WriteData (0x11);
        SPI_WriteData (0x11);
        SPI_WriteData (0x44);
        SPI_WriteData (0x44);
        SPI_WriteData (0xED);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0xEC);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);

        SPI_WriteComm (0xE3);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x11);
        SPI_WriteData (0x11);

        SPI_WriteComm (0xE4);
        SPI_WriteData (0x44);
        SPI_WriteData (0x44);

        SPI_WriteComm (0xE5);
        SPI_WriteData (0x0A);
        SPI_WriteData (0xE9);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x0C);
        SPI_WriteData (0xEB);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x0E);
        SPI_WriteData (0xED);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x10);
        SPI_WriteData (0xEF);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);

        SPI_WriteComm (0xE6);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x11);
        SPI_WriteData (0x11);

        SPI_WriteComm (0xE7);
        SPI_WriteData (0x44);
        SPI_WriteData (0x44);

        SPI_WriteComm (0xE8);
        SPI_WriteData (0x09);
        SPI_WriteData (0xE8);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x0B);
        SPI_WriteData (0xEA);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x0D);
        SPI_WriteData (0xEC);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);
        SPI_WriteData (0x0F);
        SPI_WriteData (0xEE);
        SPI_WriteData (0xD8);
        SPI_WriteData (0xA0);

        SPI_WriteComm (0xEB);
        SPI_WriteData (0x02);
        SPI_WriteData (0x00);
        SPI_WriteData (0xE4);
        SPI_WriteData (0xE4);
        SPI_WriteData (0x88);
        SPI_WriteData (0x00);
        SPI_WriteData (0x40);

        SPI_WriteComm (0xEC);
        SPI_WriteData (0x3C);
        SPI_WriteData (0x00);

        SPI_WriteComm (0xED);
        SPI_WriteData (0xAB);
        SPI_WriteData (0x89);
        SPI_WriteData (0x76);
        SPI_WriteData (0x54);
        SPI_WriteData (0x02);
        SPI_WriteData (0xFF);
        SPI_WriteData (0xFF);
        SPI_WriteData (0xFF);
        SPI_WriteData (0xFF);
        SPI_WriteData (0xFF);
        SPI_WriteData (0xFF);
        SPI_WriteData (0x20);
        SPI_WriteData (0x45);
        SPI_WriteData (0x67);
        SPI_WriteData (0x98);
        SPI_WriteData (0xBA);

        SPI_WriteComm (0xFF);
        SPI_WriteData (0x77);
        SPI_WriteData (0x01);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x10);

        // SPI_WriteComm(0xCD);
        // SPI_WriteData(0x0a); 
                
        SPI_WriteComm(0x36); 
        SPI_WriteData(0x00); //RGB

        SPI_WriteComm (0xE5);
        SPI_WriteData (0xE4);

        // SPI_WriteComm(0x3A); SPI_WriteData(0x66); //24bit
        // SPI_WriteComm(0x20);//display inversion off
        SPI_WriteComm(0x3A); SPI_WriteData(0x55);//16bit
        // SPI_WriteComm(0x3A); SPI_WriteData(0x66);//18bit``````````````````````````````````````````````````````````````````````																																																																																																								
        // SPI_WriteComm(0x22);//All pixel off


        SPI_WriteComm (0x2a);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x01);
        SPI_WriteData (0xdf);

        SPI_WriteComm (0x2b);
        SPI_WriteData (0x00);
        SPI_WriteData (0x00);
        SPI_WriteData (0x03);
        SPI_WriteData (0x55);


        SPI_WriteComm (0x29);

    }
    else if(type == 5)
    {// 2.1寸圆屏厂商提供驱动 - 华迪创显
        Delay(120);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x10);

        SPI_WriteComm(0xC0);
        SPI_WriteData(0x3B);//Scan line	
        SPI_WriteData(0x00);

        SPI_WriteComm(0xC1);
        SPI_WriteData(0x0B);	//VBP
        SPI_WriteData(0x02);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x07);
        SPI_WriteData(0x02);

        SPI_WriteComm(0xCC);
        SPI_WriteData(0x10);

        //SPI_WriteComm(0xCD);//RGB format
        //SPI_WriteData(0x08);        //用565时屏蔽    666打开

        SPI_WriteComm(0xB0); // IPS   
        SPI_WriteData(0x00); // 255 
        SPI_WriteData(0x11); // 251    
        SPI_WriteData(0x16); // 247  down
        SPI_WriteData(0x0e); // 239    
        SPI_WriteData(0x11); // 231    
        SPI_WriteData(0x06); // 203    
        SPI_WriteData(0x05); // 175 
        SPI_WriteData(0x09); // 147    
        SPI_WriteData(0x08); // 108    
        SPI_WriteData(0x21); // 80  
        SPI_WriteData(0x06); // 52   
        SPI_WriteData(0x13); // 24    
        SPI_WriteData(0x10); // 16    
        SPI_WriteData(0x29); // 8    down
        SPI_WriteData(0x31); // 4    
        SPI_WriteData(0x18); // 0   

        SPI_WriteComm(0xB1);//  IPS	   
        SPI_WriteData(0x00);//  255 
        SPI_WriteData(0x11);//  251
        SPI_WriteData(0x16);//  247   down
        SPI_WriteData(0x0e);//  239
        SPI_WriteData(0x11);//  231
        SPI_WriteData(0x07);//  203    
        SPI_WriteData(0x05);//  175
        SPI_WriteData(0x09);//  147  
        SPI_WriteData(0x09);//  108  
        SPI_WriteData(0x21);//  80 
        SPI_WriteData(0x05);//  52   
        SPI_WriteData(0x13);//  24 
        SPI_WriteData(0x11);//  16 
        SPI_WriteData(0x2a);//  8  down 
        SPI_WriteData(0x31);//  4  
        SPI_WriteData(0x18);//  0  

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);

        SPI_WriteComm(0xB0);  //VOP  3.5375+ *x 0.0125
        SPI_WriteData(0x6d);  //5D
        
        SPI_WriteComm(0xB1); 	//VCOM amplitude setting  
        SPI_WriteData(0x37);  //
        
        SPI_WriteComm(0xB2); 	//VGH Voltage setting  
        SPI_WriteData(0x81);	//12V

        SPI_WriteComm(0xB3);
        SPI_WriteData(0x80);

        SPI_WriteComm(0xB5); 	//VGL Voltage setting  
        SPI_WriteData(0x43);	//-8.3V

        SPI_WriteComm(0xB7);
        SPI_WriteData(0x85);

        SPI_WriteComm(0xB8);
        SPI_WriteData(0x20);

        SPI_WriteComm(0xC1);
        SPI_WriteData(0x78);

        SPI_WriteComm(0xC2);
        SPI_WriteData(0x78);

        SPI_WriteComm(0xD0);
        SPI_WriteData(0x88);

        SPI_WriteComm(0xE0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x02);

        SPI_WriteComm(0xE1);
        SPI_WriteData(0x03);	
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x04);	
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x20);
        SPI_WriteData(0x20);

        SPI_WriteComm(0xE2);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	  
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE3);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE4);
        SPI_WriteData(0x22);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE5);		
        SPI_WriteData(0x05);	
        SPI_WriteData(0xEC);	
        SPI_WriteData(0xA0);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x07);	
        SPI_WriteData(0xEE);	
        SPI_WriteData(0xA0);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE6);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x11);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE7);
        SPI_WriteData(0x22);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xE8);		
        SPI_WriteData(0x06);	
        SPI_WriteData(0xED);	
        SPI_WriteData(0xA0);
        SPI_WriteData(0xA0);
        SPI_WriteData(0x08);	
        SPI_WriteData(0xEF);	
        SPI_WriteData(0xA0); 
        SPI_WriteData(0xA0);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);	
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0xEB);
        SPI_WriteData(0x00); 	
        SPI_WriteData(0x00);
        SPI_WriteData(0x40);
        SPI_WriteData(0x40);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);  

        SPI_WriteComm(0xED);  
        SPI_WriteData(0xFF); 
        SPI_WriteData(0xFF);  
        SPI_WriteData(0xFF); 	
        SPI_WriteData(0xBA); 		
        SPI_WriteData(0x0A); 	
        SPI_WriteData(0xBF); 	
        SPI_WriteData(0x45); 	
        SPI_WriteData(0xFF); 
        SPI_WriteData(0xFF);  
        SPI_WriteData(0x54); 	
        SPI_WriteData(0xFB); 	
        SPI_WriteData(0xA0); 	
        SPI_WriteData(0xAB); 	
        SPI_WriteData(0xFF); 
        SPI_WriteData(0xFF); 
        SPI_WriteData(0xFF); 

        SPI_WriteComm(0xEF);
        SPI_WriteData(0x10); 
        SPI_WriteData(0x0D); 
        SPI_WriteData(0x04); 
        SPI_WriteData(0x08); 
        SPI_WriteData(0x3F); 
        SPI_WriteData(0x1F);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x13);

        SPI_WriteComm(0xEF);
        SPI_WriteData(0x08);

        SPI_WriteComm(0xFF);
        SPI_WriteData(0x77);
        SPI_WriteData(0x01);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);
        SPI_WriteData(0x00);

        SPI_WriteComm(0x11);

        Delay(120);

        SPI_WriteComm(0x29);

        SPI_WriteComm(0x36);
        SPI_WriteData(0x08);

        SPI_WriteComm(0x3A);
        SPI_WriteData(0x70);  //55/50=16bit(RGB565);66=18bit(RGB666);77或默认不写3AH是=24bit(RGB888)  

    }
    else if(type == 6)
    {//网络查询,https://blog.csdn.net/qq_37859760/article/details/118311157
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x13);   
        
        SPI_WriteComm (0xEF);     
        SPI_WriteData (0x08);   
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x10);   
        
        SPI_WriteComm (0xC0);     
        SPI_WriteData (0xE5);   
        SPI_WriteData (0x02);   
        
        SPI_WriteComm (0xC1);     
        SPI_WriteData (0x0C);   
        SPI_WriteData (0x0A);   
        
        SPI_WriteComm (0xC2);     
        SPI_WriteData (0x07);   
        SPI_WriteData (0x0F);   
        
        SPI_WriteComm (0xC3);     
        SPI_WriteData (0x02);   
        
        SPI_WriteComm (0xCC);     
        SPI_WriteData (0x10);   
        
        SPI_WriteComm (0xB0);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x08);   
        SPI_WriteData (0x51);   
        SPI_WriteData (0x0D);   
        SPI_WriteData (0xCE);   
        SPI_WriteData (0x06);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x08);   
        SPI_WriteData (0x08);   
        SPI_WriteData (0x1D);   
        SPI_WriteData (0x02);   
        SPI_WriteData (0xD0);   
        SPI_WriteData (0x0F);   
        SPI_WriteData (0x6F);   
        SPI_WriteData (0x36);   
        SPI_WriteData (0x3F);   
        
        SPI_WriteComm (0xB1);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x10);   
        SPI_WriteData (0x4F);   
        SPI_WriteData (0x0C);   
        SPI_WriteData (0x11);   
        SPI_WriteData (0x05);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x07);   
        SPI_WriteData (0x07);   
        SPI_WriteData (0x1F);   
        SPI_WriteData (0x05);   
        SPI_WriteData (0xD3);   
        SPI_WriteData (0x11);   
        SPI_WriteData (0x6E);   
        SPI_WriteData (0x34);   
        SPI_WriteData (0x3F);   
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x11);   
        
        SPI_WriteComm (0xB0);     
        SPI_WriteData (0x4D);   
        
        SPI_WriteComm (0xB1);     
        SPI_WriteData (0x1C);   
        
        SPI_WriteComm (0xB2);     
        SPI_WriteData (0x87);   
        
        SPI_WriteComm (0xB3);     
        SPI_WriteData (0x80);   
        
        SPI_WriteComm (0xB5);     
        SPI_WriteData (0x47);   
        
        SPI_WriteComm (0xB7);     
        SPI_WriteData (0x85);   
        
        SPI_WriteComm (0xB8);     
        SPI_WriteData (0x21);   
        
        SPI_WriteComm (0xB9);     
        SPI_WriteData (0x10);   
        
        SPI_WriteComm (0xC1);     
        SPI_WriteData (0x78);   
        
        SPI_WriteComm (0xC2);     
        SPI_WriteData (0x78);   
        
        SPI_WriteComm (0xD0);     
        SPI_WriteData (0x88);   
        
        Delay(100);                
        
        SPI_WriteComm (0xE0);     
        SPI_WriteData (0x80);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x02);   
        
        SPI_WriteComm (0xE1);     
        SPI_WriteData (0x04);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x05);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x60);   
        SPI_WriteData (0x60);   
        
        SPI_WriteComm (0xE2);     
        SPI_WriteData (0x30);   
        SPI_WriteData (0x30);   
        SPI_WriteData (0x60);   
        SPI_WriteData (0x60);   
        SPI_WriteData (0x3C);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x3D);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0xE3);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x33);   
        SPI_WriteData (0x33);   
        
        SPI_WriteComm (0xE4);     
        SPI_WriteData (0x44);   
        SPI_WriteData (0x44);   
        
        SPI_WriteComm (0xE5);     
        SPI_WriteData (0x06);   
        SPI_WriteData (0x3E);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x08);   
        SPI_WriteData (0x40);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x0A);   
        SPI_WriteData (0x42);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x0C);   
        SPI_WriteData (0x44);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        
        SPI_WriteComm (0xE6);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x33);   
        SPI_WriteData (0x33);   
        
        SPI_WriteComm (0xE7);     
        SPI_WriteData (0x44);   
        SPI_WriteData (0x44);   
        
        SPI_WriteComm (0xE8);     
        SPI_WriteData (0x07);   
        SPI_WriteData (0x3F);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x09);   
        SPI_WriteData (0x41);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x0B);   
        SPI_WriteData (0x43);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0x0D);   
        SPI_WriteData (0x45);   
        SPI_WriteData (0xA0);   
        SPI_WriteData (0xA0);   
        
        SPI_WriteComm (0xEB);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x4E);   
        SPI_WriteData (0x4E);   
        SPI_WriteData (0xEE);   
        SPI_WriteData (0x44);   
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0xED);     
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0x04);   
        SPI_WriteData (0x56);   
        SPI_WriteData (0x72);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0x27);   
        SPI_WriteData (0x65);   
        SPI_WriteData (0x40);   
        SPI_WriteData (0xFF);   
        SPI_WriteData (0xFF);   
        
        SPI_WriteComm (0xEF);     
        SPI_WriteData (0x10);   
        SPI_WriteData (0x0D);   
        SPI_WriteData (0x04);   
        SPI_WriteData (0x08);   
        SPI_WriteData (0x3F);   
        SPI_WriteData (0x1F);   
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x13);   
        
        SPI_WriteComm (0xE8);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x0E);   
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0x11);     
        
        Delay(120);                
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x13);   
        
        SPI_WriteComm (0xE8);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x0C);   
        
        Delay(10 );                
        
        SPI_WriteComm (0xE8);     
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0xFF);     
        SPI_WriteData (0x77);   
        SPI_WriteData (0x01);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0x3A);     
        SPI_WriteData (0x55);   
        
        SPI_WriteComm (0x36);     
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0x35);     
        SPI_WriteData (0x00);   
        
        SPI_WriteComm (0x29);     

    }
    else if(type == 7)
    {// 2.8寸圆屏-高信技术
        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x13);   

        SPI_WriteComm(0xEF);
        SPI_WriteData(0x08);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x10);   

        SPI_WriteComm(0xC0);     
        SPI_WriteData(0x3B);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0xC1);     
        SPI_WriteData(0x10);   
        SPI_WriteData(0x0C);   

        SPI_WriteComm(0xC2);     
        SPI_WriteData(0x07);   
        SPI_WriteData(0x0A);   

        SPI_WriteComm(0xC7);     
        SPI_WriteData(0x04);   

        SPI_WriteComm(0xCC);     
        SPI_WriteData(0x10);   

        SPI_WriteComm(0xB0);     
        SPI_WriteData(0x05);   
        SPI_WriteData(0x12);   
        SPI_WriteData(0x98);   
        SPI_WriteData(0x0E);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0x23);   
        SPI_WriteData(0x05);   
        SPI_WriteData(0x52);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0x67);   
        SPI_WriteData(0x2C);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xB1);     
        SPI_WriteData(0x0B);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x97);   
        SPI_WriteData(0x0C);   
        SPI_WriteData(0x12);   
        SPI_WriteData(0x06);   
        SPI_WriteData(0x06);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x22);   
        SPI_WriteData(0x03);   
        SPI_WriteData(0x51);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x66);   
        SPI_WriteData(0x2B);   
        SPI_WriteData(0x0F);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xB0);     
        SPI_WriteData(0x5D);   

        SPI_WriteComm(0xB1);     
        SPI_WriteData(0x2D);   

        SPI_WriteComm(0xB2);     
        SPI_WriteData(0x81);   

        SPI_WriteComm(0xB3);     
        SPI_WriteData(0x80);   

        SPI_WriteComm(0xB5);     
        SPI_WriteData(0x4E);   

        SPI_WriteComm(0xB7);     
        SPI_WriteData(0x85);   

        SPI_WriteComm(0xB8);     
        SPI_WriteData(0x20);   

        SPI_WriteComm(0xC1);     
        SPI_WriteData(0x78);   

        SPI_WriteComm(0xC2);     
        SPI_WriteData(0x78);   

        SPI_WriteComm(0xD0);     
        SPI_WriteData(0x88);   

        SPI_WriteComm(0xE0);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x02);   

        SPI_WriteComm(0xE1);     
        SPI_WriteData(0x06);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x05);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0x33);   

        SPI_WriteComm(0xE2);     
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0xE3);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xE4);     
        SPI_WriteData(0x44);   
        SPI_WriteData(0x44);   

        SPI_WriteComm(0xE5);     
        SPI_WriteData(0x0D);   
        SPI_WriteData(0xF5);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0xF7);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0xF1);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0B);   
        SPI_WriteData(0xF3);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   

        SPI_WriteComm(0xE6);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xE7);     
        SPI_WriteData(0x44);   
        SPI_WriteData(0x44);   

        SPI_WriteComm(0xE8);     
        SPI_WriteData(0x0C);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0E);   
        SPI_WriteData(0xF6);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0A);   
        SPI_WriteData(0xF2);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   

        SPI_WriteComm(0xE9);     
        SPI_WriteData(0x36);   
        SPI_WriteData(0x01);   

        SPI_WriteComm(0xEB);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0xE4);   
        SPI_WriteData(0xE4);   
        SPI_WriteData(0x44);   
        SPI_WriteData(0x88);   
        SPI_WriteData(0x40);   

        SPI_WriteComm(0xED);     
        SPI_WriteData(0xFF);   
        SPI_WriteData(0x10);   
        SPI_WriteData(0xAF);   
        SPI_WriteData(0x76);   
        SPI_WriteData(0x54);   
        SPI_WriteData(0x2B);   
        SPI_WriteData(0xCF);   
        SPI_WriteData(0xFF);   
        SPI_WriteData(0xFF);   
        SPI_WriteData(0xFC);   
        SPI_WriteData(0xB2);   
        SPI_WriteData(0x45);   
        SPI_WriteData(0x67);   
        SPI_WriteData(0xFA);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0xFF);   

        SPI_WriteComm(0xEF);     
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x45);   
        SPI_WriteData(0x3F);   
        SPI_WriteData(0x54);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x11);     
        Delay(120);                //ms

        SPI_WriteComm(0x3A);     
        SPI_WriteData(0x66);   

        SPI_WriteComm(0x36);     
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x35);     
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x29);
    }
    else if (type == 8)
    {// 2.1寸圆屏,参考厂家提供的配套参数修改而来
        // SPI_RES=1;
        // Delay(80);
        // SPI_RES=0;
        // Delay(80);
        // SPI_RES=1;
        // Delay(480);

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x13);   

        SPI_WriteComm(0xEF);     
        SPI_WriteData(0x08);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x10);   

        SPI_WriteComm(0xC0);     
        SPI_WriteData(0x3B);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0xC1);     
        SPI_WriteData(0x10);   
        SPI_WriteData(0x0C);   

        SPI_WriteComm(0xC2);     
        SPI_WriteData(0x07);   
        SPI_WriteData(0x0A);   

        SPI_WriteComm(0xC7);     
        SPI_WriteData(0x00);   // x坐标方向,0x00:479-0,0x04:0-479     

        SPI_WriteComm(0xCC);     
        SPI_WriteData(0x10);   

        SPI_WriteComm(0xB0);     
        SPI_WriteData(0x05);   
        SPI_WriteData(0x12);   
        SPI_WriteData(0x98);   
        SPI_WriteData(0x0E);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0x23);   
        SPI_WriteData(0x05);   
        SPI_WriteData(0x52);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0x67);   
        SPI_WriteData(0x2C);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xB1);     
        SPI_WriteData(0x0B);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x97);   
        SPI_WriteData(0x0C);   
        SPI_WriteData(0x12);   
        SPI_WriteData(0x06);   
        SPI_WriteData(0x06);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x22);   
        SPI_WriteData(0x03);   
        SPI_WriteData(0x51);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x66);   
        SPI_WriteData(0x2B);   
        SPI_WriteData(0x0F);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xB0);     
        SPI_WriteData(0x5D);   

        SPI_WriteComm(0xB1);     
        SPI_WriteData(0x2A);   

        SPI_WriteComm(0xB2);     
        SPI_WriteData(0x81);   

        SPI_WriteComm(0xB3);     
        SPI_WriteData(0x80);   

        SPI_WriteComm(0xB5);     
        SPI_WriteData(0x4E);   

        SPI_WriteComm(0xB7);     
        SPI_WriteData(0x85);   

        SPI_WriteComm(0xB8);     
        SPI_WriteData(0x20);   

        SPI_WriteComm(0xC1);     
        SPI_WriteData(0x78);   

        SPI_WriteComm(0xC2);     
        SPI_WriteData(0x78);   

        SPI_WriteComm(0xD0);     
        SPI_WriteData(0x88);   

        SPI_WriteComm(0xE0);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x02);   

        SPI_WriteComm(0xE1);     
        SPI_WriteData(0x06);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x05);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x07);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0x33);   

        SPI_WriteComm(0xE2);     
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0x33);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0xE3);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xE4);     
        SPI_WriteData(0x44);   
        SPI_WriteData(0x44);   

        SPI_WriteComm(0xE5);     
        SPI_WriteData(0x0D);   
        SPI_WriteData(0xF5);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0F);   
        SPI_WriteData(0xF7);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x09);   
        SPI_WriteData(0xF1);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0B);   
        SPI_WriteData(0xF3);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   

        SPI_WriteComm(0xE6);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x11);   
        SPI_WriteData(0x11);   

        SPI_WriteComm(0xE7);     
        SPI_WriteData(0x44);   
        SPI_WriteData(0x44);   

        SPI_WriteComm(0xE8);     
        SPI_WriteData(0x0C);   
        SPI_WriteData(0xF4);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0E);   
        SPI_WriteData(0xF6);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   
        SPI_WriteData(0x0A);   
        SPI_WriteData(0xF2);   
        SPI_WriteData(0x30);   
        SPI_WriteData(0xF0);   

        SPI_WriteComm(0xE9);     
        SPI_WriteData(0x36);   
        SPI_WriteData(0x01);   

        SPI_WriteComm(0xEB);     
        SPI_WriteData(0x00);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0xE4);   
        SPI_WriteData(0xE4);   
        SPI_WriteData(0x44);   
        SPI_WriteData(0x88);   
        SPI_WriteData(0x40);   

        SPI_WriteComm(0xED);     
        SPI_WriteData(0xFF);   
        SPI_WriteData(0x10);   
        SPI_WriteData(0xAF);   
        SPI_WriteData(0x76);   
        SPI_WriteData(0x54);   
        SPI_WriteData(0x2B);   
        SPI_WriteData(0xCF);   
        SPI_WriteData(0xFF);   
        SPI_WriteData(0xFF);   
        SPI_WriteData(0xFC);   
        SPI_WriteData(0xB2);   
        SPI_WriteData(0x45);   
        SPI_WriteData(0x67);   
        SPI_WriteData(0xFA);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0xFF);   

        SPI_WriteComm(0xEF);     
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x08);   
        SPI_WriteData(0x45);   
        SPI_WriteData(0x3F);   
        SPI_WriteData(0x54);   

        SPI_WriteComm(0xFF);     
        SPI_WriteData(0x77);   
        SPI_WriteData(0x01);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x11);     
        Delay(120);                // 120ms

        SPI_WriteComm(0x3A);     
        SPI_WriteData(0x65);       // RGB565

        SPI_WriteComm(0x36);     
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x35);     
        SPI_WriteData(0x00);   

        SPI_WriteComm(0x29); 
    }
}

/**
 * @brief 删除st7701s对象
 * @param st7701s_handle 类实例指针
*/
void st7701s_del_object(vernon_st7701s_handle st7701s_handle)
{
    assert(st7701s_handle != NULL);
    free(st7701s_handle);
}

/**
 * @brief SPI写指令
 * @param st7701s_handle 类实例指针
 * @param cmd 指令
*/
void st7701s_write_cmd(vernon_st7701s_handle st7701s_handle, uint8_t cmd)
{
    if(st7701s_handle->method_select)
    {
        spi_transaction_t spi_tran = 
        {
            .rxlength = 0,
            .length = 0,
            .cmd = 0,
            .addr = cmd,
        };
        spi_device_transmit(st7701s_handle->spi_device, &spi_tran);
    }
    else
    {
        ioexpander_write_cmd();
    }
}

/**
 * @brief SPI写地址
 * @param st7701s_handle 类实例指针
 * @param cmd 地址
*/
void st7701s_write_data(vernon_st7701s_handle st7701s_handle, uint8_t data)
{
    if(st7701s_handle->method_select)
    {
        spi_transaction_t spi_tran = 
        {
            .rxlength = 0,
            .length = 0,
            .cmd = 1,
            .addr = data,
        };
        spi_device_transmit(st7701s_handle->spi_device, &spi_tran);
    }
    else
    {
        ioexpander_write_data();
    }
}

st7701s.h:

#ifndef _ST7701S_H
#define _ST7701S_H

#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "freertos/task.h"

#define SPI_METHOD 1
#define IOEXPANDER_METHOD 0

//类结构体
typedef struct{
    char method_select;
    
    //SPI config_t
    spi_device_handle_t spi_device;
    spi_bus_config_t spi_io_config_t;
    spi_device_interface_config_t st7701s_protocol_config_t;

    //I2C config_t
}vernon_st7701s;

typedef vernon_st7701s * vernon_st7701s_handle;


/*Public Function*/

//创建新的对象
vernon_st7701s_handle st7701s_new_object(int sda, int scl, int cs, char channel_select, char method_select);

//屏幕初始化
void st7701s_screen_init(vernon_st7701s_handle st7701s_handlev, unsigned char type);

//删除对象
void st7701s_delObject(vernon_st7701s_handle st7701s_handle);


/*Private Function*/

//SPI写指令
void st7701s_write_cmd(vernon_st7701s_handle st7701s_handle, uint8_t cmd);

//SPI写地址
void st7701s_write_data(vernon_st7701s_handle st7701s_handle, uint8_t data);

#endif

2.3 点亮LCD屏

编写主函数,示例如下:
rgb_lcd_example_main.c:

#include <stdio.h>
#include "sdkconfig.h"
#include "esp_lcd_panel_ops.h"
#include "esp_lcd_panel_rgb.h"
#include "driver/gpio.h"
#include "esp_err.h"
#include "esp_log.h"
#include "stdlib.h"
#include "string.h"
#include "st7701s.h"

// SPI引脚配置,需要根据你的实际情况配置
#define SPI_PORT  SPI3_HOST  // SPI端口号
#define SPI_SDA   48         // SDA
#define SPI_SCL   16         // SCL
#define SPI_CS    15         // CS

// RGB屏幕引脚配置,需要根据你的实际情况配置
#define ST7701S_LCD_BK_LIGHT_ON_LEVEL  1
#define ST7701S_LCD_BK_LIGHT_OFF_LEVEL !ST7701S_LCD_BK_LIGHT_ON_LEVEL
#define ST7701S_PIN_NUM_BK_LIGHT       47       // 背光
#define ST7701S_PIN_NUM_PCLK           14       // PCLK
#define ST7701S_PIN_NUM_DE             13       // DE
#define ST7701S_PIN_NUM_VSYNC          12       // VSYNC
#define ST7701S_PIN_NUM_HSYNC          11       // HSYNC
#define ST7701S_PIN_NUM_DATA0          10       // B0
#define ST7701S_PIN_NUM_DATA1          9        // B1
#define ST7701S_PIN_NUM_DATA2          8        // B2
#define ST7701S_PIN_NUM_DATA3          7        // B3
#define ST7701S_PIN_NUM_DATA4          6        // B4
#define ST7701S_PIN_NUM_DATA5          5        // G0
#define ST7701S_PIN_NUM_DATA6          4        // G1
#define ST7701S_PIN_NUM_DATA7          3        // G2
#define ST7701S_PIN_NUM_DATA8          2        // G3
#define ST7701S_PIN_NUM_DATA9          1        // G4
#define ST7701S_PIN_NUM_DATA10         0        // G5
#define ST7701S_PIN_NUM_DATA11         42       // R0
#define ST7701S_PIN_NUM_DATA12         41       // R1
#define ST7701S_PIN_NUM_DATA13         40       // R2
#define ST7701S_PIN_NUM_DATA14         39       // R3
#define ST7701S_PIN_NUM_DATA15         38       // R4
#define ST7701S_PIN_NUM_DISP_EN        -1

// 屏幕分辨率参数,需要根据你的实际情况配置
#define ST7701S_LCD_H_RES              480      // 水平方向
#define ST7701S_LCD_V_RES              480      // 垂直方向

// RGB通信时序相关参数,需要根据你的实际情况配置
#define ST7701S_LCD_PIXEL_CLOCK_HZ     (15 * 1000 * 1000)  // clk 15MHz
#define ST7701S_HSYNC_PULSE_WIDTH       2                  // hpw 2 
#define ST7701S_HSYNC_BACK_PORCH        4                  // hbp 4 
#define ST7701S_HSYNC_FRONT_PORCH       12                 // hfp 12 
#define ST7701S_VSYNC_PULSE_WIDTH       4                  // vpw 4 
#define ST7701S_VSYNC_BACK_PORCH        4                  // vbp 4 
#define ST7701S_VSYNC_FRONT_PORCH       19                 // vfp 19 

// RGB565基础颜色表
#define COLOR_BLACK       0x0000      /*   0,   0,   0 */
#define COLOR_NAVY        0x000F      /*   0,   0, 128 */
#define COLOR_DARKGREEN   0x03E0      /*   0, 128,   0 */
#define COLOR_DARKCYAN    0x03EF      /*   0, 128, 128 */
#define COLOR_MAROON      0x7800      /* 128,   0,   0 */
#define COLOR_PURPLE      0x780F      /* 128,   0, 128 */
#define COLOR_OLIVE       0x7BE0      /* 128, 128,   0 */
#define COLOR_LIGHTGREY   0xD69A      /* 211, 211, 211 */
#define COLOR_DARKGREY    0x7BEF      /* 128, 128, 128 */
#define COLOR_BLUE        0x001F      /*   0,   0, 255 */
#define COLOR_GREEN       0x07E0      /*   0, 255,   0 */
#define COLOR_CYAN        0x07FF      /*   0, 255, 255 */
#define COLOR_RED         0xF800      /* 255,   0,   0 */
#define COLOR_MAGENTA     0xF81F      /* 255,   0, 255 */
#define COLOR_YELLOW      0xFFE0      /* 255, 255,   0 */
#define COLOR_WHITE       0xFFFF      /* 255, 255, 255 */
#define COLOR_ORANGE      0xFDA0      /* 255, 180,   0 */
#define COLOR_GREENYELLOW 0xB7E0      /* 180, 255,   0 */
#define COLOR_PINK        0xFE19      /* 255, 192, 203 */ //Lighter pink, was 0xFC9F      
#define COLOR_BROWN       0x9A60      /* 150,  75,   0 */
#define COLOR_GOLD        0xFEA0      /* 255, 215,   0 */
#define COLOR_SILVER      0xC618      /* 192, 192, 192 */
#define COLOR_SKYBLUE     0x867D      /* 135, 206, 235 */
#define COLOR_VIOLET      0x915C      /* 180,  46, 226 */

esp_lcd_panel_handle_t panel_handle = NULL;

static const char *TAG = "rgb_lcd";

// LCD初始化
void lcd_init(void)
{
    vernon_st7701s_handle vernon_st7701s = st7701s_new_object(SPI_SDA, SPI_SCL, SPI_CS, SPI_PORT, SPI_METHOD);
    st7701s_screen_init(vernon_st7701s, 8);

    #if ST7701S_PIN_NUM_BK_LIGHT >= 0
    ESP_LOGI(TAG, "Turn off LCD backlight");
    gpio_config_t bk_gpio_config = {
        .mode = GPIO_MODE_OUTPUT,
        .pin_bit_mask = 1ULL << ST7701S_PIN_NUM_BK_LIGHT
    };
    ESP_ERROR_CHECK(gpio_config(&bk_gpio_config));
#endif

    ESP_LOGI(TAG, "Install RGB LCD panel driver");
    esp_lcd_rgb_panel_config_t panel_config = {
        .data_width = 16, // RGB565 in parallel mode, thus 16bit in width
        .psram_trans_align = 64,
        .num_fbs = 1,
        .clk_src = LCD_CLK_SRC_PLL240M,
        .disp_gpio_num = ST7701S_PIN_NUM_DISP_EN,
        .pclk_gpio_num = ST7701S_PIN_NUM_PCLK,
        .vsync_gpio_num = ST7701S_PIN_NUM_VSYNC,
        .hsync_gpio_num = ST7701S_PIN_NUM_HSYNC,
        .de_gpio_num = ST7701S_PIN_NUM_DE,
        .data_gpio_nums = {
            ST7701S_PIN_NUM_DATA0,
            ST7701S_PIN_NUM_DATA1,
            ST7701S_PIN_NUM_DATA2,
            ST7701S_PIN_NUM_DATA3,
            ST7701S_PIN_NUM_DATA4,
            ST7701S_PIN_NUM_DATA5,
            ST7701S_PIN_NUM_DATA6,
            ST7701S_PIN_NUM_DATA7,
            ST7701S_PIN_NUM_DATA8,
            ST7701S_PIN_NUM_DATA9,
            ST7701S_PIN_NUM_DATA10,
            ST7701S_PIN_NUM_DATA11,
            ST7701S_PIN_NUM_DATA12,
            ST7701S_PIN_NUM_DATA13,
            ST7701S_PIN_NUM_DATA14,
            ST7701S_PIN_NUM_DATA15,
        },
        .timings = {
            .pclk_hz = ST7701S_LCD_PIXEL_CLOCK_HZ,
            .h_res = ST7701S_LCD_H_RES,
            .v_res = ST7701S_LCD_V_RES,
            .hsync_pulse_width = ST7701S_HSYNC_PULSE_WIDTH,    
            .hsync_back_porch = ST7701S_HSYNC_BACK_PORCH,      
            .hsync_front_porch = ST7701S_HSYNC_FRONT_PORCH,    
            .vsync_pulse_width = ST7701S_VSYNC_PULSE_WIDTH,    
            .vsync_back_porch = ST7701S_VSYNC_BACK_PORCH,      
            .vsync_front_porch = ST7701S_VSYNC_FRONT_PORCH,    
            .flags = 
            {// 由于一些 LCD 可以通过硬件引脚或者软件命令配置这些参数,需要确保它们与配置保持一致,但通常情况下均为 `0`
                .hsync_idle_low = 0,    // HSYNC 信号空闲时的电平,0:高电平,1:低电平
                .vsync_idle_low = 0,    // VSYNC 信号空闲时的电平,0 表示高电平,1:低电平
                .de_idle_high = 0,      // DE 信号空闲时的电平,0:高电平,1:低电平
                .pclk_active_neg = 0,   // 时钟信号的有效边沿,0:上升沿有效,1:下降沿有效
                .pclk_idle_high = 0,    // PCLK 信号空闲时的电平,0:高电平,1:低电平
            },
        },
        .flags.fb_in_psram = true, // allocate frame buffer in PSRAM
        // .flags.double_fb = true,
    };
    ESP_ERROR_CHECK(esp_lcd_new_rgb_panel(&panel_config, &panel_handle));

    // ESP_LOGI(TAG, "Register event callbacks");
    // esp_lcd_rgb_panel_event_callbacks_t cbs = {
    //     .on_vsync = user_on_vsync_event,
    // };
    // ESP_ERROR_CHECK(esp_lcd_rgb_panel_register_event_callbacks(panel_handle, &cbs, &disp_drv));

    ESP_LOGI(TAG, "Initialize RGB LCD panel");
    ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));

#if ST7701S_PIN_NUM_BK_LIGHT >= 0
    ESP_LOGI(TAG, "Turn on LCD backlight");
    // gpio_set_direction(ST7701S_PIN_NUM_BK_LIGHT, GPIO_MODE_OUTPUT);
    gpio_set_level(ST7701S_PIN_NUM_BK_LIGHT, ST7701S_LCD_BK_LIGHT_ON_LEVEL);
#endif
}

void memset16(void *m, uint16_t val, size_t count)
{
    uint16_t *buf = m;

    while(count--) *buf++ = val;
}

void app_main(void)
{
    uint16_t color;
    uint16_t *rgb_buf = NULL;
    rgb_buf = malloc(ST7701S_LCD_H_RES * ST7701S_LCD_V_RES * 2);
    lcd_init();
    while(1)
    {
        color = COLOR_RED;    // 红色
        memset16(rgb_buf, color, ST7701S_LCD_H_RES * ST7701S_LCD_V_RES);
        esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, 479, 479, rgb_buf);
        vTaskDelay(500);

        color = COLOR_GREEN;  // 绿色
        memset16(rgb_buf, color, ST7701S_LCD_H_RES * ST7701S_LCD_V_RES);
        esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, 479, 479, rgb_buf);
        vTaskDelay(500);

        color = COLOR_BLUE;   // 蓝色
        memset16(rgb_buf, color, ST7701S_LCD_H_RES * ST7701S_LCD_V_RES);
        esp_lcd_panel_draw_bitmap(panel_handle, 0, 0, 479, 479, rgb_buf);
        vTaskDelay(500);
    }
}

2.4 编译测试

注:如果在工程中加入了新文件,需要先清除原来的编译文件,然后再重新编译,否则会报错。
在这里插入图片描述
编译并烧录。
在这里插入图片描述
运行结果:
屏幕依次显示红绿蓝三种颜色。

至此,ST7701S驱动的RGB成功点亮。

结束语

好了,关于如何使用ESP32S3驱动RGB屏就讲到这里,有什么问题欢迎评论区留言。

如果这篇文章能够帮到你,就…你懂的。
在这里插入图片描述

esp-idf是一个开源的实时操作系统(RTOS)和开发框架,专门为ESP32ESP32-S2芯片设计。它提供了丰富的软件库和驱动程序,使开发者能够轻松地编写高效的应用程序。 UDP是用户数据报协议(User Datagram Protocol)的简称。它是一种无连接的传输协议,用于在网络上发送数据报,具有简单、快速、无状态的特点。UDP通常用于那些对数据可靠性要求不高的应用,例如即时通信、视频流传输等。 esp-idf中提供了使用UDP协议进行网络通信的相关函数和接口,使开发者能够轻松地在ESP32ESP32-S2上实现UDP通信功能。通过esp-idf开发者可以创建UDP套接字(socket),设置监听端口、绑定IP地址等。然后,可以使用相关函数发送和接收UDP数据报。 在使用esp-idf的UDP功能时,需要注意以下几点: 1. 首先,需要在项目配置文件中启用与UDP相关的组件(component)。 2. 然后,可以使用esp-idf提供的接口函数进行UDP通信,例如socket、bind、sendto、recvfrom等函数。 3. 开发者可以根据需要设置UDP套接字的属性,例如超时时间、重试次数等。 4. 在使用UDP通信时,需要注意网络环境和网络拓扑,例如IP地址、端口配置等。 5. 开发者还可以使用Wi-Fi或以太网功能与UDP协议结合,实现无线或有线网络的UDP通信。 总之,esp-idf提供了丰富的UDP网络通信功能,使开发者能够轻松地在ESP32ESP32-S2上实现UDP通信。无论是即时通信、视频传输还是其他数据传输应用,都可以通过esp-idf进行开发和调试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值