标题:
下面单片机程序中while((s5==0)&&(count<500000)) 怎么理解
[打印本页]
作者:
陌路狂花
时间:
2018-3-12 19:42
标题:
下面单片机程序中while((s5==0)&&(count<500000)) 怎么理解
#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;
}
作者:
huangkeke
时间:
2018-3-12 20:16
当s5的值为0并且count的值小于500000这两个条件都为真,进入while()循环;否则不进入while()循环。
作者:
huangkeke
时间:
2018-3-12 20:18
s5的值为0并且count<500000两个条件都为真的时候进入While()循环
作者:
蓝廊坊市
时间:
2018-3-12 21:24
&&是按位与 (s5==0)&&(count<500000)同时为真时执行
作者:
陌路狂花
时间:
2018-3-13 08:13
为什么count<500000,而不是其他
作者:
HC6800-ES-V2.0
时间:
2018-3-13 10:26
这条语句就是松键消抖的功能。
键被按下就等于零(S1==0),后面就是控制按键的时间的(count<50000)。
这两个条件同时满足,说明键是按着的,而且时间不是很长。
如果松开键,或者按键时间太长,都会跳出循环,避免程序死在这里。
个人认为,这样的程序不好。
对于像你的程序,这样的简单按键功能,还可以使用,看不问题,但如果按键功能复杂一点,那么,就会在按下键不松的一段时间内,程序会让那个功能重复很多次(事实上,你的程序已经重复了很多次,最大可以重复49999次,只是功能简单,眼睛看不出来而已)。
作者:
shuisheng
时间:
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++; 否则就跳
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1