1 硬件描述
我这里用的LCD是RGB接口的,驱动IC为ST7701S,用ESP32S3驱动,RGB565 16根数据线,接线如下:
| ESP32S3 | LCD | SPI数据线 |
|---|---|---|
| IO48 | SDA | SPI数据线 |
| IO16 | SCK | SPI时钟线 |
| IO15 | CS | SPI片选线 |
| IO14 | PCLK | RGB时钟线 |
| IO13 | DE | RGB数据使能 |
| IO12 | VSYNC | 垂直同步 |
| IO11 | HSYNC | 水平同步 |
| 空 | DB0 | 数据线0 |
| IO10 | DB1 | 数据线1 B1 |
| IO9 | DB2 | 数据线2 B2 |
| IO8 | DB3 | 数据线3 B3 |
| IO7 | DB4 | 数据线4 B4 |
| IO6 | DB5 | 数据线5 B5 |
| IO5 | DB6 | 数据线6 G0 |
| IO4 | DB7 | 数据线7 G1 |
| IO3 | DB8 | 数据线8 G2 |
| IO2 | DB9 | 数据线9 G3 |
| IO1 | DB10 | 数据线10 G4 |
| IO0 | DB11 | 数据线11 G5 |
| 空 | DB12 | 数据线12 |
| IO42 | DB13 | 数据线13 R1 |
| IO41 | DB14 | 数据线14 R2 |
| IO40 | DB15 | 数据线15 R3 |
| IO39 | DB16 | 数据线16 R4 |
| IO38 | DB17 | 数据线17 R5 |
2 软件编程
开发环境基于VScode + ESP-IDF。关于RGB屏幕显示原理,这里不细说,只讲编程,感兴趣的同学可以自行查阅。
注:关于怎么在Vscode里面搭建ESP-IDF的开环环境,这里不具体说了,网上教程很多,不懂的同学请先自行搭建好环境。
2.1 新建工程
打开ESP-IDF,点击Show example。
选择rgb_panel例程作为我们的工程的基础模版。保存至本地,会得到一个工程模板,如下图:
注: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.c和st7701s.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屏就讲到这里,有什么问题欢迎评论区留言。
如果这篇文章能够帮到你,就…你懂的。
3663