标题:
51单片机程序如何在按键K1 K2内循环?
[打印本页]
作者:
zhijie327
时间:
2021-7-10 10:53
标题:
51单片机程序如何在按键K1 K2内循环?
while(1)
{
if(K1 == 0)
{
delay();
while(!K1);
MA = 0;
MB = 1;
MC = 0;
MD = 0;
delay10s();
MA = 0;
MB = 0;
MC = 0;
MD = 1;
delay10s();
}
if(K2 == 0)
{
delay();
while(!K2);
MA = 1;
MB = 0;
MC = 0;
MD = 0;
delay10s();
MA = 0;
MB = 0;
MC = 1;
MD = 0;
delay10s();
}
}
}
作者:
yzwzfyz
时间:
2021-7-10 15:39
画个框图就可以了。
作者:
压着我头发啦
时间:
2021-7-10 16:12
增加一个标志位,if只更改标志位的值,标志位的值决定循环执行谁。你的按键消抖部分写的有问题,抄下别人的
作者:
lkc8210
时间:
2021-7-11 13:05
while(1)
{
if(PushCount++ > 2000)//按鍵掃描延時
{
PushCount=0;
if(!K1 && K1_Old)//下降沿檢測
{
K1_Flag = 1;
K2_Flag = 0;
}
if(!K2 && K2_Old)//下降沿檢測
{
K1_Flag = 0;
K2_Flag = 1;
}
K1_Old = K1;
K2_Old = K2;
}
if(K1_Flag)
{
K1_Push();//K1按下函數
}
if(K2_Flag)
{
K2_Push();//K2按下函數
}
}
复制代码
任何時候都不要用太長時間的delay(如>100us)
如果一定要長時間延時,可用變數加1結合標置位代替
例子如下
void K1_Push()
{
static unsigned int delay_count1, delay_count2;//static 變數在跳出函數也不會被清零
if(delay_count1++ >1000)
{
delay_count1 = 0;
if(delay_count2++ >1000)
{
delay_count2 = 0;
K1_Mode = !K1_Mode;
}
}
if(K1_Mode)
{
MA = 0;
MB = 1;
MC = 0;
MD = 0;
}else
{
MA = 0;
MB = 0;
MC = 0;
MD = 1;
}
}
复制代码
作者:
于龙山
时间:
2021-7-11 22:14
加框图
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1