摘要: 為改變采用CPU 控制矩陣鍵盤導(dǎo)致CPU 資源利用下降及引腳不足的現(xiàn)狀,介紹了一種基于FPGA 的矩陣鍵盤控制器的開發(fā)。在ISE13.4 開發(fā)環(huán)境下,采用VHDL 硬件語言開發(fā)了一種能有效防止機(jī)械式矩陣鍵盤按鍵抖動帶來的數(shù)據(jù)錯誤; 實現(xiàn)矩陣鍵盤的自動掃描、編碼、存儲、輸出等功能; 并將輸入的數(shù)據(jù)依次在8 個7 段數(shù)碼管上進(jìn)行顯示的矩陣鍵盤控制器。將所設(shè)計的VHDL 控制器配置到開發(fā)的硬件電路系統(tǒng)上,驗證了各項功能設(shè)計的正確性。
在便攜式電子設(shè)備中有著廣泛應(yīng)用的矩陣鍵盤,一般利用單片機(jī)對其進(jìn)行掃描控制,大大降低了單片機(jī)處理其它信息的能力,造成資源的浪費(fèi)。利用FPGA 強(qiáng)大的邏輯處理能力及豐富的引腳,本文設(shè)計了基于FPGA 的矩陣鍵盤控制器,主要包括矩陣鍵盤抗抖動模塊、掃描模塊、譯碼模塊、存儲模塊以及數(shù)碼管顯示模塊,同時將矩陣鍵盤輸入的數(shù)據(jù)通過7 段數(shù)碼管進(jìn)行顯示。
1 矩陣鍵盤控制器及顯示電路設(shè)計思路
為完成便攜式設(shè)備的人機(jī)交互,利用4 × 4 矩陣鍵盤設(shè)計了基于FPGA 的矩陣鍵盤控制器及顯示電路,如圖1 所示。系統(tǒng)主要由FPGA、矩陣鍵盤、138 譯碼芯片以及數(shù)碼管等組成,主要完成一個8 位數(shù)的輸入,對所輸入的8 位數(shù)進(jìn)行存儲供后續(xù)使用,利用數(shù)碼管的顯示功能來確認(rèn)所輸入的數(shù)據(jù)是否準(zhǔn)確,降低輸入誤差。
由圖1 可看出,本系統(tǒng)軟件部分主要實現(xiàn)矩陣鍵盤行列掃描控制、輸入抗抖動、按鍵譯碼、按鍵存儲以及數(shù)碼管顯示等功能。
( 1) 矩陣鍵盤行列掃描控制模塊: 產(chǎn)生周期性的掃描信號,根據(jù)掃描輸入信號進(jìn)行判斷是否有按鍵被按下,若有按鍵被按下則立刻進(jìn)行按鍵判斷和編碼,并將按鍵存儲到內(nèi)部寄存器。
( 2) 彈跳消除電路: 機(jī)械開關(guān)結(jié)構(gòu)的矩陣鍵盤,按鍵被按下時,接觸點會出現(xiàn)來回彈跳的信號。信號彈跳時間內(nèi)程序無法有效的判斷按鍵值,從而影響到輸入的正確性,降低設(shè)備的性能。
( 3) 按鍵譯碼電路: 掃描回復(fù)信號( 按鍵輸入給FPGA 的信號) 在FPGA 內(nèi)部無法直接作為后續(xù)使用信號,必須定義中間信號,用以區(qū)分不同按鍵的功能,對按鍵進(jìn)行譯碼。
( 4) 按鍵存儲電路: 前一次按鍵的輸入數(shù)據(jù)將被下一次掃描產(chǎn)生的新按鍵數(shù)據(jù)覆蓋,因此需要一個移位寄存器來保存整個按鍵的輸入。
( 5) 數(shù)碼管顯示電路: 為完成8 位數(shù)據(jù)的輸入顯示,需要對每個數(shù)碼管進(jìn)行掃描控制,并根據(jù)按鍵值對數(shù)碼管進(jìn)行譯碼顯示。

?
2 矩陣鍵盤控制器及顯示的VHDL 設(shè)計
2. 1 矩陣鍵盤防抖設(shè)計
矩陣鍵盤抗抖動電路主要有計數(shù)器、移位寄存器、D 型觸發(fā)器延時和采樣型防抖微分電路四種方
法[2]。本文采用的去抖方法是: 將鍵盤輸入信號作為電路輸入信號,在時鐘信號作用下,輸入信號經(jīng)過兩級D 觸發(fā)器延時后再使用RS 觸發(fā)器進(jìn)行處理。抖動消除電路所使用的脈沖信號頻率必須比其它電路使用的脈沖信號頻率更高,通常將掃描電路的工作頻率定在24Hz 左右,而將彈跳電路的工作頻率定在128Hz 左右[3]。根據(jù)以上設(shè)計思想,采用VHDL 硬件語言編寫了鍵盤抗抖動模塊,抗抖動模塊經(jīng)綜合后其RTL 電路圖如圖2 所示。

