🔧 添加(lcd):添加LCD写入缓存函数
1. 添加函数:lcdDrawFillRectData 1)x1,x2,y1,y2:坐标值 2) data:数据 2. 添加该函数的测试在display的task里面 结束
This commit is contained in:
parent
9cf1e005c5
commit
ceebbac165
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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_ */
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user