ESP32 IDF开发——RGB LCD显示屏(ST7701S)
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
。
注: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屏就讲到这里,有什么问题欢迎评论区留言。
如果这篇文章能够帮到你,就…你懂的。