基于VHDL 的矩陣鍵盤(pán)及顯示電路設計
限于篇幅,在此不詳述所設計矩陣鍵盤(pán)及顯示電路的全部V HDL 代碼,只對部分重要代碼段落進(jìn)行詳細說(shuō)明。
如圖1 所示,全部代碼由7 個(gè)進(jìn)程(process) 組成。其中,進(jìn)程P1 和P2 用于對列掃描輸入信號kbrow 進(jìn)行讀取,并通過(guò)或非運算產(chǎn)生行掃描使能控制信號en 對行掃描輸出信號kbcol 進(jìn)行控制,并生成一個(gè)與kbcol 對應的狀態(tài)信號state。若沒(méi)有按鍵被按下( 即kbrow =“0000”) ,則en =‘1’,行掃描輸出信號kbcol 不斷循環(huán)掃描各行;若有按鍵被按下,en =‘0’,則行掃描停止,并鎖存當前kbcol 的值。進(jìn)程P1 和P2 的代碼如下:
進(jìn)程P3 使用“case ?when”語(yǔ)句,根據狀態(tài)信號state 的值(即kbcol 的值) 和列掃描輸入信號kbrow 的值進(jìn)行按鍵值譯碼, 生成一個(gè)4 位二進(jìn)制按鍵數值信號dat ,用以記錄當前按鍵值。例如,當kbcol =“0010”,kbrow =“0001 ”時(shí)“B”鍵按下, dat =“1011”。進(jìn)程P3 的代碼在此不再贅述。進(jìn)程P4 和P5 用于按鍵的防抖和按鍵值的移位寄存。通過(guò)將行掃描使能控制信號en 不斷賦給一個(gè)8 位二進(jìn)制變量reg8 ,再將reg8 賦給8 位二進(jìn)制信號key ,實(shí)現對按鍵狀態(tài)的記錄,然后通過(guò)對key的各位數值進(jìn)行與運算,生成防抖控制信號f nq。一旦有按鍵按下,en =‘0’,則即便是按鍵在抖動(dòng),key 中至少也有1 位數值為‘0’,從而使f nq =‘0’。只有當按鍵再次彈起,并且在連續8 個(gè)時(shí)鐘周期內不再有新的按鍵按下,key 的數值全為‘1’,則f nq =‘1’,f nq產(chǎn)生一個(gè)上升沿,從而觸發(fā)按鍵數值信號dat 進(jìn)入數值寄存信號temp (32 位二進(jìn)制數) 的第0 ~ 3 位, 并將temp 原來(lái)的第0~27 位左移到第4~31 位,實(shí)現1 次按鍵按下的數值存儲。進(jìn)程P4 和P5 的代碼如下:
進(jìn)程P6 用于將數值寄存信號temp 的32 位二進(jìn)制數分配給8 個(gè)數碼管,從而生成數碼管地址掃描輸出scan ,以及數碼管數值信號data (4 位2 進(jìn)制數) 。進(jìn)程P6 代碼如下:
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
評論