12864显示过段时间左半屏幕会出现阶梯错位
版主,我的12864液晶显示一段时间之后会错位,只是左半屏幕错位,重启以后会恢复,拿另一种型号的12864只不过c1 c2片选不一样,左右跟原来的正好相反,测试一段时间,也会出现错位,这次是在右边。显示板和液晶是放在开关电源机箱内的,开关电源地线没有接。
会不会是共模电流没法释放,在机壳上积累产生电场,积累到一定程度,会使液晶错位?
在机箱外面测试是正常的。 问题;在函数void LCD12864_Clean(void)并行清屏函数中,可是还是出现了一大堆乱点。
而且,这些乱点都是在偶数行的,奇数行的点都被清除了。
请问:这是为什么?应该怎么做,才可以完全清除?
谢谢!急救! 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
使能信号给出前后,延时要稍微长点,液晶实际的动作没有手册上写的那么快(我手里液晶如此) ...
确实是这样的,终于解决了我的问题,
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]