yanggang2880 发表于 2008-4-26 16:39:04

LCD 12864出现乱码,它有时序要求吗?

有谁用过12864的LCD吗?我单独运行LCD的程序时LCD显示正常,不出现问题.可当我把中断程序加上去后LCD就出现问题,显示紊乱,乱码错位啊,什么问题都出来了.我用的是AT89S52的MCU,每800um产生一次中断,中断程序大概需要运行80um,LCD显示程序是在主程序里循环运行的.是不是LCD需要很严格的时序来驱动它呢?我多次试验发现:在写数据的子函数最后加个延时200um左右就显示正常,但偶尔也会出现个别乱码.好像那个延时越大,出现问题的几率就越小.这是怎么回事呢?有没有人碰到过啊,难道显示LCD MCU就不能做别的事情,不能中断它的显示吗?请高手指点,不甚感激!

yanggang2880 发表于 2008-4-26 16:58:17

在向LCD写8位数据和命令的子程序后面加入延时就不出现乱码.这是什么原理啊?虽然可以解决,但是还是不知道怎么回事.
/*------------写数据或命令到LCD--------------*/
void wr_lcd (uchar dat_comm,uchar value)
{
chk_busy ();
di=dat_comm;
rw=0;
data_ora=value;
e=1;
e=0;
DELAYUM(500);//加了这段延时就不乱码,延时时间越长越稳定,小于500um也会出现乱码.怎么回事呢?
}

hn_ny_dxs 发表于 2008-4-26 17:35:12

有的LCD控制芯片在写数据前需要查询状态,如果为“忙”则需等待。

yanggang2880 发表于 2008-4-26 17:49:50

我上面有查忙的啊?
void wr_lcd (uchar dat_comm,uchar value)
{
chk_busy (); //这里啊
di=dat_comm;




void chk_busy (void)
{
uint num4;
num4 = 0;
data_ora=0xff;
di=0;
rw=1;
;
e=1;
while(bf||res==1)
{
        num4++;
        if( num4 >= LCDOVERTIME)
        {
                err = 1;
                break;
        }
}
e=0;
}

lvshaohui 发表于 2008-4-26 21:05:06

有时序要求。我以前也有过。中断的频率别太快,还有中断别太久。

huayan 发表于 2008-4-26 21:15:46

肯定有时序要求的,不必用中断来做吧?用简单的延时就可以了,慢慢调一下应该没问题的

yanggang2880 发表于 2008-4-28 10:29:21

我在主程序里循环扫描的啊,用中断做别的事情的,每800um产生一次中断,中断程序大概需要运行80um,我必须保证中断程序正常运行,而且时间也不能变,因为它是主的,显示只是辅助的,有没有别的办法呢?

hyz_avr 发表于 2008-4-28 16:20:30

e=1;
    <----这里加点延时试一下.
e=0;

yanggang2880 发表于 2008-4-29 10:04:49

没有用,我都被它搞的没办法了,现在加延时都乱码,把中断程序的执行时间改成30um也没用,那LCD真的一下都不能打断吗,那还要不要做别的事情啊?

juanjuan52521 发表于 2012-11-22 09:58:20

显示8位数据后延时,可以的。
页: [1]
查看完整版本: LCD 12864出现乱码,它有时序要求吗?