<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于EDA技術(shù)的矩陣鍵盤(pán)及顯示電路設計

基于EDA技術(shù)的矩陣鍵盤(pán)及顯示電路設計

作者: 時(shí)間:2018-07-27 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/201807/384304.htm

1 矩陣鍵盤(pán)及設計思路

矩陣鍵盤(pán)及能夠將機械式4 ×4矩陣鍵盤(pán)的按鍵值依次顯示到8 個(gè)7段數碼管上,每次新的按鍵值顯示在最右端的第0 號數碼管上,原有第0~6號數碼管顯示的數值整體左移到第1~7號數碼管上顯示,見(jiàn)圖1 ??傮w而言,矩陣鍵盤(pán)及顯示電路的設計可分為4 個(gè)部分:

(1) 矩陣鍵盤(pán)的行及列的掃描控制和譯碼。該設計所使用的鍵盤(pán)是通過(guò)將列掃描信號作為輸入信號,控制行掃描信號輸出,然后根據行及列的掃描結果進(jìn)行譯碼。

(2) 機械式按鍵的防抖設計。由于機械式按鍵在按下和彈起的過(guò)程中均有5~10 ms 的信號抖動(dòng)時(shí)間,在信號抖動(dòng)時(shí)間內無(wú)法有效判斷按鍵值,因此按鍵的防抖設計是非常關(guān)鍵的,也是該設計的一個(gè)重點(diǎn)。

(3) 按鍵數值的移位寄存。由于該設計需要在8 個(gè)數碼管上依次顯示前后共8 次按鍵的數值,因此對已有數據的存儲和調用也是該設計的重點(diǎn)所在。

(4) 數碼管的掃描和譯碼顯示。由于該設計使用了8 個(gè)數碼管,因此需要對每個(gè)數碼管進(jìn)行掃描控制,并根據按鍵值對每個(gè)數碼管進(jìn)行7 段數碼管的譯碼顯示。

2 矩陣鍵盤(pán)及顯示電路的實(shí)現

本文所設計的矩陣鍵盤(pán)及顯示電圖2 所示。其中, clk 為時(shí)鐘信號輸入端(頻率可為1 024~32 768 Hz) ; STart 為清零控制端;kbrow 為列掃描信號輸入端; kbcol 為行掃描信號輸出端; scan 為數碼管地址掃描信號輸出端; seg7 為數碼管顯示信號輸出端。

圖1 矩陣鍵盤(pán)及顯示電路原理圖

圖2 矩陣鍵盤(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 代碼如下:

進(jìn)程P7 用于將數碼管數值信號data 譯碼成為7 段數碼管顯示輸出seg7 ,進(jìn)程P7 的代碼在此不再贅述。值得注意的是,本文設計的矩陣鍵盤(pán)及顯示電路在按鍵防抖和數據寄存部分設計得更加簡(jiǎn)潔可靠,實(shí)現的功能更加強大,其具有如下特點(diǎn):

(1) 為了實(shí)現按鍵防抖,本文采用對按鍵狀態(tài)連續記錄的方式,即在按鍵彈起后連續8 個(gè)時(shí)鐘周期均無(wú)按鍵信號才確認1 次按鍵有效,從而避免了按鍵按下和彈起過(guò)程中的數據抖動(dòng),相比于使用計數器從按鍵按下開(kāi)始計數, 直到5 ~ 10 ms 后才讓按鍵有效的防抖方式 ,這里設計的按鍵防抖更加可靠,且可有效避免長(cháng)時(shí)間按下按鍵產(chǎn)生的重復數據輸出,使每次按鍵無(wú)論時(shí)間長(cháng)短均可且只會(huì )產(chǎn)生1 次數據輸出。另外,當電路采用32 768 Hz 以上的時(shí)鐘作為系統時(shí)鐘時(shí),可以通過(guò)增加按鍵狀態(tài)連續記錄的時(shí)鐘周期數,實(shí)現可靠的防抖。

(2) 該設計采用一個(gè)32 位一維數組temp 作為數據寄存器,使用移位寄存方式,實(shí)現了對連續8 次按鍵數據的存儲和調用,從而可以在8 個(gè)數碼管上連續顯示數據。

3 仿真結果分析

本文設計的矩陣鍵盤(pán)及顯示電路在Quartus Ⅱ開(kāi)發(fā)環(huán)境下進(jìn)行了仿真驗證。其中,按鍵防抖功能的仿真波形如圖3 所示。仿真結果分析如下:

(1) clk 為時(shí)鐘輸入信號,作為系統時(shí)鐘;

(2) start 為清零控制端,當其為高電平時(shí),按鍵有效;

(3) kbrow 為列掃輸入信號,kbcol 為行掃輸出信號,圖3 中對kbrow[ 1 ]的輸入波形進(jìn)行設置,模擬了“A”鍵按下和彈起的過(guò)程;

(4) f nq 為防抖控制信號, scan 為數碼管地址掃描輸出,seg7 為數碼管顯示輸出。由圖3 可知,只有在按鍵彈起后,才有數據輸出,從而實(shí)現防抖功能。

圖3 矩陣鍵盤(pán)及顯示電路按鍵防抖仿真波形

該設計的其他功能也可以通過(guò)仿真驗證, 不再贅述。

4 結語(yǔ)

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>