找回密码
 立即注册

QQ登录

只需一步,快速开始

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

下面单片机程序中while((s5==0)&&(count<500000)) 怎么理解

  [复制链接]
跳转到指定楼层
楼主
ID:244748 发表于 2018-3-12 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "button.h"
#include "reg51.h"
sbit s4=P3^3;
sbit s5=P3^2;
sbit s6=P3^1;
sbit s7=P3^0;

void delay_button(unsigned char m)
{
         unsigned char n;
         for(m;m>0;m--)
         {
                 for(n=250;n>0;n--)
                {}
         }
}
unsigned char keyboard()
{
     unsigned char button_flag=0;
         int count=0;
         if(s4==0)
         {
                   delay_button(10);
                  if(s4==0)
                  {
                          while((s4==0)&&(count<500000))
                          {
                                button_flag=4;
                                count++;
                          }
                  }
         }
               
         if(s5==0)
         {
                   delay_button(10);
                  if(s5==0)
                  {
                           while((s5==0)&&(count<500000))
                           {
                           button_flag=5;
                           count++;
                           }
                  }
         }
         
         if(s6==0)
         {
                    delay_button(10);
                   if(s6==0)
                   {
                           while((s6==0)&&(count<500000))
                           {
                                 button_flag=6;
                                 count++;
                           }
                         }
          }
               
         if(s7==0)
         {
                    delay_button(10);
                   if(s7==0)
                   {
                           while((s7==0)&&(count<500000))
                           {
                                 button_flag=7;
                                 count++;
                           }
                   }
         }

         if(count>500000)
         count=0;
         return button_flag;
}


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

使用道具 举报

沙发
ID:290919 发表于 2018-3-12 20:16 | 只看该作者
当s5的值为0并且count的值小于500000这两个条件都为真,进入while()循环;否则不进入while()循环。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:290919 发表于 2018-3-12 20:18 | 只看该作者
s5的值为0并且count<500000两个条件都为真的时候进入While()循环

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:290299 发表于 2018-3-12 21:24 | 只看该作者
&&是按位与   (s5==0)&&(count<500000)同时为真时执行

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:244748 发表于 2018-3-13 08:13 来自手机 | 只看该作者
为什么count<500000,而不是其他
回复

使用道具 举报

6#
ID:164602 发表于 2018-3-13 10:26 | 只看该作者
这条语句就是松键消抖的功能。
键被按下就等于零(S1==0),后面就是控制按键的时间的(count<50000)。
这两个条件同时满足,说明键是按着的,而且时间不是很长。
如果松开键,或者按键时间太长,都会跳出循环,避免程序死在这里。

个人认为,这样的程序不好。
对于像你的程序,这样的简单按键功能,还可以使用,看不问题,但如果按键功能复杂一点,那么,就会在按下键不松的一段时间内,程序会让那个功能重复很多次(事实上,你的程序已经重复了很多次,最大可以重复49999次,只是功能简单,眼睛看不出来而已)。

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:454000 发表于 2019-1-30 21:16 | 只看该作者
while((s5==0)&&(count<500000))
分解来分析:(s5==0)&&(count<500000)
有三个结果1.(1&&1)// (s5==0是真)&&(count<500000也是真)
               2.(0&&1)// (s5==0是假)&&(count<500000是真)
               3.(1&&0)// (s5==0是真)&&(count<500000是假)
最终while(中只有1或者0),     当while(1时)执行button_flag=5;count++; 否则就跳

评分

参与人数 7黑币 +260 收起 理由
shuisheng60 + 35
Trump1438 + 35
#include51.h + 35
刀刀见红 + 35
areyouok + 35
jinsheng7533967 + 35 绝世好帖!
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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