51单片机lcd判忙的意义是什么?还是说判忙就是延时?还有请问一下时序图怎么看。。。

51单片机lcd判忙的意义是什么?还是说判忙就是延时?还有请问一下时序图怎么看。。。,第1张

LCD在处理内部指令的时候会置位忙信号(一般是高电平),这是LCD不接受外部指令。也就是说只有在LCD空闲的时候才可以向他发送指令,否则cpu发送的指令不会被执行,即 *** 作失败了。这就是判忙信号的意义。一般是采取查询的方式,看LCD是否空闲,如果忙则等待(延时)再次查询。

这条程序是在检测1602忙标志,

while(lcd_data&0x80);就是在检测,如果lcd_data=0x80,也就是说lcd_data的最高一位如果=1,说明1602还在处理数据,不要发新的数据,发了也不接受,造成数据丢失,如果lcd_data=0x80,说明1602已经空闲下来,可以传数据了

是不是理解错了,如果是返回忙,返回值是1,while(1)表示继续等待,直到返回0,跳出while执行函数。

这个函数的意思就是,如果1602一直忙的话,就一直等待,直到它不忙了就执行函数

_nop_()对应汇编中的NOP指令,只是延时的作用。

1602读取状态,最高位为1时表示1602处于忙碌状态,不能继续执行指令,只有为0时才能进一步 *** 作。这在1602的手册上有详细说明的,你没仔细看啊!

/

名称 : WriteCom()

功能 : 写命令函数

输入 : 无

输出 : 无

说明 : _nop_指令起延时作用,晶振为12MHz时候,延时时长的计算公式如下

T=1/(12M/12分频)

-/

void WriteCom(uchar Com)

{

uchar LCDtemp=0x00; /设置初值为0,全部为低,方便后面的判忙/

RS=0; /根据时序图拉低,选择写指令/

RW=1; /根据时序图拉低,选择写模式/

do

{

EN=1; /使能,使液晶输出信号,检查是否忙/

_nop_();_nop_();_nop_();_nop_();/延时4US/

LCDtemp=P1; /把P1口的状态值读回来给temp/

EN=0; /使能端跳变/;

}

while(LCDtemp&0x80); /结果的高位保留,如果高位DB7为一,则表示忙/

RS=0; /指令模式/

RW=0; /写模式/

EN=0; /使能/

_nop_();_nop_(); /延时2US/

P1=Com; /注意数据方向,写时IO口位置在前,读时IO口位置在后/

_nop_();_nop_();_nop_();_nop_();/延时4US/

EN=1; /使能拉高/

_nop_();_nop_();_nop_();_nop_();/延时4US/

EN=0; /使能拉低/

}

/

名称 : WriteData()

功能 : 写数据函数

输入 : 无

输出 : 无

/

void WriteData(uchar Data)

{

uchar LCDtemp=0x00; /设置初值为0,全部为低,方便后面的判忙/

RS=0; /根据时序图拉低,选择写指令/

RW=1; /根据时序图拉低,选择写模式/

do

{

EN=1; /使能拉高/

_nop_();_nop_();_nop_();_nop_();/延时4US/

LCDtemp=P1; /把P2口的状态值读回来给temp/

EN=0; /使能拉低/

}

while(LCDtemp&0x80); /结果的高位保留,如果高位DB7为一,则表示忙/

RS=1; /选择数据模式/

RW=0; /选择写模式/

EN=0; /使能拉低/

_nop_();_nop_(); /延时2US/

P1=Data; /注意数据方向,写时IO口位置在前,读时IO口位置在后/

_nop_();_nop_();_nop_();_nop_();/延时4US/

EN=1; /使能拉高/

_nop_();_nop_();_nop_();_nop_();/延时4US/

EN=0; /使能拉低/

}

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

原文地址: http://outofmemory.cn/langs/12182803.html

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

发表评论

登录后才能评论

评论列表(0条)

保存