標(biāo)記的用法,用一個按鍵控制1個LED燈的亮滅,按鍵去抖
我們學(xué)習(xí)一下用一個bit變量來做一個標(biāo)記,然后在按鍵的控制下,這個標(biāo)記會變化,再根據(jù)這個標(biāo)記的值,LED也輸出不同的狀態(tài)。
因為按鍵按下時可能會有抖動的情況,每次按下時,可能會發(fā)生了人難以覺察到的多次抖動,相當(dāng)于一下子按下了很多次。這會導(dǎo)致程序無法識別出您真正的按鍵意圖。
但是抖動一般都是發(fā)生在剛按下鍵和松開鍵的時候,所以,我們只要避開這一段時間,等鍵穩(wěn)定按下或者松開時,再去讀它的值,一般就可以正確讀取了。
所以,當(dāng)讀到第一次按鍵的值時,要延時等待一會,再處理。在松開后,也延時一會,免得檢測到松開的抖動以為又有按鍵。(注,更復(fù)雜的應(yīng)用,需要在按下延時之后重新驗證按鍵,為了簡化和方便理解,這個例程里沒有這樣做。)
另外,因為程序是循環(huán)運行的,當(dāng)一次按鍵處理后,又會再循環(huán)回來繼續(xù)檢測,如果您的按鍵這時還沒有松開,又會被讀到一次新的按鍵,并做處理。所以我們還要做一個特殊的處理,識別到一個按鍵并處理完成之后,還要等待這個按鍵松開后,再繼續(xù)循環(huán)運行。
看程序:
請根據(jù)例程里的注釋理解程序。
請編譯,進入仿真,全速運行,看結(jié)果。
全速后,由于light變量初始化時默認(rèn)為0,所以燈是亮的。按下K1,松開后,燈滅了;再按一次K1,松開后,燈滅了。
這個例子里,我們只用一個按鍵就控制了燈的亮滅,這種方法可以節(jié)省了硬件資源,也就是節(jié)省了硬件成本。在實際項目設(shè)計中,有成本優(yōu)勢,產(chǎn)品就更具競爭力。所以我們應(yīng)該多學(xué)習(xí)類似的可以節(jié)省資源的方法。
作業(yè):
改為4個按鍵,分別控制4個LED的亮和滅。相當(dāng)應(yīng)用到多個房間的單鍵開關(guān)燈共用一個cpu處理。
評論