《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 顯示光電 > 設(shè)計應(yīng)用 > 基于VHDL的矩陣鍵盤及顯示電路設(shè)計
基于VHDL的矩陣鍵盤及顯示電路設(shè)計
張喜鳳 屈寶鵬
摘要: 在QuartusⅡ開發(fā)環(huán)境下,,采用VHDL語言設(shè)計了一種能夠?qū)C(jī)械式4×4矩陣鍵盤的按鍵值依次顯示到8個7段數(shù)碼管上的矩陣鍵盤及顯示電路,。仿真結(jié)果表明,,所設(shè)計的矩陣鍵盤及顯示電路成功地實(shí)現(xiàn)了按鍵防抖和按鍵數(shù)據(jù)的準(zhǔn)確顯示。以ACEXlK系列EPlK30QC208芯片為硬件環(huán)境,,驗(yàn)證了各項(xiàng)設(shè)計功能的正確性。
Abstract:
Key words :

  FPGA/CPLD在數(shù)字系統(tǒng)設(shè)計中的廣泛應(yīng)用,,影響到了生產(chǎn)生活的各個方面,。在FPGA/CPLD的設(shè)計開發(fā)中,VHDL語言作為一種主流的硬件描述語言,,具有設(shè)計效率高,,可靠性好,易讀易懂等諸多優(yōu)點(diǎn),。作為一種功能強(qiáng)大的FPGA/CPLD數(shù)字系統(tǒng)開發(fā)環(huán)境,,Altera公司推出的Quar-tUSⅡ,為設(shè)計者提供了一種與結(jié)構(gòu)無關(guān)的設(shè)計環(huán)境,,使設(shè)計者能方便地進(jìn)行設(shè)計輸入,、快速處理和器件編程,為使用VHDL語言進(jìn)行FPGA/-CPLD設(shè)計提供了極大的便利,。矩陣鍵盤作為一種常用的數(shù)據(jù)輸入設(shè)備,,在各種電子設(shè)備上有著廣泛的應(yīng)用,通過7段數(shù)碼管將按鍵數(shù)值進(jìn)行顯示也是一種常用的數(shù)據(jù)顯示方式,。在設(shè)計機(jī)械式矩陣鍵盤控制電路時,,按鍵防抖和按鍵數(shù)據(jù)的譯碼顯示是兩個重要方面。本文在QuartusⅡ開發(fā)環(huán)境下,,采用VHDL語言設(shè)計了一種按鍵防抖并能連續(xù)記錄并顯示8次按鍵數(shù)值的矩陣鍵盤及顯示電路,。

1 矩陣鍵盤及顯示電路設(shè)計思路
   
矩陣鍵盤及顯示電路能夠?qū)C(jī)械式4×4矩陣鍵盤的按鍵值依次顯示到8個7段數(shù)碼管上,每次新的按鍵值顯示在最右端的第O號數(shù)碼管上,,原有第0~6號數(shù)碼管顯示的數(shù)值整體左移到第1~7號數(shù)碼管上顯示,,見圖1??傮w而言,,矩陣鍵盤及顯示電路的設(shè)計可分為4個部分:
    (1)矩陣鍵盤的行及列的掃描控制和譯碼。該設(shè)計所使用的鍵盤是通過將列掃描信號作為輸入信號,,控制行掃描信號輸出,,然后根據(jù)行及列的掃描結(jié)果進(jìn)行譯碼。
    (2)機(jī)械式按鍵的防抖設(shè)計,。由于機(jī)械式按鍵在按下和彈起的過程中均有5~10 ms的信號抖動時間,,在信號抖動時間內(nèi)無法有效判斷按鍵值,因此按鍵的防抖設(shè)計是非常關(guān)鍵的,,也是該設(shè)計的一個重點(diǎn),。
    (3)按鍵數(shù)值的移位寄存。由于該設(shè)計需要在8個數(shù)碼管上依次顯示前后共8次按鍵的數(shù)值,,因此對已有數(shù)據(jù)的存儲和調(diào)用也是該設(shè)計的重點(diǎn)所在,。
    (4)數(shù)碼管的掃描和譯碼顯示,。由于該設(shè)計使用了8個數(shù)碼管,因此需要對每個數(shù)碼管進(jìn)行掃描控制,,并根據(jù)按鍵值對每個數(shù)碼管進(jìn)行7段數(shù)碼管的譯碼顯示,。

2 矩陣鍵盤及顯示電路的實(shí)現(xiàn)
   
