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

          新聞中心

          單片機(jī)常用按鍵電路

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

          但如果端口非雙向,或按鍵數(shù)量大,端口數(shù)緊張需進(jìn)一步減少端口時(shí),也許就需要?jiǎng)e的方式來(lái)解決。

          還是拿上面的電路做例子,全行全列掃描是在檢測(cè)到有按鍵按下時(shí),先檢測(cè)列然后再確定行。

          換種檢測(cè)方式,就是先給定行,再檢測(cè)列。比如行端口Px每次輸出不是全部,而是只有一位輸出為低,也就是預(yù)先給定了行,那么對(duì)應(yīng)行有按鍵按下時(shí),Py讀回的值就代表按鍵所在列。Px口按位逐一輸出低,每次讀回Py值,這樣的處理方式,更貼近掃描的含義。因?yàn)榘存I是機(jī)械動(dòng)作,相對(duì)單片機(jī)運(yùn)行速度來(lái)說(shuō),一次掃描流程足夠檢測(cè)到按鍵按下的動(dòng)作。這種掃描方式就是逐行全列掃描。見流程圖。

          這種掃描方式的特點(diǎn)是逐行掃描,有多少行就掃多少次,當(dāng)有按鍵按下時(shí),行列數(shù)就確定了。雖然顯得麻煩點(diǎn),但好處是Px只需是輸出而Py只是輸入,Px輸出每次只有唯一的一位為低,這樣的特點(diǎn)就可以對(duì)端口數(shù)進(jìn)行簡(jiǎn)化,比如使用譯碼器。如圖所示:

          由圖可以看出,同樣按鍵數(shù),增加一個(gè)138譯碼器之后,CPU所用端口數(shù)就減為5了。




          Px口的3位只需輸出0到7,譯碼器輸出就能得到和前面一樣的行掃描信號(hào)。這時(shí)候的程序處理流程,和上面的略有不同,主要是行的表示上不同。上面是行數(shù)的對(duì)應(yīng)位表示對(duì)應(yīng)行,下面的是行數(shù)的對(duì)應(yīng)值就是對(duì)應(yīng)行。程序框圖如所示。

          逐行掃描還有另外一個(gè)用處,就是當(dāng)系統(tǒng)中有需要?jiǎng)討B(tài)掃描的裝置比如LED數(shù)碼管或點(diǎn)陣時(shí),行掃描線就可以為其提供動(dòng)態(tài)掃描信號(hào),這樣也是為了減少端口使用數(shù)量,達(dá)到信號(hào)復(fù)用并減少代碼量的目的。


          除了上面提到的幾種按鍵電路,還有一種按鍵電路,使用更少的端口數(shù)量,如圖


          該電路同矩陣式按鍵電路一樣,所不同的是行列端口使用的是同一個(gè)端口,并且矩陣的一條對(duì)角線上按鍵由二極管代替。如此圖所示,

          按鍵數(shù)Knum=Pnum*(Pnum-1),其中Pnum就是使用的端口數(shù)。

          以4個(gè)端口數(shù)為例,

          一對(duì)一連接方式只能是4個(gè)按鍵;

          不帶譯碼器最多4個(gè)按鍵,

          使用2-4譯碼器或3-8譯碼器方式最多8個(gè)按鍵

          而這種電路可以達(dá)到12個(gè)按鍵。此電路程序部分和不帶譯碼器的一樣,只是注意對(duì)角線上被二極管替代的地方?jīng)]有按鍵。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 單片機(jī)按鍵電

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