新聞中心

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

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

        作者: 時間:2010-10-09 來源:網絡 收藏

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

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



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


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


        DIY機械鍵盤相關社區:機械鍵盤DIY




        關鍵詞: FPGA/ CPLD 鍵盤 電路

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 广元市| 宝应县| 济宁市| 汉沽区| 吉安县| 枣阳市| 胶州市| 新安县| 怀化市| 农安县| 长宁区| 和顺县| 张家口市| 平江县| 阿巴嘎旗| 松潘县| 阜宁县| 贡觉县| 遂川县| 新丰县| 科技| 原平市| 宝清县| 金堂县| 思茅市| 靖州| 长岭县| 大名县| 安丘市| 宜宾县| 青神县| 丹棱县| 西乡县| 潼南县| 保山市| 金门县| 顺义区| 郁南县| 禹州市| 温州市| 花莲县|