• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

LCD1602显示问题

470772643@qq.com 2017-08-13 浏览量:968

请问如何理解下列程序?我的疑问是当DataPort==0x80时,程序不就是会一直卡在while(DataPort&0x80)语句中吗?(其中DataPort为P0的宏定义)

//****************************************

//LCD1602写允许
//****************************************
void WaitForEnable(void)
{
DataPort=0xff;
LCM_RS=0;LCM_RW=1;_nop_();
LCM_EN=1;_nop_();_nop_();
while(DataPort&0x80);//判断高位是0还是1,1的话返回值为1;
LCM_EN=0;
}
//****************************************
//LCD1602写入命令
//****************************************
void WriteCommandLCM(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable();
LCM_RS=0;LCM_RW=0;_nop_();
DataPort=CMD;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • while(DataPort&0x80)这句只是判断DataPort最高位是不是为1罢了,如果为1的话就一直卡死不往下执行,楼上的表述很明显有误。据我所知这个位是判断1602是否允许写入,一般1602正常响应的话DataPort最高位是不会为1的,即表明允许写入。

    5.JPG




    • 发布于 2017-08-13
    • 举报
    • 评论 2
    • 1
    • 0
8769cc5bd61fb0d7 回复了 donatello:嗯嗯你的回答对我很帮助,我还有个疑问没解决,在void WaitForEnable(void)函数中用语句 DataPort=0xff;将DataPort也就是P0口最高位置1了,等程序到while(DataPort&0x80);时不就卡在那了吗? 回复
donatello 回复了 donatello:不会,因为你这时候的LCD读/写控制引脚LCD_RW是为1,即表明LCD是读状态,如果LCD响应正常,允许写的话,传回去单片机的DataPort数据中最高位一定不是1,一定是0,因此不会卡死,除非你LCD响应出问题了。如果觉得有帮助的话希望采纳,更多问题可以加我QQ960128428慢慢问。 回复

其他答案 数量:3
  • 没错,这样的做法是等待这个引脚从1变成0,变成0了就走下去,如果为1就一直等待。
    • 发布于2017-08-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个语句其实是判断写入允许的,意思是当DataPort不等于0x80时才执行下一步,否则不执行


    • 发布于2017-08-13
    • 举报
    • 评论 1
    • 0
    • 0
donatello 回复了 chen0000009 :while条件为真是一直执行谢谢 回复

  • 就是个数值对比与判断是否执行的函数
    • 发布于2017-08-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

LCD1602显示问题