🔧 添加(lcd):添加LCD写入缓存函数

1. 添加函数:lcdDrawFillRectData
   1)x1,x2,y1,y2:坐标值
   2) data:数据
  2. 添加该函数的测试在display的task里面
结束
This commit is contained in:
yangxy 2022-12-24 17:17:46 +08:00
parent 9cf1e005c5
commit ceebbac165
3 changed files with 65 additions and 10 deletions

View File

@ -29,14 +29,29 @@ TFT_t dev;
TickType_t FillTest(TFT_t* dev, int width, int height)
{
lcdBacklightOn(dev);
TickType_t startTick, endTick, diffTick;
startTick = xTaskGetTickCount();
lcdFillScreen(dev, RED);
// lcdFillScreen(dev, RED);
uint16_t data[1024] = {0};
int i = 0;
for ( i = 0; i < 1024; i++) {
data[i] = RED;
}
lcdDrawFillRectData(dev, 11, 11, 220, 220, data);
vTaskDelay(50);
lcdFillScreen(dev, GREEN);
// lcdFillScreen(dev, GREEN);
for ( i = 0; i < 1024; i++) {
data[i] = GREEN;
}
lcdDrawFillRectData(dev, 11, 11, 220, 220, data);
vTaskDelay(50);
lcdFillScreen(dev, BLUE);
// lcdFillScreen(dev, BLUE);
for ( i = 0; i < 1024; i++) {
data[i] = BLUE;
}
lcdDrawFillRectData(dev, 11, 11, 220, 220, data);
vTaskDelay(50);
endTick = xTaskGetTickCount();
@ -106,13 +121,15 @@ static void _display_thread_entry()
uint8_t app_task_display_start()
{
cst816t_begin(34, 33, 35, 36);
xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
// xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO,
CONFIG_BL_GPIO);
// lcdBacklightOn(&dev);
// vTaskDelay(1000);
lcdInit(&dev, CONFIG_WIDTH, CONFIG_HEIGHT, CONFIG_OFFSETX, CONFIG_OFFSETY);
// lcdBacklightOn(&dev);
lcdBacklightOff(&dev);
vTaskDelay(100);
lcdFillScreen(&dev, BLACK);
vTaskDelay(100);
xTaskCreatePinnedToCore(_display_thread_entry, "dsp test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
#if CONFIG_INVERSION

View File

@ -234,6 +234,7 @@ bool spi_master_write_color(TFT_t * dev, uint16_t color, uint16_t size)
// Add 202001
bool spi_master_write_colors(TFT_t * dev, uint16_t * colors, uint16_t size)
{
#if LCD_FLIP_16BIT
static uint8_t Byte[1024];
int index = 0;
for(int i=0;i<size;i++) {
@ -241,7 +242,11 @@ bool spi_master_write_colors(TFT_t * dev, uint16_t * colors, uint16_t size)
Byte[index++] = colors[i] & 0xFF;
}
gpio_set_level( dev->_dc, SPI_Data_Mode );
return spi_master_write_byte( dev->_SPIHandle, Byte, size*2);
return spi_master_write_byte( dev->_SPIHandle, Byte, size);
#else
gpio_set_level( dev->_dc, SPI_Data_Mode );
return spi_master_write_byte( dev->_SPIHandle, colors, size);
#endif
}
void delayMS(int ms) {
@ -263,6 +268,7 @@ void lcdInit(TFT_t * dev, int width, int height, int offsetx, int offsety)
dev->_font_underline = false;
#if 1
lcdBacklightOff(dev);
spi_master_write_command(dev, 0x01); //Software Reset
delayMS(150);
@ -416,9 +422,6 @@ void lcdInit(TFT_t * dev, int width, int height, int offsetx, int offsety)
spi_master_write_command(dev, 0x2C);
#endif
if(dev->_bl >= 0) {
gpio_set_level( dev->_bl, 0 );
}
}
@ -1110,3 +1113,35 @@ void lcdInversionOff(TFT_t * dev) {
void lcdInversionOn(TFT_t * dev) {
spi_master_write_command(dev, 0x21); //Display Inversion On
}
void lcdDrawFillRectData(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *data)
{
if (x1 >= dev->_width) return;
if (x2 >= dev->_width) x2=dev->_width-1;
if (y1 >= dev->_height) return;
if (y2 >= dev->_height) y2=dev->_height-1;
ESP_LOGD(TAG,"offset(x)=%d offset(y)=%d",dev->_offsetx,dev->_offsety);
uint16_t _x1 = x1 + dev->_offsetx;
uint16_t _x2 = x2 + dev->_offsetx;
uint16_t _y1 = y1 + dev->_offsety;
uint16_t _y2 = y2 + dev->_offsety;
bool ret = spi_master_write_command(dev, 0x2A); // set column(x) address
printf("ret = %d\r\n", ret);
spi_master_write_addr(dev, _x1, _x2);
spi_master_write_command(dev, 0x2B); // set Page(y) address
spi_master_write_addr(dev, _y1, _y2);
spi_master_write_command(dev, 0x2C); // Memory Write
for(int i=_x1;i<=_x2;i++){
uint16_t size = _y2-_y1+1;
spi_master_write_colors(dev, data, size * 2);
#if 0
for(j=y1;j<=y2;j++){
//ESP_LOGD(TAG,"i=%d j=%d",i,j);
spi_master_write_data_word(dev, color);
}
#endif
}
}

View File

@ -20,6 +20,7 @@
#define DIRECTION180 2
#define DIRECTION270 3
#define LCD_FLIP_16BIT 1
typedef struct {
uint16_t _width;
@ -77,5 +78,7 @@ void lcdBacklightOff(TFT_t * dev);
void lcdBacklightOn(TFT_t * dev);
void lcdInversionOff(TFT_t * dev);
void lcdInversionOn(TFT_t * dev);
void lcdDrawFillRectData(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *data);
#endif /* MAIN_ST7789_H_ */