看看你的说明书1602液晶每次读数据时是要检测忙信号的,据你说的情况有99%是没检测,检测忙信号的方法,我还是把我写的51单片机的程序给你看看吧,1602相对于单片机来说运行是很慢的,祝你好运
bit lcd1602_bz()
{ // 测试LCD忙碌状态
bit result;
lcdrs = 0;
lcdrw = 1;
lcden = 1;
nop5();
result = (bit)(P0 & 0x80);
lcden = 0;
return result;
}
void write_1602_com(uchar com)
{
while(lcd1602_bz()); //忙时等待
lcden=0;
lcdrs=0;
lcdrw=0;
P0=com;
nop5();
lcden=1;
nop5();
lcden=0;
}
void write_1602_data(uchar dat)
{
while(lcd1602_bz()); //忙时等待
lcden=0;
lcdrs=1;
lcdrw=0;
P0=dat;
nop5();
lcden=1;
nop5();
lcden=0;
}
感觉有以下三处有疑问:
1. L1602_char(uchar hang,uchar lie,char sign)
中char sign应为uchar sign。
2. void L1602_string(uchar hang,uchar lie,uchar *p)
中每次write后,a是否自动加1,如果不是的话在write(*p);后应加上a++;enable(a)。
3.
L1602_char(1,5,'b');
L1602_string(1,1," 0123456789 ");
后面一句自动把前面一句的显示覆盖了。
你52的程序是对的吗?没看出来你改的头文件是什么,要不你把52的程序发上来试试。
能把LCD1602的资料发过来看看吗?有时光看程序看不出来的。
我测试了,程序是好的。就是硬件的问题了,
背光调了吗?
你的背光电路我不知道是不是正确,我没这么接过。
再有问题加我