tomatosalad 发表于 2009-8-10 19:38:41

12864显示过段时间左半屏幕会出现阶梯错位

版主,我的12864液晶显示一段时间之后会错位,只是左半屏幕错位,重启以后会恢复,拿另一种型号的12864只不过c1 c2片选不一样,左右跟原来的正好相反,测试一段时间,也会出现错位,这次是在右边。
显示板和液晶是放在开关电源机箱内的,开关电源地线没有接。
会不会是共模电流没法释放,在机壳上积累产生电场,积累到一定程度,会使液晶错位?
在机箱外面测试是正常的。

bise 发表于 2009-8-22 11:25:57

问题;在函数void LCD12864_Clean(void)并行清屏函数中,可是还是出现了一大堆乱点。
而且,这些乱点都是在偶数行的,奇数行的点都被清除了。
请问:这是为什么?应该怎么做,才可以完全清除?
谢谢!急救!

blue.fox 发表于 2009-10-20 09:25:19

unsigned char read_dat(void){
        unsigned char tmp;
        check_busy();
        SetB(RS_PORT,RS);       
        SetB(RW_PORT,RW);        //RW=1;
        SetB(EN_PORT,EN);        //EN=1;
        ClrB(EN_PORT,EN);        //EN=0;        //!!!!!!EN必须在一个下降沿后拉高,直接拉高等着头痛去~~~
        SetB(EN_PORT,EN);        //EN=1;
        //asm("nop");        //nop太少会导致读出的值不准
        //asm("nop");
        //asm("nop");
        ddr_dat_in();
        tmp=DAT_PIN;
        ddr_dat_out();
        return tmp;
}

注意读时序中的使能时序

hithyy 发表于 2009-10-20 12:57:39

使能信号给出前后,延时要稍微长点,液晶实际的动作没有手册上写的那么快(我手里液晶如此)

shiow198410 发表于 2016-3-7 16:08:32

hithyy 发表于 2009-10-20 12:57
使能信号给出前后,延时要稍微长点,液晶实际的动作没有手册上写的那么快(我手里液晶如此) ...

确实是这样的,终于解决了我的问题,

LCD_RS=0;//选择指令寄存器
LCD_RW=0;//写

delayus(20);
LCD_EN=0;
// LCD_EN=1;
delayus(20);   //5us太小容易出现移屏现象
Part=com;    //指令值赋给P0口



LCD_EN=0;这句前后延时10us都还有移屏现象,改成20才稳定下来
页: [1]
查看完整版本: 12864显示过段时间左半屏幕会出现阶梯错位