OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3256|回复: 1

求助,关于液晶驱动的,HX8347的驱动IC

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-6-9
在线时间
3 小时
发表于 2016-6-21 19:38:46 | 显示全部楼层 |阅读模式
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);
                        }
                }
}

清屏函数只能执行一次,为什么会这样,只要解决清屏问题就好了,谢谢啊!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-22 20:53:11 | 显示全部楼层
检查下底层驱动时序是否有问题吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 10:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表