EDA課程設(shè)計(jì)基于VHDL的鍵盤掃描及顯示電路_第1頁
EDA課程設(shè)計(jì)基于VHDL的鍵盤掃描及顯示電路_第2頁
EDA課程設(shè)計(jì)基于VHDL的鍵盤掃描及顯示電路_第3頁
EDA課程設(shè)計(jì)基于VHDL的鍵盤掃描及顯示電路_第4頁
EDA課程設(shè)計(jì)基于VHDL的鍵盤掃描及顯示電路_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于vhdl的鍵盤掃描及顯示電路一、工作原理:可編程器件的key_hang3.0行信號(hào)輸出端不停循環(huán)輸出“1110”“1101”“1011”“0111”。當(dāng)沒有鍵按下時(shí)可編程器件的key_lie3.0列信號(hào)輸入端檢測(cè)到的是“1111”。當(dāng)有按鍵按下時(shí),如按下1,此時(shí)key_hang3.0行信號(hào)輸出為“0111”,即key_hang3.0的3管腳為“0”,可由電路看出,此時(shí)輸入端key_lie3.0檢測(cè)到的將是“0111”。key_lie3.0的3管腳為0,可以在編寫程序時(shí),將輸出信號(hào)key_hang3.0與輸入信號(hào)key_lie3.0同時(shí)判斷,比如可以認(rèn)為當(dāng)數(shù)據(jù)“key_hang&key_li

2、e”為“01110111”時(shí),可譯碼成數(shù)據(jù)1,。同理可得其他按鍵的編碼。根據(jù)不同數(shù)據(jù)的編碼譯成不同的數(shù)據(jù)。名稱 io屬性 描述 備注 clk in 輸入時(shí)鐘,和頻率 key_hang3.0矩陣鍵盤的掃描輸入端口 key_lie3:0 矩陣鍵盤的掃描輸出端口 start out 數(shù)據(jù)輸出標(biāo)志 disp data6.0out 數(shù)碼管譯碼顯示譯碼輸出 bit dasp sel1.0數(shù)碼管掃描輸出 clk_1kclk_1k start key_hang3.0cle_40k data_p7.0 disp data6.0key_lie dasp sel1.0 clk_40k二、設(shè)計(jì)思路:1.循環(huán)輸出行信號(hào)

3、,檢測(cè)列信號(hào)輸入,將行列信號(hào)相并。2.譯鍵值。 去抖動(dòng)。在譯沒一個(gè)鍵值后,為了防止抖動(dòng),加了一個(gè)計(jì)算環(huán)節(jié),一旦檢測(cè)到列信號(hào)后,譯碼,緊跟著進(jìn)入計(jì)數(shù)環(huán)節(jié),此時(shí)鍵抖動(dòng)不會(huì)進(jìn)入其他環(huán)節(jié),這樣可以防止抖動(dòng)。 數(shù)碼管譯碼、循環(huán)顯示。電路的具體功能羅列如下: 1) 采用44矩陣鍵盤作為操作數(shù)和操作符的輸入設(shè)備。 2) 采用2位8段數(shù)碼管作為輸出顯示設(shè)備,顯示按下的數(shù)字及簡(jiǎn)單的功能。 3) 由于所有鍵盤在按下或者彈起的時(shí)候均有按鍵抖動(dòng),所以應(yīng)該采用去抖電路,當(dāng)檢測(cè)到有按鍵按下去的時(shí)候,應(yīng)該延時(shí)20ms后,再進(jìn)行檢測(cè),如果仍有鍵盤按鍵被按下去的話,則進(jìn)行鍵盤讀值。 矩陣鍵盤模塊key_4_4的rtl電路圖如下

4、 所示。 當(dāng)clk_1k上升沿到來時(shí)狀態(tài)轉(zhuǎn)為state0,然后判斷列與非后的值,看是否有按鍵按下,如果有輸入數(shù)據(jù),則自動(dòng)啟動(dòng)20ms的計(jì)數(shù)器,當(dāng)計(jì)滿數(shù)后,產(chǎn)生一個(gè)指示信號(hào),此信號(hào)為1bit,高電平有效。當(dāng)讀到此指示信號(hào)后,便再次將row信號(hào)鎖存至寄存器,便得到鍵盤的一個(gè)返回值。如果row沒有變化,則state轉(zhuǎn)換為state2,對(duì)第二行進(jìn)行按鍵掃描。依此類推,掃描第三行與第四行。 因?yàn)槠胀ǖ陌存I都是接觸式的,當(dāng)按鍵閉合或釋放時(shí),上下接觸面都會(huì)產(chǎn)生一個(gè)很短暫的抖動(dòng),如圖2.2所示,這個(gè)抖動(dòng)時(shí)間一般都會(huì)持續(xù)5-10ms,雖然這個(gè)抖動(dòng)時(shí)間很短,但對(duì)于fpga工作在50m的高頻率上的器件來說,還是可以

