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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于CPLD的矩陣鍵盤掃描模塊設(shè)計

          基于CPLD的矩陣鍵盤掃描模塊設(shè)計

          作者: 時間:2010-12-20 來源:網(wǎng)絡(luò) 收藏

          在基于PC104的便攜式野外測試設(shè)備的設(shè)計中,鍵盤是常用的輸入設(shè)備。對于便攜式設(shè)備野外工作時,一般使用小型(4x4)鍵盤就能滿足設(shè)備的信息輸入需要;室內(nèi)調(diào)試時,使用標(biāo)準(zhǔn)PS2鍵盤更方便、靈活。一般的做法是保留PC104的鍵盤接口用于接標(biāo)準(zhǔn)鍵盤,利用擴展I/O接口完成小鍵盤的掃描和輸入。這樣做雖然可以實現(xiàn)設(shè)備雙鍵盤同時工作的功能,卻需耗費大量的CPU處理時間掃描鍵盤,造成CPU處理其他信息的能力下降。而本文設(shè)計的基于的矩陣模塊能夠很好地解決上述問題。

          1 矩陣原理
          圖1給出了4x4矩陣鍵盤的電路圖,在圖1中KX[3..0]為掃描碼輸入,KY[3..0]為掃描碼輸出。開始時,首先置KX[3..0]=“0000”;鍵盤掃描碼寄存器和鍵盤掃描碼緩存器Kreg[15..0]和Kscan[15..0]置成“1111111111111111”(全1為沒有鍵按下,有鍵按下時至少有一位為O),一旦有鍵按下,KY[3..0]輸出不全為“O”的掃描碼觸發(fā)鍵盤掃描功能開始鍵盤掃描,掃描開始后,依次將KX3、KX2、KX1、KX0置“0”,分別將對應(yīng)的4組KY[3..0]輸入值保存于Kscan[15..12]、Kscan[11..8]、Kscan[7..4]、Kscan[3..0]中,而后比較Kscan和Kreg的大小,如果Kscan小于Kreg,將Kscan保存于Kreg中,重復(fù)上述掃描過程直到Kscan[15..0]各位輸出全為“1”時,說明按下的鍵全部抬起,Kreg[15..0]中的每一個為“0”的位對應(yīng)一個按下的鍵,保留掃描過程中的Kreg最小值就可以處理組合鍵。根據(jù)記錄的Kreg值可以判斷是哪個或哪幾個鍵按下,據(jù)此編碼按鍵值后輸出。將KX[3..0]置為“0000”,等待下一次按鍵發(fā)生。

          本文引用地址:http://www.ex-cimer.com/article/191430.htm



          2 基于的4x4矩陣鍵盤掃描
          根據(jù)上述掃描原理和工作流程,如果以PC104 CPU實現(xiàn)上述矩陣鍵盤的掃描過程,那么在有鍵按下后,CPU必須不停地掃描矩陣鍵盤電路,在此期間不能進行其他工作,降低了CPU工作效率,且CPU連續(xù)高速運轉(zhuǎn)增加系統(tǒng)功耗。
          本文的目的就是在不需要CPU參與的條件下以完成矩陣鍵盤按鍵事件觸發(fā)、按鍵的掃描定位以及按鍵的編碼和鍵值輸出工作,CPU只需要定時查詢有無鍵按下并讀走按下鍵的按鍵值送入鍵盤緩沖區(qū)。這樣就使CPU從繁重的矩陣鍵盤掃描工作中解脫出來。根據(jù)上述鍵盤掃描工作原理,基于CPLD的4x4矩陣鍵盤掃描模塊功能框圖如圖2所示。


          圖中,模塊KeyTri在時鐘信號CLK的控制下實現(xiàn)按鍵事件觸發(fā)和矩陣鍵盤掃描時序產(chǎn)生功能;模塊keycode在時鐘信號CLK和掃描時序碼SCode的控制下完成輸出鍵盤掃描碼KX,同時記錄16位鍵盤掃描數(shù)據(jù)等工作,并在所有鍵抬起后對按下的鍵編碼完成輸出功能;模塊nread實現(xiàn)按鍵碼的暫存、按鍵狀態(tài)的置位和清除以及矩陣鍵盤的使能;模塊PCPORT完成矩陣鍵盤與CPU的接口;模塊OSC與CreatClock產(chǎn)生控制鍵
          盤掃描模塊工作的3 KHz時鐘信號CLK。
          2.1 鍵盤掃描觸發(fā)模塊(KeyTri)的功能與時序仿真
          鍵盤掃描過程中,掃描信號不停變化,以判斷鍵盤按鍵的按下和抬起。高速變化的鍵盤掃描信號不僅使系統(tǒng)功耗增加,而且還會對其他敏感電路造成干擾。因此在本設(shè)計中將鍵盤掃描模式設(shè)計成鍵按下觸發(fā)掃描方式,只有當(dāng)鍵盤有鍵按下后,才觸發(fā)鍵盤掃描電路產(chǎn)生掃描鍵盤時序,所有鍵都放開后,停止對鍵盤的掃描,使電路處于相對靜止?fàn)顟B(tài),以減少對其他電路的干擾。
          鍵盤按下時會有抖動,在按鍵抖動時掃描鍵盤,可能會使鍵盤掃描電路產(chǎn)生誤判,因此在鍵盤按下與開始掃描之間應(yīng)加入一段延時,延時結(jié)束后按鍵仍處于按下狀態(tài),才允許開始鍵盤掃描,這樣做可以最大限度地避免掃描電路的誤判和漏判。
          鍵盤掃描觸發(fā)模塊實現(xiàn)的功能為:在KX=0000的狀態(tài)下,如果有任意一個鍵被按下,KY必然不全為‘1’,觸發(fā)延時功能開始延時,延時結(jié)束后,如果KY仍不全為‘1’,說明該按鍵事件有效,啟動掃描時序產(chǎn)生1H~BH的4位循環(huán)掃描時序碼,控制后續(xù)的鍵盤掃描電路對鍵盤掃描,當(dāng)ReSet變低時,立即將掃描時序碼置為OH,停止本次鍵盤掃描并等待下一次鍵盤按下事件到來。鍵盤掃描觸發(fā)模塊的VHDL語言實現(xiàn)如下:


          上一頁 1 2 3 下一頁

          評論


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