?
2. 2 時鐘電路電路
時鐘電路主要產(chǎn)生系統(tǒng)所需要的時鐘信號,由FPGA 時鐘分頻得到系統(tǒng)工作時鐘,然后采用計數(shù)器分頻方法得到所需要的彈跳消除時鐘信號、鍵盤掃描信號以及數(shù)碼管顯示時鐘信號。鍵盤掃描電路用來產(chǎn)生鍵盤掃描信號,根據(jù)矩陣鍵盤工作原理,需要產(chǎn)生從第一列到第四列的周期性掃描信號。采用VHDL 硬件語言設(shè)計掃描模塊,具體程序如下。

?
2. 3 矩陣鍵盤譯碼電路
矩陣鍵盤所產(chǎn)生的掃描回復(fù)信號( 按鍵輸入給FPGA 的信號) ,是無法直接在FPGA 內(nèi)部作為信號進(jìn)行使用,在使用前需要根據(jù)定義的不同功能將掃描回復(fù)信號譯碼為可供FPGA 識別的BCD 編碼,完成矩陣鍵盤輸入的譯碼,同時區(qū)分不同按鍵的功能。譯碼電路的主要功能是: 判斷是否有鍵按下,然后根據(jù)掃描的信號確認(rèn)所按下的鍵是數(shù)字鍵還是功能鍵,將所按下的鍵編寫成BCD 碼。表1 為所用鍵盤輸入信號與按鍵位置之間的關(guān)系。


2. 4 存儲及顯示電路
每次掃描會產(chǎn)生新的按鍵輸入,可能會覆蓋前面的數(shù)據(jù),所以需要一個按鍵存儲器電路,將整個鍵盤掃面完畢后的結(jié)果記錄下來。按鍵存儲電路由移位寄存器電路組成。本設(shè)計采用串行輸入、串行輸出移位寄存器作為按鍵存儲電路。設(shè)計思路: 八進(jìn)制計數(shù)器cnt 按合適的頻率進(jìn)行計數(shù); 每記一個數(shù),便給位選信號segweixh 賦一個不同的值,通過I /O 口將segweixh 的值輸出給138 譯碼器; 當(dāng)位選信號segweixh 變化時,按一定的算法將鍵盤輸入信號的四位賦值給內(nèi)部寄存器datebuf; process( datebuf) 過程是數(shù)碼管顯示譯碼階段,主要完成對輸入信號的譯碼工作。( 限于篇幅,程序略)
3 實驗結(jié)果分析
( 1) 掃描電路仿真分析: 圖3 所示為分頻和鍵盤掃描仿真圖,圖中clk 為頻率為50MHz 的FPGA 時鐘信號; clk_1kHz 為經(jīng)過50000 分頻得到的1kHz 的鍵盤掃描工作時鐘信號; 在程序內(nèi)部分頻器的作用下對鍵盤進(jìn)行掃描,clk_scan 為鍵盤掃描信號,由圖3 可以看出仿真結(jié)果和理論要求一致。

( 2) 數(shù)碼管顯示電路仿真分析: 圖4 所示為數(shù)碼管顯示仿真波形,圖中clk 為頻率為50Mhz 的FPGA
時鐘信號; clk_1khz 為經(jīng)過50000 分頻得到的1khz 的數(shù)碼管顯示工作時鐘信號; 矩陣鍵盤輸入數(shù)據(jù)存放在移位寄存器datain_x 中,假設(shè)輸入數(shù)據(jù)為“0000 0001 0010 0011 0100 0101 0110 0111”,對應(yīng)的顯示數(shù)碼為0、1、2、3、4、5、6、7; led_out 為138 位選信號,由仿真結(jié)果看得其與理論值一致; segma_out 為數(shù)碼管顯示斷碼,由圖4 可得,在led_out為“000”、“001”、“010”、“011”、“100”、“101”、“110”、“111”時分別顯示“11111010”、“ 00100010”、“ 10111001”、“ 10101011”、“ 01100011”、“ 11001011”、“ 11011011”、“10100010”,即0、1、2、3、4、5、6、7 與輸入的數(shù)據(jù)一致。

4 結(jié)語
本設(shè)計的矩陣鍵盤控制器及其顯示電路在ISE13. 4 開發(fā)環(huán)境下進(jìn)行仿真驗證后,下載到采用138 譯碼芯片、矩陣鍵盤、FPGA 及4 位數(shù)碼管建立開發(fā)的硬件系統(tǒng)中進(jìn)行了硬件驗證,該硬件采用Xilinx 系列spartan-xc3s500E 芯片作為核心芯片。實驗證明,所設(shè)計的系統(tǒng)能夠準(zhǔn)確的完成目標(biāo)功能,硬件系統(tǒng)結(jié)果與仿真結(jié)果一致,即驗證了系統(tǒng)的正確性。所設(shè)計的系統(tǒng)誤判概率低,反應(yīng)速度快,能夠滿足設(shè)計要求。該模塊以按鍵的釋放控制按鍵編碼輸出,在按鍵被按下一段時間到釋放按鍵之前,不能按一定的間隔連續(xù)輸出被按鍵的鍵值,矩陣鍵盤沒有連續(xù)按鍵的功能。
電子發(fā)燒友App



















評論