求教:关于LCD1602测忙函数,不懂的两个问题
时间:10-02
整理:3721RD
点击:
void lcd_busy_wait() /*LCD1602 忙等待*/
{
RS = 0;
RW = 1;
LCDEN = 1; delay(1);//问题一:为什么有的加了延时函数,有的没加延时函数?延时函数的作用是什么?
lcd_data_port = 0xff;
while (lcd_data_port&0x80); //问题二:为什么LCD不忙之后 lcd_data_port&0x80=0?
LCDEN = 0;
}
{
RS = 0;
RW = 1;
LCDEN = 1; delay(1);//问题一:为什么有的加了延时函数,有的没加延时函数?延时函数的作用是什么?
lcd_data_port = 0xff;
while (lcd_data_port&0x80); //问题二:为什么LCD不忙之后 lcd_data_port&0x80=0?
LCDEN = 0;
}
关于问题一:1602的驱动芯片(例如HD44780,KS0066)大都是80年代的技术,读写速度奇低,而单片机的速度往往相对其较高。由于读写速度上的不匹配,需要单片机在操作1602之前进行读忙检测,确认其处于空闲状态后方可写入新的数据。延时函数和读忙本质上都是等待一段时间。具体什么时候加延时函数要看驱动芯片的datasheet,时序图会有很详细的说明,主频较低的单片机(例如51单片机)由于自身主频也相对较低,读写速度相对不高,在某些进行耗时较短的操作的场合可以省去读忙或者延时操作。
关于问题二:这个问题就需要看芯片的手册,以HD44780为例,读出的字节数据中最高位忙状态标志位,若为1代表处于忙状态,0为空闲状态,与0x80按位与是检测该位是0还是1。