5、捕捉的到的。為了使cpu對(duì)于一次按鍵操作只處理一次,在軟件中必須加入去除抖動(dòng)處理。 圖2.2 按鍵閉合時(shí)產(chǎn)生的抖動(dòng) 由圖中可以看出,最簡(jiǎn)單的去抖方法就是每隔一段時(shí)間讀一次鍵盤,時(shí)間間隔大于10ms即可。如果連續(xù)兩次檢測(cè)都有按鍵被按下,則可以肯定有按鍵被按下,而且也進(jìn)入閉合穩(wěn)定期。 三、數(shù)碼管顯示譯碼模塊設(shè)計(jì) 數(shù)碼管顯示譯碼電路主要用來對(duì)實(shí)際的二進(jìn)制數(shù)據(jù)裝換為8段數(shù)碼管的實(shí)際顯示控制碼,采用兩個(gè)2位的8段共陰極數(shù)碼管,數(shù)碼管的顯示方式有兩種:靜態(tài)顯示和動(dòng)態(tài)顯示。具體如下: 靜態(tài)顯示方式:所謂靜態(tài)顯示就是指無論是多少位數(shù)碼管,同時(shí)處于顯示狀態(tài)。靜態(tài)顯示的優(yōu)點(diǎn)是:數(shù)碼管顯示無閃爍,亮度高,軟件控制比

6、較容易;缺點(diǎn)是:需要的硬件電路較多(每一個(gè)數(shù)碼管都需要一個(gè)鎖存器),將造成很大的不便,同時(shí)由于所有數(shù)碼管都處于被點(diǎn)亮狀態(tài),所以需要的電流很大,當(dāng)數(shù)碼管的數(shù)量增多時(shí),對(duì)電源的要求也就隨之增高。所以,在大部分的硬件電路設(shè)計(jì)中,很少采用靜態(tài)顯示方式。 動(dòng)態(tài)顯示方式:所謂動(dòng)態(tài)顯示,是指無論在任何時(shí)刻只有一個(gè)數(shù)碼管處于顯示狀態(tài),每個(gè)數(shù)碼管輪流顯示。動(dòng)態(tài)顯示的優(yōu)點(diǎn)是:硬件電路簡(jiǎn)單(數(shù)碼管越多,這個(gè)優(yōu)勢(shì)越明顯),由于每個(gè)時(shí)刻只有一個(gè)數(shù)碼管被點(diǎn)亮,所以所有數(shù)碼管消耗的電流較??;缺點(diǎn)是:數(shù)碼管亮度不如靜態(tài)顯示時(shí)的亮度高,例如有8個(gè)數(shù)碼管,以1秒為單位,每個(gè)數(shù)碼管點(diǎn)亮的時(shí)間只有1/8秒,所以亮度較低;如果刷新率較

7、低,會(huì)出現(xiàn)閃爍現(xiàn)象;如果數(shù)碼管直接與單片機(jī)連接,軟件控制上會(huì)比較麻煩等。 顯示譯碼方式如下: 1) 時(shí)鐘上升沿到來時(shí)分別對(duì)位選和段選進(jìn)行譯碼。 2) 將輸入的2bite位選數(shù)據(jù)譯碼成4比特?cái)?shù)據(jù)控制數(shù)碼管的2位,由于是共陰極數(shù)碼管要選定相應(yīng)的數(shù)碼管則使該位位低電平,其它位為高電平即可,如:0000譯碼為0111_1111,對(duì)應(yīng)于實(shí)驗(yàn)板上的左邊第一位數(shù)碼管。 3) 將輸入的4bite段選數(shù)據(jù)譯碼為8比特?cái)?shù)據(jù)控制8個(gè)led的亮滅,最高位接a,最低位接小數(shù)點(diǎn)位dp。若要顯示0則對(duì)應(yīng)的譯碼為 8b1111_1100。 四、仿真沒有鍵按下時(shí)行循環(huán)輸出“”“”“”“”當(dāng)隨機(jī)按下時(shí)行保持所按下的狀態(tài)不變 五、

8、結(jié)論 這次eda課程設(shè)計(jì)歷時(shí)十天,學(xué)到很多很多的東西。同時(shí)不僅可以鞏固以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次設(shè)計(jì),進(jìn)一步加深了對(duì)eda的了解,讓我對(duì)它有了更加濃厚的興趣。特別是當(dāng)每一個(gè)子模塊編寫調(diào)試成功時(shí),都會(huì)很高興。在編寫頂層文件的程序時(shí),遇到了不少問題,特別是各元件之間的連接,以及信號(hào)的定義,總是有錯(cuò)誤。排除困難后,程序編譯就通過了。在波形仿真時(shí),也遇到了一點(diǎn)困難,想要的結(jié)果不能在波形上得到正確的顯示,后來,經(jīng)過屢次的調(diào)試之后,才發(fā)現(xiàn)在寫代碼之前對(duì)信號(hào)的相位考慮不足。 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的

