LCD1602第一行显示为16个小黑块,仿真没问题,但是烧写到板子里就有问题,这是什么原因啊?

最基本的让LCD1602显示一行字符,程序烧写进板子里就显示为第一行是16个小黑块,每个小黑块是5*7的像素点,正好是一个字符的大小。仿真没有问题,这是什么原因啊?

你好:
LCD 1602的响应速度相对于单片机的速度来说是偏慢的。
举个简单的例子,把一桶油通过漏斗向一个瓶子里倒,倒油的速度,即流量必须维持在一定范围之内,倒得太快油会从漏斗顶部溢出来,这样就浪费掉了。我们通过眼睛可以判断并使油面保持在顶面以下,以漏斗的额定流量来倒油,这样效率最高。
而对于单片机来说,1602好比那个瓶子漏斗,写入1602中要显示的数据好比油,如果以单片机的高运行速度向1602写数据就很可能造成上面所说的溢出,比如连续写入abc,结果只显示出了a,这是因为1602的显示芯片每次都要花时间来处理输入的ascii码数据,并把它显示出来。而我们却不容易主动地去控制写入数据的速度,所以1602使用忙信号就有必要了,每次单片机只有检测到忙信号为0,即不忙时,才向1602发数据。比如要显示abc,则这样操作,写a---判忙---写b---判忙---写c---判忙。这样就不会出错了。
这几年推出的lcd,像手机的屏响应速度就比较快,而1602这个古董我用示波器测过,大约40us左右的忙处理时间,而很多速度快的单片机的指令周期都是ns级的。也就是说单片机相当一段时间都在‘等’LCD。

#include<reg52.h>
#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.
//把p0的的高位读入temp,延时
en=0; //关闭使能信号
}

每次读写操作都要调用这个busy函数
温馨提示:内容为网友见解,仅供参考
无其他回答

LCD1602第一行显示为16个小黑块,仿真没问题,但是烧写到板子里就有问题...
而对于单片机来说,1602好比那个瓶子漏斗,写入1602中要显示的数据好比油,如果以单片机的高运行速度向1602写数据就很可能造成上面所说的溢出,比如连续写入abc,结果只显示出了a,这是因为1602的显示芯片每次都要花时间来处理输入的ascii码数据,并把它显示出来。而我们却不容易主动地去控制写入数据的速度...

单片机开发板怎么用?
10、板子上集成1602液晶屏,可以用来学习液晶显示,做温度显示实验,秒表显示实验等。 11、板子上共集成有21个按键,其中1个单片机复位按键,16个矩阵按键。分为0到F共16按键,还有四个独立式按键,通过与门74HC08将按下信息送给单片机中断口。 12、板子上有一个无源蜂鸣器,可以用来做音乐输出实验让你充分了解生日贺卡...

相似回答