標(biāo)題: 以下程序請幫忙解惑,執(zhí)行的邏輯關(guān)系不明白啊 不勝感激~拜謝 [打印本頁]
作者: bai850107 時(shí)間: 2017-11-10 22:32
標(biāo)題: 以下程序請幫忙解惑,執(zhí)行的邏輯關(guān)系不明白啊 不勝感激~拜謝
sbit key4=P3^7;//key4是按鍵,按下S4鍵一次,利用定時(shí)器TO功能使數(shù)碼管數(shù)值開始自動(dòng)每秒加1,再次按下S4鍵,數(shù)值停止加1,保持顯示原數(shù)
那么下面的函數(shù)是怎么執(zhí)行的呢。
if(key4==0)//檢測按鍵
{
delayms(10);//按鍵消抖
if(key4==0)
{
while(!key4);//不明白while在這個(gè)地方的用意,當(dāng)key4=0時(shí),while(!key4)為真,反之?
TR0=~TR0;//啟動(dòng)或停止定時(shí)器0 這個(gè)地方和key4按鍵有關(guān)系嗎?為什么不直接是當(dāng)按鍵按下,TR0=1;當(dāng)松開按鍵key4 TR0=0;
}
}
}
程序執(zhí)行的邏輯關(guān)系不明白啊,請大神解惑,謝謝
作者: wulin 時(shí)間: 2017-11-11 10:27
while(!key4);//程序在此死循環(huán),等待按鍵抬起
TR0=~TR0;//按鍵抬起后才能執(zhí)行開/關(guān)定時(shí)器
作者: 魯翔成 時(shí)間: 2017-11-11 10:53
while(!key4);相當(dāng)于while(key4==0);也就是按下key4后停在這里直到松開后才執(zhí)行TR0=~TR0;
作者: xbook_ben 時(shí)間: 2017-11-11 14:55
while(!key4);的重點(diǎn)是while后面的“;”(分號),這樣意思就明顯了,就是說,只要key4=0,就一直在這干耗著什么都不做,而key4=0就剛好是按鍵按下了。所以這條語句翻譯過來就是:只要按鍵按下去了我就干耗著什么都不做;
接下來一條語句是TR0=~TR0;,在這里要理解程序的順序執(zhí)行概念,這種順序執(zhí)行可以拿生活中的吃飯為例,這個(gè)順序是:做飯——吃飯——洗碗;氐絼偛诺某绦,在while(!key4);里說了,只要按鍵不放開程序就一直干耗著,而當(dāng)按鍵釋放以后,跳出while循環(huán),執(zhí)行TR0=~TR0;語句把定時(shí)器關(guān)了。
我們?nèi)藦闹庇^上看,是先按了按鍵,然后數(shù)碼管的數(shù)字停住了。這就達(dá)到了我么你說的用按鍵控制數(shù)碼管的目的。
另外,對于你說的按下和松開執(zhí)行的問題,可以根據(jù)需要設(shè)計(jì),比如我們常見的按鍵短按(按下就很快松開),我們一般設(shè)計(jì)為松開后執(zhí)行,而長按(按下過一段時(shí)間)就設(shè)計(jì)為按下執(zhí)行(只要時(shí)間達(dá)到長按的時(shí)間,就執(zhí)行)。
作者: 南喬 時(shí)間: 2017-11-13 13:41
while(!key4);//死循環(huán),等待按鍵抬起
TR0=~TR0;//按鍵抬起后才能執(zhí)行開/關(guān)定時(shí)器
這樣是確保對按鍵只做一次處理
作者: 老書蟲-lgs 時(shí)間: 2017-11-14 10:33
當(dāng)key4仍然為0的時(shí)候,會(huì)一直執(zhí)行while;只有當(dāng)key4
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |