
所有人回答的都不对,其实是忘了将1602第5脚rw设置为0了,而郭天祥的板子是直接接地,所以不用设置,但是别的板子却不能照搬了。所以程序应改为
sbit lcdrw=P3^6;
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;//加这一条
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
lcdrw=0;//加这一条
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
楼主是否考虑过或验证过延时器程序与液晶屏有没有任何冲突呢?
背光灯亮,说明高压板、背光灯管等等基本上没有问题,没有显示很可能是AD驱动板没有工作;
从对比度不能调节这一点来看,有可能是AD驱动板的MCU工作异常,或它的电源部分不正常,使得AD板不能输出高电平去控制高压板的开关极(此时有背光,但不能显示);
因此,楼主可从AD驱动板的输出(控制)端的电平变化来作出判断,兴许能够找到真正的答案。
你好:
LCD 1602的响应速度相对于单片机的速度来说是偏慢的。
举个简单的例子,把一桶油通过漏斗向一个瓶子里倒,倒油的速度,即流量必须维持在一定范围之内,倒得太快油会从漏斗顶部溢出来,这样就浪费掉了。我们通过眼睛可以判断并使油面保持在顶面以下,以漏斗的额定流量来倒油,这样效率最高。
而对于单片机来说,1602好比那个瓶子漏斗,写入1602中要显示的数据好比油,如果以单片机的高运行速度向1602写数据就很可能造成上面所说的溢出,比如连续写入abc,结果只显示出了a,这是因为1602的显示芯片每次都要花时间来处理输入的ascii码数据,并把它显示出来。而我们却不容易主动地去控制写入数据的速度,所以1602使用忙信号就有必要了,每次单片机只有检测到忙信号为0,即不忙时,才向1602发数据。比如要显示abc,则这样 *** 作,写a---判忙---写b---判忙---写c---判忙。这样就不会出错了。
这几年推出的lcd,像手机的屏响应速度就比较快,而1602这个古董我用示波器测过,大约40us左右的忙处理时间,而很多速度快的单片机的指令周期都是ns级的。也就是说单片机相当一段时间都在‘等’LCD。
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
void busy(void)
{ uchar temp=0x80; //初始化temp最高位为1,使得能够进入下面
//的while循环
P0=0xff;(P0就是8个数据口)
rs=0; //设置命令 *** 作
rw=1; //设置读 *** 作
en=1; //使能
delay(100);(这是设的延时函数,不用解释)
while(temp & 0x80) //判忙,一旦表达式为假,即temp最高位为0,
//则表示1602不忙,跳出while
{temp=P0;delay(20);} //把p0的的高位读入temp,延时
en=0; //关闭使能信号
}
每次读写 *** 作都要调用这个busy函数
以上就是关于我看郭天祥的十天学会51单片机里的程序,买了块TX的51开发板 编写1602液晶显示的程序全部的内容,包括:我看郭天祥的十天学会51单片机里的程序,买了块TX的51开发板 编写1602液晶显示的程序、刚刚买了一块1602的液晶屏,只有背光灯亮,液晶屏没有显示,并且调节对比度也没用。、LCD 1602显示字符,编写程序的时候,为何要弄一个忙信号判断函数这个有什么作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)