找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3102|回复: 4
打印 上一主题 下一主题
收起左侧

lcd1602判断是否为忙的单片机程序,求助两个问题

[复制链接]
跳转到指定楼层
楼主
ID:894870 发表于 2021-3-30 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/// flag=(bit)(P0&0x80);    //状态位第7位为1时禁止读写,为0时可读写
问题1.   就是P0&0x80怎么转换位bit的???

//while(judge_lcd());      //检测LCD是否为忙碌状态
问题2.  这里面要是上面的要是为flag=1的话那就是要执行程序了,但是lcd就是为1的话就是为忙碌的状态。怎么可以执行呢???
这里面是不是程序错了,是否应该改为if(flag==0);

单片机源程序如下:
  1. /***********************lcd1602忙碌判断子程序*******************/
  2. bit judge_lcd()
  3.   {
  4.     bit flag;
  5.     e = 0;//
  6.     rs = 0;
  7.     rw = 1;
  8.     e = 1;//
  9.     delay_ms(1);
  10.     flag=(bit)(P0&0x80);    //状态位第7位为1时禁止读写,为0时可读写
  11.     e = 0;//
  12.     return flag;        
  13.   }


  14. /**********************lcd1602写指令子程序*******************/
  15. void write_com(uchar addr)
  16.   {                             
  17.     while(judge_lcd());    //检测LCD是否为忙碌状态
  18.     rw=0;
  19.                 rs=0;
  20.     P0=addr;
  21.     delay_us(5);  
  22.     e=0;        
  23.     delay_us(5);
  24.     e=1;         
  25.     delay_us(5);  
  26.     e=0;        
  27.   }


  28. /***********************lcd写数据子程序*******************/
  29. void write_date(uchar date)
  30.   {
  31.     while(judge_lcd());    //检测LCD是否为忙碌状态
  32.     rw=0;//写操作
  33.    rs=1;//写数据模式
  34.     P0=date;//将要写的命令字送到数据总线上
  35.     delay_us(5);
  36.     e=0;//将使能端置低电平
  37.     delay_us(5);
  38.     e=1;//将使能端置高电平
  39.     delay_us(5);
  40.     e=0;//将使能端置低电平
  41.   }

  42. /***********lcd1602写指令及数据********************************/
  43. void write_com_date(uint addr,uint date)
  44.   {
  45.     write_com(addr);
  46.     delay_ms(1);
  47.     write_date(date);
  48.   }


复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2021-3-30 20:59 | 只看该作者
问题1.
flag=(bit)(P0&0x80);    //状态位第7位为1时禁止读写,为0时可读写
P0&0x80的结果只有两个状态0x00或0x80,当把任何不是0的自然数强制转换为bit都时1。
问题2.  
while(judge_lcd());    //检测LCD是否为忙碌状态
while(1);为真继续死循环等待。注意这里是分号,不是花括号里有可执行语句!!
while(0);为假,跳出死循环。
回复

使用道具 举报

板凳
ID:684049 发表于 2021-3-30 21:25 | 只看该作者
while(judge_lcd()); 如果括号里为0,则执行下边的程序,否则继续判断液晶是否为忙状态
回复

使用道具 举报

地板
ID:894870 发表于 2021-3-31 08:44 | 只看该作者
wulin 发表于 2021-3-30 20:59
问题1.
flag=(bit)(P0&0x80);    //状态位第7位为1时禁止读写,为0时可读写
P0&0x80的结果只有两个状态0x ...

一下就明白了,谢谢
回复

使用道具 举报

5#
ID:390416 发表于 2021-3-31 12:26 | 只看该作者
人眼能够分辨最多10次,你每秒钟刷新10次 还需要读忙吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表