<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


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


          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();