idf的spi还有问题

This commit is contained in:
2025-12-31 02:04:09 +08:00
parent 5f53220606
commit fb653cb545
7 changed files with 297 additions and 11 deletions
+155
View File
@@ -0,0 +1,155 @@
#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_write8(x1);
lcd_spi_write8(x2);
lcd_spi_reg(0x2b);//行地址设置
lcd_spi_write8(y1);
lcd_spi_write8(y2);
lcd_spi_reg(0x2c);//储存器写
#elif USE_HORIZONTAL==1
lcd_spi_reg(0x2a);//列地址设置
lcd_spi_write8(x1);
lcd_spi_write8(x2);
lcd_spi_reg(0x2b);//行地址设置
lcd_spi_write8(y1+80);
lcd_spi_write8(y2+80);
lcd_spi_reg(0x2c);//储存器写
#elif USE_HORIZONTAL==2
lcd_spi_reg(0x2a);//列地址设置
lcd_spi_write8(x1);
lcd_spi_write8(x2);
lcd_spi_reg(0x2b);//行地址设置
lcd_spi_write8(y1);
lcd_spi_write8(y2);
lcd_spi_reg(0x2c);//储存器写
#elif USE_HORIZONTAL==3
lcd_spi_reg(0x2a);//列地址设置
lcd_spi_write8(x1+80);
lcd_spi_write8(x2+80);
lcd_spi_reg(0x2b);//行地址设置
lcd_spi_write8(y1);
lcd_spi_write8(y2);
lcd_spi_reg(0x2c);//储存器写
#endif
}
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完成");
}
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);
}
}
}