本文所設(shè)計的矩陣鍵盤及顯示電路的電路符號如圖2所示。其中,,clk為時鐘信號輸入端(頻率可為1 024~32 768Hz),;start為清零控制端;kbrow為列掃描信號輸入端,;kbeol為行掃描信號輸出端,;scan為數(shù)碼管地址掃描信號輸出端;seg7為數(shù)碼管顯示信號輸出端,。
    限于篇幅,,在此不詳述所設(shè)計矩陣鍵盤及顯示電路的全部VHDL代碼,只對部分重要代碼段落進(jìn)行詳細(xì)說明,。


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


    進(jìn)程P3使用“case…when”語句,根據(jù)狀態(tài)信號state的值(即kbcol的值)和列掃描輸入信號kbrow的值進(jìn)行按鍵值譯碼,,生成一個4位二進(jìn)制按鍵數(shù)值信號dat,,用以記錄當(dāng)前按鍵值。例如,,當(dāng)kbcol=“0010”,,kbrow=“0001”時,“B”鍵按下,,dat=“1011”,。進(jìn)程P3的代碼在此不再贅述。
    進(jìn)程P4和P5用于按鍵的防抖和按鍵值的移位寄存,。通過將行掃描使能控制信號en不斷賦給一個8位二進(jìn)制變量reg8,,再將reg8賦給8位二進(jìn)制信號key,,實(shí)現(xiàn)對按鍵狀態(tài)的記錄,,然后通過對key的各位數(shù)值進(jìn)行與運(yùn)算,,生成防抖控制信號fnq。一旦有按鍵按下,,en=‘O’,,則即便是按鍵在抖動,key中至少也有1位數(shù)值為‘0’,,從而使fnq=‘O’,。只有當(dāng)按鍵再次彈起,并且在連續(xù)8個時鐘周期內(nèi)不再有新的按鍵按下,,key的數(shù)值全為‘1’,,則fnq=‘1’,fnq產(chǎn)生一個上升沿,,從而觸發(fā)按鍵數(shù)值信號dat進(jìn)入數(shù)值寄存信號temp(32位二進(jìn)制數(shù))的第0~3位,,并將temp原來的第0~27位左移到第4~31位,實(shí)現(xiàn)1次按鍵按下的數(shù)值存儲,。進(jìn)程P4和P5的代碼如下:
   
    進(jìn)程P6用于將數(shù)值寄存信號temp的32位二進(jìn)制數(shù)分配給8個數(shù)碼管,,從而生成數(shù)碼管地址掃描輸出scan,以及數(shù)碼管數(shù)值信號data(4位2進(jìn)制數(shù)),。進(jìn)程P6代碼如下:
   
   
    進(jìn)程P7用于將數(shù)碼管數(shù)值信號data譯碼成為7段數(shù)碼管顯示輸出seg7,,進(jìn)程P7的代碼在此不再贅述。值得注意的是,,本文設(shè)計的矩陣鍵盤及顯示電路在按鍵防抖和數(shù)據(jù)寄存部分設(shè)計得更加簡潔可靠,,實(shí)現(xiàn)的功能更加強(qiáng)大,其具有如下特點(diǎn):
    (1)為了實(shí)現(xiàn)按鍵防抖,,本文采用對按鍵狀態(tài)連續(xù)記錄的方式,,即在按鍵彈起后連續(xù)8個時鐘周期均無按鍵信號才確認(rèn)1次按鍵有效,從而避免了按鍵按下和彈起過程中的數(shù)據(jù)抖動,,相比于使用計數(shù)器從按鍵按下開始計數(shù),,直到5~10 ms后才讓按鍵有效的防抖方式,這里設(shè)計的按鍵防抖更加可靠,,且可有效避免長時間按下按鍵產(chǎn)生的重復(fù)數(shù)據(jù)輸出,,使每次按鍵無論時間長短均可且只會產(chǎn)生1次數(shù)據(jù)輸出。另外,,當(dāng)電路采用32 768 Hz以上的時鐘作為系統(tǒng)時鐘時,,可以通過增加按鍵狀態(tài)連續(xù)記錄的時鐘周期數(shù),實(shí)現(xiàn)可靠的防抖,。
    (2)該設(shè)計采用一個32位一維數(shù)組temp作為數(shù)據(jù)寄存器,,使用移位寄存方式,,實(shí)現(xiàn)了對連續(xù)8次按鍵數(shù)據(jù)的存儲和調(diào)用,從而可以在8個數(shù)碼管上連續(xù)顯示數(shù)據(jù),。

3 仿真結(jié)果分析
   
本文設(shè)計的矩陣鍵盤及顯示電路在QliartusⅡ開發(fā)環(huán)境下進(jìn)行了仿真驗(yàn)證,。其中,按鍵防抖功能的仿真波形如圖3所示,。仿真結(jié)果分析如下:
    (1)clk為時鐘輸入信號,,作為系統(tǒng)時鐘;
    (2)start為清零控制端,,當(dāng)其為高電平時,,按鍵有效;
    (3)kbrow為列掃輸入信號,,kbcol為行掃輸出信號,,圖3中對kbrow[1]的輸入波形進(jìn)行設(shè)置,模擬了“A”鍵按下和彈起的過程,;
    (4)fnq為防抖控制信號,,scan為數(shù)碼管地址掃描輸出,seg7為數(shù)碼管顯示輸出,。由圖3可知,,只有在按鍵彈起后,才有數(shù)據(jù)輸出,,從而實(shí)現(xiàn)防抖功能,。


    該設(shè)計的其他功能也可以通過仿真驗(yàn)證,不再贅述,。

4 結(jié)語
   
本文設(shè)計矩陣鍵盤及顯示電路在QuartusⅡ開發(fā)環(huán)境下進(jìn)行仿真驗(yàn)證后,,下載到湖北眾友科技實(shí)業(yè)股份有限公司的ZYllEDAl3BE實(shí)驗(yàn)箱中進(jìn)行了硬件驗(yàn)證。該實(shí)驗(yàn)箱使用ACEXlK系列EPlK30QC208芯片作為核心芯片,。實(shí)驗(yàn)證明,,當(dāng)電路的系統(tǒng)時鐘頻率在1 024~32 768 Hz范圍內(nèi)時,電路均可穩(wěn)定運(yùn)行,,按鍵防抖可靠,、功能完整。當(dāng)系統(tǒng)時鐘頻率低于1 024 Hz時,,需要減少防抖記錄時鐘周期的個數(shù),,否則容易錯過短時按鍵動作;當(dāng)系統(tǒng)時鐘頻率高于32 768 Hz時,,需要增加防抖記錄時鐘周期的個數(shù),,以確保可靠的按鍵防抖。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。