9、理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。 總的來說,這次設(shè)計(jì)還是比較成功的,在設(shè)計(jì)中遇到了很多問題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解,有點(diǎn)小小的成就感,終于覺得平時(shí)所學(xué)的知識(shí)有了實(shí)用的價(jià)值,達(dá)到了理論與實(shí)際相結(jié)合的目的,不僅學(xué)到了不少知識(shí),而且鍛煉了自己的能力,使自己對(duì)以后的路有了更加清楚的認(rèn)識(shí),同時(shí),對(duì)未來有了更多的信心。最后,對(duì)給過我?guī)椭睦?/p>

10、師和所有同學(xué)再次表示忠心的感謝! 6、 程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity hh isport( clk_1k : in std_logic; -時(shí)鐘輸入 clk_40k : in std_logic;-時(shí)鐘輸入k hz key_lie : in std_logic_vector(3 downto 0);- 列輸入 start :out std_logic; -二-十進(jìn)制數(shù)據(jù)輸出標(biāo)志 key_hang :out

11、 std_logic_vector(3 downto 0); -行輸出 data_p : out std_logic_vector(7 downto 0);-二-十進(jìn)制數(shù)輸出 disp_data : out std_logic_vector(6 downto 0);-數(shù)碼管顯示譯碼輸出 disp_sel : out std_logic_vector(1 downto 0);-數(shù)碼管顯示掃描輸出 end ;architecture rtl of hh issignal int : std_logic; -列與非 信號(hào)signal clk_sel : std_logic;-鍵值控制1khz的時(shí)鐘信

12、號(hào)signal start_reg:std_logic; -數(shù)據(jù)輸出標(biāo)志信號(hào)signal disp_sel_reg:std_logic_vector(1 downto 0);-數(shù)碼管顯示掃描信號(hào)signal data_l,data_h:std_logic_vector(3 downto 0);-二-十進(jìn)制 低位、高位信號(hào)signal data_tmp:std_logic_vector(3 downto 0);-二-十進(jìn)制低位高位暫存信號(hào)signal key_hang_tmp:std_logic_vector(3 downto 0);-行輸出信號(hào)signal disp_data_reg:std_

13、logic_vector(3 downto 0); -二-十進(jìn)制低位、高位暫存信號(hào)(數(shù)碼 管用)signal key_code:std_logic_vector(7 downto 0);-行列 相并信號(hào)signal data_p_reg:std_logic_vector(7 downto 0); -二-十進(jìn)制數(shù)信號(hào)beginkey_code=key_hang_tmp&key_lie;-行、列相并data_p=data_p_reg;start= start_reg;key_hang=key_hang_tmp;disp_sel=disp_sel_reg;clk_sel=clk_1k and ( n

14、ot int);-無鍵按下時(shí)有clk-sel時(shí)鐘信號(hào)輸出process (clk_sel,clk_40k , int)variable state : integer range 0 to 3 ;beginif rising_edge(clk_40k) then -一個(gè)40k的脈沖上升沿到來輸入一次列狀態(tài)以判斷是否有按鍵按下int key_hang_tmp key_hang_tmp key_hang_tmp key_hang_tmpdata_tmp -再嵌套一個(gè)case語句 case key_code is-實(shí)現(xiàn)把像并數(shù)據(jù)譯碼 十六進(jìn)制的1到f when 01110111 = data_l =

15、0001;-把1放入低四位 data_h data_l =0010; data_h data_l =0011; data_h data_l =0100; data_h data_l =0101; data_h data_l =0110; data_h data_l =0111; data_h data_l =1000; data_h -9鍵 data_l =1001; data_h -0鍵 data_l =0000; data_h -a鍵,實(shí)現(xiàn)步進(jìn)加 一功能 if data_h =1001 then if data_l=1001 then data_h=1001; data_l=1001; e

16、lse data_l=data_l + 1; end if; elsif data_l=1001 then data_l=0000; data_h=data_h+1; else data_l=data_l+1; data_h-b鍵,實(shí)現(xiàn)步鍵加十 if data_h=1001 then data_h=1001; else data_l=data_l; data_h-c鍵,實(shí)現(xiàn)步 進(jìn)減一 if data_l=0000 and data_h=0000 then data_l=0000; data_h=0000;elsif data_l=0000 then data_l=1001; data_h= d

17、ata_h-1;else data_l =data_l-1; data_h-d鍵,實(shí)現(xiàn)步進(jìn) 減 十 if data_h=0000 then data_h=0000; else data_l=data_l; data_h-e鍵,實(shí)現(xiàn) 送數(shù)功能 data_l=data_l; data_h=data_h; data_p_reg=data_h&data_l; start_reg-f鍵,實(shí)現(xiàn)清零功能 data_l=0000; data_h-不可缺少 state:=2; end case;when 2 =-狀態(tài)2實(shí)現(xiàn)去抖動(dòng)功能 if counter=31 then -計(jì)數(shù)延時(shí)去抖 counter:=0; state:=3;else counter:=counter+1; stat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論