新手上路
积分 31
金钱 31
注册时间 2015-6-9
在线时间 3 小时
5 金钱
我使用一块驱动IC为HX8347A的液晶屏幕,显示的时候颜色有些杂乱,但是字体什么的都正常,刷屏程序只能执行初始化的时候的一次,后面的再也不能清屏幕了,关键是显示的颜色偶尔还会发生变化,这是什么原因造成的呢 ?求助大神,有源码分享就更好不过了!下面初始化的:
// VENDOR
LCD_WriteReg(0x0046,0x00A4);
LCD_WriteReg(0x0047,0x0053);
LCD_WriteReg(0x0048,0x0000);
LCD_WriteReg(0x0049,0x0044);
LCD_WriteReg(0x004a,0x0004);
LCD_WriteReg(0x004b,0x0067);
LCD_WriteReg(0x004c,0x0033);
LCD_WriteReg(0x004d,0x0077);
LCD_WriteReg(0x004e,0x0012);
LCD_WriteReg(0x004f,0x004C);
LCD_WriteReg(0x0050,0x0046);
LCD_WriteReg(0x0051,0x0044);
//240x320 window setting
LCD_WriteReg(0x0002,0x0000); // Column address start2
LCD_WriteReg(0x0003,0x0000); // Column address start1
LCD_WriteReg(0x0004,0x0000); // Column address end2
LCD_WriteReg(0x0005,0x00ef); // Column address end1
LCD_WriteReg(0x0006,0x0000); // Row address start2
LCD_WriteReg(0x0007,0x0000); // Row address start1
LCD_WriteReg(0x0008,0x0001); // Row address end2
LCD_WriteReg(0x0009,0x003f); // Row address end1
// Display Setting
LCD_WriteReg(0x0001,0x0006); // IDMON=0, INVON=1, NORON=1, PTLON=0
LCD_WriteReg(0x0016,0x00C8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0 0048
LCD_WriteReg(0x0023,0x0095); // N_DC=1001 0101
LCD_WriteReg(0x0024,0x0095); // PI_DC=1001 0101
LCD_WriteReg(0x0025,0x00FF); // I_DC=1111 1111
LCD_WriteReg(0x0027,0x0002); // N_BP=0000 0010
LCD_WriteReg(0x0028,0x0002); // N_FP=0000 0010
LCD_WriteReg(0x0029,0x0002); // PI_BP=0000 0010
LCD_WriteReg(0x002a,0x0002); // PI_FP=0000 0010
LCD_WriteReg(0x002C,0x0002); // I_BP=0000 0010
LCD_WriteReg(0x002d,0x0002); // I_FP=0000 0010
LCD_WriteReg(0x003a,0x0001); // N_RTN=0000, N_NW=001 0001
LCD_WriteReg(0x003b,0x0000); // P_RTN=0000, P_NW=001
LCD_WriteReg(0x003c,0x00f0); // I_RTN=1111, I_NW=000
LCD_WriteReg(0x003d,0x0000); // DIV=00
Delay_ms(1);
LCD_WriteReg(0x0035,0x0038); // EQS=38h
LCD_WriteReg(0x0036,0x0078); // EQP=78h
LCD_WriteReg(0x003E,0x0038); // SON=38h
LCD_WriteReg(0x0040,0x000F); // GDON=0Fh
LCD_WriteReg(0x0041,0x00F0); // GDOFF
// Power Supply Setting
LCD_WriteReg(0x0019,0x0049); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz
LCD_WriteReg(0x0093,0x000F); // RADJ=1111, 100%
Delay_ms(1);
LCD_WriteReg(0x0020,0x0040); // BT=0100
LCD_WriteReg(0x001D,0x0007); // VC1=111 0007
LCD_WriteReg(0x001E,0x0000); // VC3=000
LCD_WriteReg(0x001F,0x0004); // VRH=0011
//VCOM SETTING
LCD_WriteReg(0x0044,0x004D); // VCM=101 0000 4D
LCD_WriteReg(0x0045,0x000E); // VDV=1 0001 0011
Delay_ms(1);
LCD_WriteReg(0x001C,0x0004); // AP=100
Delay_ms(2);
LCD_WriteReg(0x001B,0x0018); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0
Delay_ms(1);
LCD_WriteReg(0x001B,0x0010); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0
Delay_ms(1);
LCD_WriteReg(0x0043,0x0080); //set VCOMG=1
Delay_ms(2);
// Display ON Setting
LCD_WriteReg(0x0090,0x007F); // SAP=0111 1111
LCD_WriteReg(0x0026,0x0004); //GON=0, DTE=0, D=01
Delay_ms(1);
LCD_WriteReg(0x0026,0x0024); //GON=1, DTE=0, D=01
LCD_WriteReg(0x0026,0x002C); //GON=1, DTE=0, D=11
Delay_ms(1);
LCD_WriteReg(0x0026,0x003C); //GON=1, DTE=1, D=11
// INTERNAL REGISTER SETTING
LCD_WriteReg(0x0057,0x0002); // TEST_Mode=1: into TEST mode
LCD_WriteReg(0x0095,0x0001); // SET DISPLAY CLOCK AND PUMPING CLOCK TO SYNCHRONIZE
LCD_WriteReg(0x0057,0x0000); // TEST_Mode=0: exit TEST mode
LCD_WR_REG(0x0022);
Delay_ms(500);
//清屏函数
//color:要清屏的填充色
void LCD_Clear(u16 color)
{
int i,j;
LCD_WR_REG(0x0050); LCD_WR_DATA(0x0000); //hs
LCD_WR_REG(0x0051); LCD_WR_DATA(0x00ef); //he
LCD_WR_REG(0x0052); LCD_WR_DATA(0x0000); //vs
LCD_WR_REG(0x0053); LCD_WR_DATA(0x013f); //ve
LCD_WR_REG(0x0020); LCD_WR_DATA(0x0000); //h
LCD_WR_REG(0x0021); LCD_WR_DATA(0x0000); //v
LCD_WR_REG(0x0022);
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
{
LCD_WR_DATA(color);
}
}
}
清屏函数只能执行一次,为什么会这样,只要解决清屏问题就好了,谢谢啊!
我来回答