標(biāo)題:
51單片機(jī)程序如何在按鍵K1 K2內(nèi)循環(huán)?
[打印本頁]
作者:
zhijie327
時(shí)間:
2021-7-10 10:53
標(biāo)題:
51單片機(jī)程序如何在按鍵K1 K2內(nèi)循環(huán)?
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
時(shí)間:
2021-7-10 15:39
畫個(gè)框圖就可以了。
作者:
壓著我頭發(fā)啦
時(shí)間:
2021-7-10 16:12
增加一個(gè)標(biāo)志位,if只更改標(biāo)志位的值,標(biāo)志位的值決定循環(huán)執(zhí)行誰。你的按鍵消抖部分寫的有問題,抄下別人的
作者:
lkc8210
時(shí)間:
2021-7-11 13:05
while(1)
{
if(PushCount++ > 2000)//按鍵掃描延時(shí)
{
PushCount=0;
if(!K1 && K1_Old)//下降沿檢測(cè)
{
K1_Flag = 1;
K2_Flag = 0;
}
if(!K2 && K2_Old)//下降沿檢測(cè)
{
K1_Flag = 0;
K2_Flag = 1;
}
K1_Old = K1;
K2_Old = K2;
}
if(K1_Flag)
{
K1_Push();//K1按下函數(shù)
}
if(K2_Flag)
{
K2_Push();//K2按下函數(shù)
}
}
復(fù)制代碼
任何時(shí)候都不要用太長時(shí)間的delay(如>100us)
如果一定要長時(shí)間延時(shí),可用變數(shù)加1結(jié)合標(biāo)置位代替
例子如下
void K1_Push()
{
static unsigned int delay_count1, delay_count2;//static 變數(shù)在跳出函數(shù)也不會(huì)被清零
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;
}
}
復(fù)制代碼
作者:
于龍山
時(shí)間:
2021-7-11 22:14
加框圖
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1