標(biāo)題: 以下程序請(qǐng)幫忙解惑,執(zhí)行的邏輯關(guān)系不明白啊 不勝感激~拜謝 [打印本頁(yè)]
作者: bai850107 時(shí)間: 2017-11-10 22:32
標(biāo)題: 以下程序請(qǐng)幫忙解惑,執(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)//檢測(cè)按鍵
{
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)系不明白啊,請(qǐng)大神解惑,謝謝
作者: 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后面的“;”(分號(hào)),這樣意思就明顯了,就是說(shuō),只要key4=0,就一直在這干耗著什么都不做,而key4=0就剛好是按鍵按下了。所以這條語(yǔ)句翻譯過來(lái)就是:只要按鍵按下去了我就干耗著什么都不做;
接下來(lái)一條語(yǔ)句是TR0=~TR0;,在這里要理解程序的順序執(zhí)行概念,這種順序執(zhí)行可以拿生活中的吃飯為例,這個(gè)順序是:做飯——吃飯——洗碗。回到剛才的程序,在while(!key4);里說(shuō)了,只要按鍵不放開程序就一直干耗著,而當(dāng)按鍵釋放以后,跳出while循環(huán),執(zhí)行TR0=~TR0;語(yǔ)句把定時(shí)器關(guān)了。
我們?nèi)藦闹庇^上看,是先按了按鍵,然后數(shù)碼管的數(shù)字停住了。這就達(dá)到了我么你說(shuō)的用按鍵控制數(shù)碼管的目的。
另外,對(duì)于你說(shuō)的按下和松開執(zhí)行的問題,可以根據(jù)需要設(shè)計(jì),比如我們常見的按鍵短按(按下就很快松開),我們一般設(shè)計(jì)為松開后執(zhí)行,而長(zhǎng)按(按下過一段時(shí)間)就設(shè)計(jì)為按下執(zhí)行(只要時(shí)間達(dá)到長(zhǎng)按的時(shí)間,就執(zhí)行)。
作者: 南喬 時(shí)間: 2017-11-13 13:41
while(!key4);//死循環(huán),等待按鍵抬起
TR0=~TR0;//按鍵抬起后才能執(zhí)行開/關(guān)定時(shí)器
這樣是確保對(duì)按鍵只做一次處理
作者: 老書蟲-lgs 時(shí)間: 2017-11-14 10:33
當(dāng)key4仍然為0的時(shí)候,會(huì)一直執(zhí)行while;只有當(dāng)key4
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |