项目场景:
硬件:CW32L010
0.96寸LCD IC:ST7735
基于CW32L010的充电检测仪0.96寸LCD颜色显示和花边问题。
问题描述
之前买了CW32L010的充电检测仪,烧录官方给的代码后,发现屏幕出现了花边,颜色也不对。
原因分析:
因为之前我移植LVGL的时候,也遇到过这个原因。
所以这次我有经验了,肯定是屏幕初始化的问题。
解决方案:
我直接去找淘宝客服要了屏幕底层驱动代码,然后一改,就好了。
/******************************************************************************
函数说明:设置起始和结束地址
入口数据:x1,x2 设置列的起始和结束地址
y1,y2 设置行的起始和结束地址
返回值: 无
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
if(USE_HORIZONTAL==0)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+26);
LCD_WR_DATA(x2+26);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+1);
LCD_WR_DATA(y2+1);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==1)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+26);
LCD_WR_DATA(x2+26);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+1);
LCD_WR_DATA(y2+1);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==2)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+1);
LCD_WR_DATA(x2+1);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+26);
LCD_WR_DATA(y2+26);
LCD_WR_REG(0x2c);//储存器写
}
else
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+1);
LCD_WR_DATA(x2+1);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+26);
LCD_WR_DATA(y2+26);
LCD_WR_REG(0x2c);//储存器写
}
}
void LCD_Init(void)
{
long i;
LCD_GPIO_Init();//初始化GPIO
LCD_RES_Clr();//复位
for(i=0;i<10000;i++);
LCD_RES_Set();
for(i=0;i<10000;i++);
LCD_BLK_Set();//打开背光
for(i=0;i<10000;i++);
LCD_WR_REG(0x11); //Sleep out
for(i=0;i<10000;i++);
LCD_WR_REG(0xB1); //Normal mode
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB2); //Idle mode
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB3); //Partial mode
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB4); //Dot inversion
LCD_WR_DATA8(0x03);
LCD_WR_REG(0xC0); //AVDD GVDD
LCD_WR_DATA8(0xAB);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1); //VGH VGL
LCD_WR_DATA8(0xC5); //C0
LCD_WR_REG(0xC2); //Normal Mode
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3); //Idle
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x6A);
LCD_WR_REG(0xC4); //Partial+Full
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
LCD_WR_REG(0xC5); //VCOM
LCD_WR_DATA8(0x0F);
LCD_WR_REG(0xE0); //positive gamma
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0E);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x10);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x09);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x36);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0xE1); //negative gamma
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x02);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x09);
LCD_WR_DATA8(0x0F);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x35);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x09);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x10);
LCD_WR_REG(0xFC);
LCD_WR_DATA8(0x80);
LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x36);
if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x08);
else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC8);
else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x78);
else LCD_WR_DATA8(0xA8);
LCD_WR_REG(0x21); //Display inversion
LCD_WR_REG(0x29); //Display on
LCD_WR_REG(0x2A); //Set Column Address
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x1A); //26
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x69); //105
LCD_WR_REG(0x2B); //Set Page Address
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x01); //1
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0xA0); //160
LCD_WR_REG(0x2C);
}
总结:
以后遇到屏幕颜色不对,一定要好好检查一下屏幕初始化代码,花边问题一般是屏幕范围的问题。
通过网盘分享的文件:充电检测仪
链接: https://pan.baidu.com/s/1m7hdNzv7y-6PlyXJ3Qagyw?pwd=ikun 提取码: ikun
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_62631853/article/details/144409840
|