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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設計應用 > 基于VHDL 的矩陣鍵盤及顯示電路設計

          基于VHDL 的矩陣鍵盤及顯示電路設計

          作者: 時間:2010-10-09 來源:網(wǎng)絡 收藏

            進程P7 用于將數(shù)碼管數(shù)值信號data 譯碼成為7 段數(shù)碼管顯示輸出seg7 ,進程P7 的代碼在此不再贅述。值得注意的是,本文設計的矩陣及顯示在按鍵防抖和數(shù)據(jù)寄存部分設計得更加簡潔可靠,實現(xiàn)的功能更加強大,其具有如下特點:

            (1) 為了實現(xiàn)按鍵防抖,本文采用對按鍵狀態(tài)連續(xù)記錄的方式,即在按鍵彈起后連續(xù)8 個時鐘周期均無按鍵信號才確認1 次按鍵有效,從而避免了按鍵按下和彈起過程中的數(shù)據(jù)抖動,相比于使用計數(shù)器從按鍵按下開始計數(shù), 直到5 ~ 10 ms 后才讓按鍵有效的防抖方式 ,這里設計的按鍵防抖更加可靠,且可有效避免長時間按下按鍵產(chǎn)生的重復數(shù)據(jù)輸出,使每次按鍵無論時間長短均可且只會產(chǎn)生1 次數(shù)據(jù)輸出。另外,當采用32 768 Hz 以上的時鐘作為系統(tǒng)時鐘時,可以通過增加按鍵狀態(tài)連續(xù)記錄的時鐘周期數(shù),實現(xiàn)可靠的防抖。

            (2) 該設計采用一個32 位一維數(shù)組temp 作為數(shù)據(jù)寄存器,使用移位寄存方式,實現(xiàn)了對連續(xù)8 次按鍵數(shù)據(jù)的存儲和調(diào)用,從而可以在8 個數(shù)碼管上連續(xù)顯示數(shù)據(jù)。

            3  仿真結(jié)果分析

            本文設計的矩陣及顯示在Quartus Ⅱ開發(fā)環(huán)境下進行了仿真驗證。其中,按鍵防抖功能的仿真波形如圖3 所示。仿真結(jié)果分析如下:

            (1) clk 為時鐘輸入信號,作為系統(tǒng)時鐘;

            (2) start 為清零控制端,當其為高電平時,按鍵有效;

            (3) kbrow 為列掃輸入信號,kbcol 為行掃輸出信號,圖3 中對kbrow[ 1 ]的輸入波形進行設置,模擬了“A”鍵按下和彈起的過程;

            (4) f nq 為防抖控制信號, scan 為數(shù)碼管地址掃描輸出,seg7 為數(shù)碼管顯示輸出。由圖3 可知,只有在按鍵彈起后,才有數(shù)據(jù)輸出,從而實現(xiàn)防抖功能。


          圖3  矩陣及顯示電路按鍵防抖仿真波形

            該設計的其他功能也可以通過仿真驗證, 不再贅述。

            4  結(jié) 語

            本文設計矩陣鍵盤及顯示電路在Quartus Ⅱ開發(fā)環(huán)境下進行仿真驗證后,下載到湖北眾友科技實業(yè)股份有限公司的ZY11EDA13BE 實驗箱中進行了硬件驗證。該實驗箱使用ACEX1K系列EP1K30QC208 芯片作為核心芯片。實驗證明,當電路的系統(tǒng)時鐘頻率在1 024~32 768 Hz范圍內(nèi)時,電路均可穩(wěn)定運行,按鍵防抖可靠、功能完整。當系統(tǒng)時鐘頻率低于1 024 Hz 時,需要減少防抖記錄時鐘周期的個數(shù),否則容易錯過短時按鍵動作;當系統(tǒng)時鐘頻率高于32 768 Hz 時,需要增加防抖記錄時鐘周期的個數(shù),以確??煽康陌存I防抖。


          DIY機械鍵盤相關社區(qū):機械鍵盤DIY



          上一頁 1 2 3 下一頁

          關鍵詞: FPGA/ CPLD 鍵盤 電路

          評論


          相關推薦

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

          關閉
          看屁屁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); })();