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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)獨(dú)立按鍵檢測(cè)程序

          單片機(jī)獨(dú)立按鍵檢測(cè)程序

          作者: 時(shí)間:2012-10-11 來源:網(wǎng)絡(luò) 收藏
          /********************************************************功能:測(cè)試時(shí)間:2010—7—17**********************************************************/#includereg52.h>sbit key1=P3^0;sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;void delay(unsigned int cnt){while(--cnt);}main(){ P2=0x09;while(1){ if(!key1)P0=0x06;if(!key2)P0=0x5B;if(!key3)P0=0x4F;if(!key4)P0=0x66;}}/*定義寄存器P3的4個(gè)端子為可尋址位,分別接四個(gè),按鍵另一端全部接地,當(dāng)按鍵按下的時(shí)候,端口檢測(cè)到變?yōu)榈碗娖?,開始為P0賦值。在按鍵沒有被按下的時(shí)候,4個(gè)寄存器的32個(gè)端口都是高電平,被選中的位8段全亮。修改了P2=0x09,因?yàn)镻2出來串接74HC138,本來P2最多等于0x07=0000 0111,經(jīng)譯碼出來的是HHHH HHHL,接共陰數(shù)碼管的第8位數(shù)碼管被選中。在P2=0x09=0000 1001,取后低三位是ABC=001,注意這里A時(shí)最高位,也就是點(diǎn)亮第二位數(shù)碼管,這里可以取 P2=x%8。------------------------------------------------------------------------A    B    C    |    Y0   Y1    Y2    Y3    Y4    Y5    Y6    Y7-------------------------------------------------------------0    0    0    |    L     H     H     H     H     H     H     H0    0    1    |    H     L     H     H     H     H     H     H0    1    0    |    H     H     L     H     H     H     H     H0    1    1    |    H     H     H     L     H     H     H     H1    0    0    |    H     H     H     H     L     H     H     H1    0    1    |    H     H     H     H     H     L     H     H1    1    0    |    H     H     H     H     H     H     L     H1    1    1    |    H     H     H     H     H     H     H     L------------------------------------------------------------顯然如果使用共陽(yáng)數(shù)碼管,則很難實(shí)現(xiàn)選位點(diǎn)亮,可能是選位熄滅。使用萬用表測(cè)量按鍵另一端接地按鍵按下后確實(shí)檢測(cè)到被按下按鍵對(duì)應(yīng)的端口為低電平。
          另外一個(gè)問題就是抖動(dòng),可以用硬件電路或者軟件來消除。硬件電路可以使用SR鎖存器(與非門)來構(gòu)成(參見康華光數(shù)字電路)。但最好還是使用軟件,延時(shí)程序可以很方便的解決。根據(jù)按鍵的不同機(jī)械抖動(dòng)固有時(shí)間,一般情況下為4~15ms。通過延時(shí)躲避抖動(dòng),按下和釋放都存在抖動(dòng),實(shí)際使用程序需要兩次去抖動(dòng)。設(shè)定時(shí)間為20ms就能滿足一般要求。if(!KEY){DelayMs(10);    //按下去抖動(dòng)while(!KEY);if(KEY){DelayMs(10);    //釋放驅(qū)抖動(dòng)if(KEY){//啟動(dòng)按鍵按下后需要執(zhí)行的程序}}}本程序存在瑕疵,延時(shí)10ms,如果抖動(dòng)已經(jīng)結(jié)束,此時(shí)KEY=1,不必執(zhí)行while(!KEY),緊接著執(zhí)行釋放去抖動(dòng);但是如果抖動(dòng)的時(shí)間比較長(zhǎng)(超過20ms)的話就不好說了。不過本程序的可取之處時(shí),如果一直按著按鍵很長(zhǎng)時(shí)間,相當(dāng)于按了一次,因?yàn)閣hile(!KEY)將按下去的時(shí)間消除。按鍵控制是和外界通信,接受外界控制的重要機(jī)制,在獨(dú)立按鍵特別是本程序中,用不上去抖動(dòng),因?yàn)槎秳?dòng)對(duì)程序不造成任何影響。*/


          評(píng)論


          相關(guān)推薦

          技術(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); })();