登录
|
立即注册
|
使用QQ帐号登录
论坛
>
24小时必答区
发帖
|
下面单片机程序中while((s5==0)&&(count<500000)) 怎么理解
看3049
|
回6
|
收藏
楼主
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;
}
沙发
ID:290919
只看他
2018-3-12 20:16
当s5的值为0并且count的值小于500000这两个条件都为真,进入while()循环;否则不进入while()循环。
板凳
ID:290919
只看他
2018-3-12 20:18
s5的值为0并且count<500000两个条件都为真的时候进入While()循环
地板
ID:290299
只看他
2018-3-12 21:24
&&是按位与 (s5==0)&&(count<500000)同时为真时执行
5
#
ID:244748
只看他
2018-3-13 08:13
为什么count<500000,而不是其他
6
#
ID:164602
只看他
2018-3-13 10:26
这条语句就是松键消抖的功能。
键被按下就等于零(S1==0),后面就是控制按键的时间的(count<50000)。
这两个条件同时满足,说明键是按着的,而且时间不是很长。
如果松开键,或者按键时间太长,都会跳出循环,避免程序死在这里。
个人认为,这样的程序不好。
对于像你的程序,这样的简单按键功能,还可以使用,看不问题,但如果按键功能复杂一点,那么,就会在按下键不松的一段时间内,程序会让那个功能重复很多次(事实上,你的程序已经重复了很多次,最大可以重复49999次,只是功能简单,眼睛看不出来而已)。
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++; 否则就跳
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版