lcd1602判忙程序的原理和意义 麻烦详细解释下多谢

lcd1602判忙程序的原理和意义 麻烦详细解释下多谢,第1张

你的P1口是接1602的7根数据线加一个尘孝FB位,FB位接P1^7,。整个lcd_bz()函数的功能就是读1602忙信号FB位,若忙,磨高则FB=1,result=1;若不派游稿忙,则FB=0,result=0。

你好:

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.

{temp=P0delay(20)} //把p0的的高位读入temp,延时

en=0//关闭使能信号

}

每次读写 *** 作都要调用这个busy函数

LCD有哪些寄存器?各核答表示什么含义,控制什么功能?

写出来的程序又如何验证是否正确?

其实,你只需要对LCD的打开、关闭,以及能把一个数据块显示在LCD上就改雹慧行了

“常见字母、数字、符号、中文、自定义字符、图形,以及文字和图形混和显示;光标显示/隐藏(Cursor on/off)、显示字肆尺符闪烁(Display character blink);画面清除(Display clear)、光标归位(Return home)”

这些功能,只需要在这个数据块上进行 *** 作,然后再送到LCD显示。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12341098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存