#include "lcd.h" static const char *TAG = "LCD"; /****************************************************************************** 函数说明:设置起始和结束地址 入口数据:x1,x2 设置列的起始和结束地址 y1,y2 设置行的起始和结束地址 返回值: 无 ******************************************************************************/ void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { #if USE_HORIZONTAL == 0 lcd_spi_reg(0x2a); // 列地址设置 lcd_spi_write16(x1); lcd_spi_write16(x2); lcd_spi_reg(0x2b); // 行地址设置 lcd_spi_write16(y1); lcd_spi_write16(y2); lcd_spi_reg(0x2c); // 储存器写 #elif USE_HORIZONTAL == 1 lcd_spi_reg(0x2a); // 列地址设置 lcd_spi_write16(x1); lcd_spi_write16(x2); lcd_spi_reg(0x2b); // 行地址设置 lcd_spi_write16(y1 + 80); lcd_spi_write16(y2 + 80); lcd_spi_reg(0x2c); // 储存器写 #elif USE_HORIZONTAL == 2 lcd_spi_reg(0x2a); // 列地址设置 lcd_spi_write16(x1); lcd_spi_write16(x2); lcd_spi_reg(0x2b); // 行地址设置 lcd_spi_write16(y1); lcd_spi_write16(y2); lcd_spi_reg(0x2c); // 储存器写 #elif USE_HORIZONTAL == 3 lcd_spi_reg(0x2a); // 列地址设置 lcd_spi_write16(x1 + 80); lcd_spi_write16(x2 + 80); lcd_spi_reg(0x2b); // 行地址设置 lcd_spi_write16(y1); lcd_spi_write16(y2); lcd_spi_reg(0x2c); // 储存器写 #endif } void LCD_Clear(uint16_t Color) { uint16_t i, j; LCD_Address_Set(0, 0, LCD_WW - 1, LCD_HH - 1); for (i = 0; i < LCD_WW; i++) { for (j = 0; j < LCD_HH; j++) { lcd_spi_write16(Color); } } } void lcd_init() { ESP_LOGI(TAG, "等待初始化LCD"); vTaskDelay(25); // ESP_LOGI(TAG, "初始化LCD"); lcd_spi_reg(0x36); if (USE_HORIZONTAL == 0) lcd_spi_write8(0x00); else if (USE_HORIZONTAL == 1) lcd_spi_write8(0xC0); else if (USE_HORIZONTAL == 2) lcd_spi_write8(0x70); else lcd_spi_write8(0xA0); lcd_spi_reg(0x3A); lcd_spi_write8(0x05); lcd_spi_reg(0xB2); lcd_spi_write8(0x0C); lcd_spi_write8(0x0C); lcd_spi_write8(0x00); lcd_spi_write8(0x33); lcd_spi_write8(0x33); lcd_spi_reg(0xB7); lcd_spi_write8(0x35); lcd_spi_reg(0xBB); lcd_spi_write8(0x19); lcd_spi_reg(0xC0); lcd_spi_write8(0x2C); lcd_spi_reg(0xC2); lcd_spi_write8(0x01); lcd_spi_reg(0xC3); lcd_spi_write8(0x12); lcd_spi_reg(0xC4); lcd_spi_write8(0x20); lcd_spi_reg(0xC6); lcd_spi_write8(0x0F); lcd_spi_reg(0xD0); lcd_spi_write8(0xA4); lcd_spi_write8(0xA1); lcd_spi_reg(0xE0); lcd_spi_write8(0xD0); lcd_spi_write8(0x04); lcd_spi_write8(0x0D); lcd_spi_write8(0x11); lcd_spi_write8(0x13); lcd_spi_write8(0x2B); lcd_spi_write8(0x3F); lcd_spi_write8(0x54); lcd_spi_write8(0x4C); lcd_spi_write8(0x18); lcd_spi_write8(0x0D); lcd_spi_write8(0x0B); lcd_spi_write8(0x1F); lcd_spi_write8(0x23); lcd_spi_reg(0xE1); lcd_spi_write8(0xD0); lcd_spi_write8(0x04); lcd_spi_write8(0x0C); lcd_spi_write8(0x11); lcd_spi_write8(0x13); lcd_spi_write8(0x2C); lcd_spi_write8(0x3F); lcd_spi_write8(0x44); lcd_spi_write8(0x51); lcd_spi_write8(0x2F); lcd_spi_write8(0x1F); lcd_spi_write8(0x1F); lcd_spi_write8(0x20); lcd_spi_write8(0x23); lcd_spi_reg(0x21); lcd_spi_reg(0x11); vTaskDelay(12); lcd_spi_reg(0x29); ESP_LOGI(TAG, "初始化LCD完成"); LCD_Clear(0xffff); } void LCD_test() { uint16_t i, j, k , x=100,y=100; lcd_spi_reg(0x2a); // 列地址设置 lcd_spi_write16(0); lcd_spi_write16(x - 1); lcd_spi_reg(0x2b); // 行地址设置 lcd_spi_write16(0); lcd_spi_write16(y - 1); lcd_spi_reg(0x2c); // 储存器写 for (i = 0; i < y; i++) { k = rand(); for (j = 0; j < x; j++) { lcd_spi_write16(k); } } }