王榮揚 , 吳國強
(湖州職業(yè)技術(shù)學(xué)院 機(jī)電工程分院, 浙江 湖州 313000)
在便攜式電子設(shè)備中有著廣泛應(yīng)用的矩陣鍵盤,一般利用單片機(jī)對其進(jìn)行掃描控制,大大降低了單片機(jī)處理其它信息的能力,造成資源的浪費。利用FPGA強大的邏輯處理能力及豐富的引腳,本文設(shè)計了基于FPGA的矩陣鍵盤控制器,主要包括矩陣鍵盤抗抖動模塊、掃描模塊、譯碼模塊、存儲模塊以及數(shù)碼管顯示模塊,同時將矩陣鍵盤輸入的數(shù)據(jù)通過7段數(shù)碼管進(jìn)行顯示。
為完成便攜式設(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)部寄存器[1]。
(2)彈跳消除電路:機(jī)械開關(guān)結(jié)構(gòu)的矩陣鍵盤,按鍵被按下時,接觸點會出現(xiàn)來回彈跳的信號。信號彈跳時間內(nèi)程序無法有效的判斷按鍵值,從而影響到輸入的正確性,降低設(shè)備的性能[1]。
(3)按鍵譯碼電路:掃描回復(fù)信號(按鍵輸入給FPGA的信號)在FPGA內(nèi)部無法直接作為后續(xù)使用信號,必須定義中間信號,用以區(qū)分不同按鍵的功能,對按鍵進(jìn)行譯碼[1]。
(4)按鍵存儲電路:前一次按鍵的輸入數(shù)據(jù)將被下一次掃描產(chǎn)生的新按鍵數(shù)據(jù)覆蓋,因此需要一個移位寄存器來保存整個按鍵的輸入。
(5)數(shù)碼管顯示電路:為完成8位數(shù)據(jù)的輸入顯示,需要對每個數(shù)碼管進(jìn)行掃描控制,并根據(jù)按鍵值對數(shù)碼管進(jìn)行譯碼顯示。
圖1 系統(tǒng)硬件電路圖
矩陣鍵盤抗抖動電路主要有計數(shù)器、移位寄存器、D型觸發(fā)器延時和采樣型防抖微分電路四種方法[2]。本文采用的去抖方法是:將鍵盤輸入信號作為電路輸入信號,在時鐘信號作用下,輸入信號經(jīng)過兩級D觸發(fā)器延時后再使用RS觸發(fā)器進(jìn)行處理。抖動消除電路所使用的脈沖信號頻率必須比其它電路使用的脈沖信號頻率更高,通常將掃描電路的工作頻率定在24Hz左右,而將彈跳電路的工作頻率定在128Hz左右[3]。根據(jù)以上設(shè)計思想,采用VHDL硬件語言編寫了鍵盤抗抖動模塊,抗抖動模塊經(jīng)綜合后其RTL電路圖如圖2所示。
圖2 抗抖動電路RTL圖
時鐘電路主要產(chǎn)生系統(tǒng)所需要的時鐘信號,由FPGA時鐘分頻得到系統(tǒng)工作時鐘,然后采用計數(shù)器分頻方法得到所需要的彈跳消除時鐘信號、鍵盤掃描信號以及數(shù)碼管顯示時鐘信號。鍵盤掃描電路用來產(chǎn)生鍵盤掃描信號,根據(jù)矩陣鍵盤工作原理,需要產(chǎn)生從第一列到第四列的周期性掃描信號。采用VHDL硬件語言設(shè)計掃描模塊,具體程序如下。
Process(clk_1khz) “1101” when clk_key=“01”else
begin “1011” when clk_key=“10”else
if clk_1khz'event and clk_1khz='1' then “0111” when clk_key=“11”else
counter<=counter+1; clk_scan<=sel;
end if; “1111”;
clk_key<=counter(9 downto 0); end process;
sel<= “1110” when clk_key=“00” else
矩陣鍵盤所產(chǎn)生的掃描回復(fù)信號(按鍵輸入給FPGA的信號),是無法直接在FPGA內(nèi)部作為信號進(jìn)行使用,在使用前需要根據(jù)定義的不同功能將掃描回復(fù)信號譯碼為可供FPGA識別的BCD編碼,完成矩陣鍵盤輸入的譯碼,同時區(qū)分不同按鍵的功能。譯碼電路的主要功能是:判斷是否有鍵按下,然后根據(jù)掃描的信號確認(rèn)所按下的鍵是數(shù)字鍵還是功能鍵,將所按下的鍵編寫成BCD碼。表1為所用鍵盤輸入信號與按鍵位置之間的關(guān)系。
表1 按鍵輸入信號與按鍵位置的關(guān)系
譯碼電路對應(yīng)的VHDL程序如下。
Process(clk) when “101011” =>data_n<=“1001”;
begin when “100111” =>data_n<=“1110”;
scan<= clk_key & KO; when “111101” =>data_n<=“1011”;
if clk'event and clk='1' then when “111011” =>data_n<=“1100”;
case scan is when others =>data_n<=“0000”;
when “001110” =>data_n<=“0001”; end case;
when “001101” =>data_n<=“0100”; end if;
when “001011” =>data_n<=“0111”; if clk'event and clk='1' then
when “000111” =>data_n<=“0000”; case scan is
when “011110” =>data_n<=“0010”; when “111110” =>data_f<=“1010”;
when “011101” =>data_n<=“0101”; when “110111” =>data_f<=“1101”;
when “011011” =>data_n<=“1000”; when others =>data_f<=“0000”;
when “010111” =>data_n<=“1111”; end case;
when “101110” =>data_n<=“0011”; end if;
when “101101” =>data_n<=“1010”; end process;
每次掃描會產(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ù)碼管顯示譯碼階段,主要完成對輸入信號的譯碼工作。(限于篇幅,程序略)
(1)掃描電路仿真分析:圖3所示為分頻和鍵盤掃描仿真圖,圖中clk為頻率為50MHz的FPGA時鐘信號;clk_1kHz為經(jīng)過50000分頻得到的1kHz的鍵盤掃描工作時鐘信號;在程序內(nèi)部分頻器的作用下對鍵盤進(jìn)行掃描,clk_scan為鍵盤掃描信號,由圖3可以看出仿真結(jié)果和理論要求一致。
圖3 分頻及掃描模塊仿真波形圖
(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 數(shù)碼管顯示模塊仿真波形圖
本設(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ù)按鍵的功能。
參考文獻(xiàn):
[1] 張喜鳳,屈寶鵬.基于VHDL的矩陣鍵盤及顯示電路設(shè)計[J].現(xiàn)代電子技術(shù),2010,33(16):14-16.
[2] 魯傳明,翁嘉民.基于VHDL的防抖型矩陣式鍵盤設(shè)計[J].河南工程學(xué)院學(xué)報,2009,21(1):58-62.
[3] 譚會生,翟遂春.EDA技術(shù)綜合應(yīng)用實例與分析[M].西安:電子科技大學(xué)出版社,2004:11.