标题: lcd1602只亮不显示是什么原因 [打印本页]

作者: lidadaccd    时间: 2020-4-2 16:11
标题: lcd1602只亮不显示是什么原因
#include<reg51.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
unsigned char code tab1[]="welcome AT89S51!";
unsigned char code tab2[]="LCD1602test..OK";
bit lcd1602_read_status();
void lcd1602_write_cmd(unsigned char cmd);
void lcd1602_write_dat(unsigned char dat);
void lcd1602_init();
void delay(unsigned int i);
void delay(unsigned int i)
{while(i--);}
bit lcd1602_read_status()
{ unsigned char temp;
RS=0;
RW=1;
temp=P0;
delay(20);
E=1;
delay(20);
E=0;
return (bit)(temp&0x80);
}
void lcd1602_write_cmd(unsigned char cmd)
{
while(lcd1602_read_status()!=0);
E=0;
RS=0;
RW=0;
P0=cmd;
delay(20);
E=1;
delay(20);
E=0;
}
void lcd1602_write_dat(unsigned char dat)
{
while(lcd1602_read_status()!=0);
E=0;
RS=1;
RW=0;
P0=dat;
delay(20);
E=1;
delay(20);
E=0;
}
void lcd1602_init()
{
E=0;
lcd1602_write_cmd(0x38);
lcd1602_write_cmd(0x0c);
lcd1602_write_cmd(0x01);
lcd1602_write_cmd(0x06);
delay(200);
}
void lcd1602_display()
{
unsigned char i,j;
lcd1602_write_cmd(0x80+0x00);
for(i=0;i<15;i++)
{lcd1602_write_dat(tab1[i]);delay(20);}
lcd1602_write_cmd(0x80+0x40);
for(j=0;j<14;j++)
{lcd1602_write_dat(tab2[j]);delay(20);}
}
void main()
{
lcd1602_init();
lcd1602_display();
while(1);
}

51hei图片20200402161036.png (63.11 KB, 下载次数: 59)

51hei图片20200402161036.png

作者: 杨雪飞    时间: 2020-4-2 18:17
RW  RS  EN状态不对,好像卡在读忙状态不跑了。这个显示1602读忙操作没有意义。

初学者的经验1602显示 先定义四个函数----延时、初始化、写数据、写命令。

然后主函数--初始化--写命令---写数据

就完事了,刚开始学的时候就是被这些晦涩难懂的写法挡在门外很久很久。

单片机,把它分成一块块的研究会好学的很多。
作者: wulin    时间: 2020-4-2 20:00
查忙程序错误

作者: 郗乐斌    时间: 2020-4-2 21:41
proteus仿真1602时有BUG,把忙检测那里的程序去掉,用延时5ms代替
作者: lsgzq    时间: 2020-4-3 10:09
如果你的代码确定没有问题,硬件接线也正确,那么只亮不显示,极有可能是L1602上的对比度电压(模块第三脚)没有调好,如果对比度电压不全适,字符是完全看不见地。
作者: load1    时间: 2020-4-3 11:15
代码问题呀




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1