新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 標(biāo)記的用法,用一個按鍵控制1個LED燈的亮滅,按鍵去抖

標(biāo)記的用法,用一個按鍵控制1個LED燈的亮滅,按鍵去抖

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
我們學(xué)習(xí)怎么用一個按鍵K1控制1個LED燈的亮和滅兩種狀態(tài)。按一次K1燈亮,再按一次K1燈滅。再按一次又亮,再按一次又滅。
我們學(xué)習(xí)一下用一個bit變量來做一個標(biāo)記,然后在按鍵的控制下,這個標(biāo)記會變化,再根據(jù)這個標(biāo)記的值,LED也輸出不同的狀態(tài)。
因?yàn)榘存I按下時可能會有抖動的情況,每次按下時,可能會發(fā)生了人難以覺察到的多次抖動,相當(dāng)于一下子按下了很多次。這會導(dǎo)致程序無法識別出您真正的按鍵意圖。
但是抖動一般都是發(fā)生在剛按下鍵和松開鍵的時候,所以,我們只要避開這一段時間,等鍵穩(wěn)定按下或者松開時,再去讀它的值,一般就可以正確讀取了。
所以,當(dāng)讀到第一次按鍵的值時,要延時等待一會,再處理。在松開后,也延時一會,免得檢測到松開的抖動以為又有按鍵。(注,更復(fù)雜的應(yīng)用,需要在按下延時之后重新驗(yàn)證按鍵,為了簡化和方便理解,這個例程里沒有這樣做。)
另外,因?yàn)槌绦蚴茄h(huán)運(yùn)行的,當(dāng)一次按鍵處理后,又會再循環(huán)回來繼續(xù)檢測,如果您的按鍵這時還沒有松開,又會被讀到一次新的按鍵,并做處理。所以我們還要做一個特殊的處理,識別到一個按鍵并處理完成之后,還要等待這個按鍵松開后,再繼續(xù)循環(huán)運(yùn)行。
看程序:


請根據(jù)例程里的注釋理解程序。
請編譯,進(jìn)入仿真,全速運(yùn)行,看結(jié)果。
全速后,由于light變量初始化時默認(rèn)為0,所以燈是亮的。按下K1,松開后,燈滅了;再按一次K1,松開后,燈滅了。
這個例子里,我們只用一個按鍵就控制了燈的亮滅,這種方法可以節(jié)省了硬件資源,也就是節(jié)省了硬件成本。在實(shí)際項(xiàng)目設(shè)計中,有成本優(yōu)勢,產(chǎn)品就更具競爭力。所以我們應(yīng)該多學(xué)習(xí)類似的可以節(jié)省資源的方法。
作業(yè):
改為4個按鍵,分別控制4個LED的亮和滅。相當(dāng)應(yīng)用到多個房間的單鍵開關(guān)燈共用一個cpu處理。


評論


技術(shù)專區(qū)

關(guān)閉