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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于VHDL 的矩陣鍵盤及顯示電路設(shè)計(jì)

          基于VHDL 的矩陣鍵盤及顯示電路設(shè)計(jì)

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

            限于篇幅,在此不詳述所設(shè)計(jì)矩陣及顯示的全部V HDL 代碼,只對(duì)部分重要代碼段落進(jìn)行詳細(xì)說明。

            如圖1 所示,全部代碼由7 個(gè)進(jìn)程(process) 組成。其中,進(jìn)程P1 和P2 用于對(duì)列掃描輸入信號(hào)kbrow 進(jìn)行讀取,并通過或非運(yùn)算產(chǎn)生行掃描使能控制信號(hào)en 對(duì)行掃描輸出信號(hào)kbcol 進(jìn)行控制,并生成一個(gè)與kbcol 對(duì)應(yīng)的狀態(tài)信號(hào)state。若沒有按鍵被按下( 即kbrow =“0000”) ,則en =‘1’,行掃描輸出信號(hào)kbcol 不斷循環(huán)掃描各行;若有按鍵被按下,en =‘0’,則行掃描停止,并鎖存當(dāng)前kbcol 的值。進(jìn)程P1 和P2 的代碼如下:



            進(jìn)程P3 使用“case ?when”語句,根據(jù)狀態(tài)信號(hào)state 的值(即kbcol 的值) 和列掃描輸入信號(hào)kbrow 的值進(jìn)行按鍵值譯碼, 生成一個(gè)4 位二進(jìn)制按鍵數(shù)值信號(hào)dat ,用以記錄當(dāng)前按鍵值。例如,當(dāng)kbcol =“0010”,kbrow =“0001 ”時(shí)“B”鍵按下, dat =“1011”。進(jìn)程P3 的代碼在此不再贅述。進(jìn)程P4 和P5 用于按鍵的防抖和按鍵值的移位寄存。通過將行掃描使能控制信號(hào)en 不斷賦給一個(gè)8 位二進(jìn)制變量reg8 ,再將reg8 賦給8 位二進(jìn)制信號(hào)key ,實(shí)現(xiàn)對(duì)按鍵狀態(tài)的記錄,然后通過對(duì)key的各位數(shù)值進(jìn)行與運(yùn)算,生成防抖控制信號(hào)f nq。一旦有按鍵按下,en =‘0’,則即便是按鍵在抖動(dòng),key 中至少也有1 位數(shù)值為‘0’,從而使f nq =‘0’。只有當(dāng)按鍵再次彈起,并且在連續(xù)8 個(gè)時(shí)鐘周期內(nèi)不再有新的按鍵按下,key 的數(shù)值全為‘1’,則f nq =‘1’,f nq產(chǎn)生一個(gè)上升沿,從而觸發(fā)按鍵數(shù)值信號(hào)dat 進(jìn)入數(shù)值寄存信號(hào)temp (32 位二進(jìn)制數(shù)) 的第0 ~ 3 位, 并將temp 原來的第0~27 位左移到第4~31 位,實(shí)現(xiàn)1 次按鍵按下的數(shù)值存儲(chǔ)。進(jìn)程P4 和P5 的代碼如下:


            進(jìn)程P6 用于將數(shù)值寄存信號(hào)temp 的32 位二進(jìn)制數(shù)分配給8 個(gè)數(shù)碼管,從而生成數(shù)碼管地址掃描輸出scan ,以及數(shù)碼管數(shù)值信號(hào)data (4 位2 進(jìn)制數(shù)) 。進(jìn)程P6 代碼如下:


          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY




          關(guān)鍵詞: FPGA/ CPLD 鍵盤 電路

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