課程設(shè)計(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第1頁
課程設(shè)計(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第2頁
課程設(shè)計(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第3頁
課程設(shè)計(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第4頁
課程設(shè)計(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中北大學(xué)課 程 設(shè) 計 說 明 書指導(dǎo)教師: 崔永俊 職稱: 副教授2012 年 6 月 22 日目 錄1、課程設(shè)計的目的 12、課程設(shè)計內(nèi)容和要求 2.1、設(shè)計內(nèi)容 2.2、設(shè)計要求 3、設(shè)計方案及實現(xiàn)情況 3.1、設(shè)計思路 3.2、工作原理及框圖 3.3、各模塊功能描述 3.4、仿真結(jié)果 3.5、試驗箱驗證情況 4、課程設(shè)計總結(jié) 5、參考文獻(xiàn) - 1 - 1 1 1 1 1 1 3 9 1011 121、課程設(shè)計的目的1)、學(xué)習(xí)操作數(shù)字電路設(shè)計實驗開發(fā)系統(tǒng),掌握數(shù)碼管顯示模塊的工作原理及應(yīng)用。2)、掌握組合邏輯電路、時序邏輯電路的設(shè)計方法。3)、學(xué)習(xí)掌握可編程器件設(shè)計的全過程。2、課程設(shè)計

2、內(nèi)容和要求2.1、設(shè)計內(nèi)容1)、學(xué)習(xí)掌握鍵盤控制模塊、數(shù)碼管顯示模塊的工作原理及應(yīng)用;2)、熟練掌握VHDL編程語言,編寫鍵盤控制模塊的控制邏輯。2.2、設(shè)計要求1)、仿真所編寫的程序,模擬驗證所編寫的模塊功能;2)、下載程序到芯片中,硬件驗證所設(shè)置的功能,能夠?qū)崿F(xiàn)十進(jìn)制數(shù)的顯示;3)、整理設(shè)計內(nèi)容,編寫設(shè)計說明書。3、設(shè)計方案及實現(xiàn)情況3.1、設(shè)計思路1)、鍵盤不斷掃描,有按鍵按下則輸出相應(yīng)信號,并且發(fā)出使能信號給處理模塊。 2)、處理模塊對收到的信號進(jìn)行判斷,決定執(zhí)行什么操作,對數(shù)據(jù)進(jìn)行運算。 3)、對于數(shù)字鍵需要移位顯示,功能鍵要考慮優(yōu)先級判斷,進(jìn)行倒計時操作時要能對時鐘信號分頻自減。4

3、)、專門的程序段用來不斷將當(dāng)前數(shù)據(jù)各位求出,譯碼成顯示內(nèi)容輸給數(shù)據(jù)選擇模塊。 5)、數(shù)據(jù)選擇模塊根據(jù)掃描電路選擇信號將各位數(shù)字顯示出來。3.2、工作原理及框圖1、鍵盤原理鍵盤電路網(wǎng)絡(luò)很像一臺微縮的計算機,它擁有自己的處理器和在該處理器之間傳輸數(shù)據(jù)的電路,這個電路的很大一部分組成了鍵矩陣。鍵矩陣是位于鍵下方的一種電路網(wǎng)格。在所有的鍵盤(中,每個電路在每個按鍵所處的位置點下均處于斷開狀態(tài)。當(dāng)您按下某個鍵時,此按鍵將按下了開關(guān),從而閉合電路,使得少量電流可以通過。開關(guān)的機械作用會導(dǎo)致某種振動(稱作回彈),處理器可以過濾掉這種振動。如果您按下某鍵并保 - 1 -持住,則處理器認(rèn)為您是在反復(fù)按下該鍵。試

4、驗箱上的鍵盤可以看做是8*4的矩陣鍵盤(雖然外部不是),8行由38譯碼器選擇,所以有外部sel0-2三根線控制掃描。2、鍵盤中按鍵的判斷對于鍵盤中有無鍵按下的判斷是很重要的,具體判斷如下:將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與行線相交叉的按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與低電平的行線交叉處的按鍵就是閉合的按

5、鍵。鍵盤掃描模塊在時鐘下不斷將行置零,掃描列的狀態(tài),判斷按鍵。3、鍵盤按鍵對應(yīng)的編碼4、數(shù)據(jù)處理鍵盤掃描模塊檢測到按鍵按下后,給下級發(fā)出使能脈沖,同時將按鍵信息給數(shù)據(jù)處理模塊。根據(jù)按鍵不同進(jìn)行不同處理。數(shù)字鍵按下時,要進(jìn)行移位操作;加減鍵按下時要進(jìn)行寄存操作;自加減鍵按下是要進(jìn)行加減1操作;清零鍵按下時要進(jìn)行全部清零;確認(rèn)鍵按下時要進(jìn)行計算操作或者倒計時操作。這就需要設(shè)立一些標(biāo)志位來判斷。計算采用一位BCD形式計算,進(jìn)借位標(biāo)志位輔助,這樣比用實數(shù)計算后轉(zhuǎn)BCD形式的電- 2 -路簡單高效。處于倒計時模式時,引入外部時鐘,內(nèi)部分頻后自減一操作。5、多路選擇顯示四個需要顯示的數(shù)碼管的值始終輸入,通

6、過片選決定某一時刻那個值輸出。選擇信號即為掃描輸出信號,因為數(shù)碼管和鍵盤是共用一個掃描端。所以當(dāng)掃描信號選中相應(yīng)數(shù)碼管時讓對應(yīng)值輸出即可。6、整體電路結(jié)構(gòu)框圖圖1.原理圖框架3.3、各模塊功能描述掃描模塊:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk:IN STD_LOGIC;en:OUT STD_LOGIC;- 3 - -輸入時鐘 -有鍵按下時輸出使能data:OUT STD_LOGIC_V

7、ECTOR(3 DOWNTO 0); -輸出按鍵信息 slk:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -數(shù)碼管選擇端口 kin:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -鍵盤響應(yīng)輸入端口 END scan;ARCHITECTURE behave OF scan ISBEGINPROCESS(clk)VARIABLE pslk:STD_LOGIC_VECTOR(2 DOWNTO 0); -掃描變量 VARIABLE p:STD_LOGIC_VECTOR(6 DOWNTO 0); -按鍵信息變量 VARIABLE i:INTEGER RANGE

8、 0 TO 7; -掃描循環(huán)變量 VARIABLE rel:INTEGER RANGE 0 TO 300; -重復(fù)按鍵延時變量 VARIABLE int:STD_LOGIC; -按鍵中斷變量 BEGINIF(clk'EVENT AND clk='1')THEN -500HZ的時鐘信號上升沿觸發(fā) IF(rel=300)THEN -兩次按鍵產(chǎn)生有效的最短時間,延時避免重復(fù)觸發(fā) rel:=rel;ELSErel:=rel+1;END IF;IF(i<=7)THEN -掃描信號為000111,8次循環(huán)掃描 slk<=pslk; -賦掃描值 int:=kin(0) A

9、ND kin(1) AND kin(2) AND kin(3); -按鍵輸入任意位為0即引起中斷 IF(int='0' AND rel=300)THENFOR j IN 0 TO 20 LOOP END LOOP; int:=kin(0) AND kin(1) AND kin(2) AND kin(3); IF(int='0')THEN -消抖后再次確認(rèn)有鍵按下 rel:=0; p:=(pslk-1) & kin; -結(jié)合slk和kin的信息判斷哪個鍵按下 CASE p IS -判斷按鍵信息 WHEN "0001110"=>da

10、ta<="0000" -0 WHEN "0011110"=>data<="0001" -1 WHEN "0101110"=>data<="0010" -2 WHEN "0111110"=>data<="0011" -3 WHEN "1101110"=>data<="0100" -4 WHEN "1111110"=>data<=&qu

11、ot;0101" -5 WHEN "0001101"=>data<="0110" -6 WHEN "0011101"=>data<="0111" -7 WHEN "1001101"=>data<="1000" -8 WHEN "1011101"=>data<="1001" -9 WHEN "1101011"=>data<="1010&qu

12、ot; -10-NEXT WHEN "0001011"=>data<="1011" -11-LAST WHEN "1111011"=>data<="1100" -12-ENTER WHEN "1011110"=>data<="1101" -13-ESC WHEN "1101101"=>data<="1110" -14-A(+) WHEN "1111101"=>da

13、ta<="1111" -15-B(-) WHEN OTHERS=>NULL; END CASE; en<='1' -產(chǎn)生脈沖信號 END IF; ELSE - 4 - -在中斷和最小按鍵間隔條件滿足下對按鍵內(nèi)容進(jìn)行判斷 -延時(避開抖動階段)en<='0'END IF;pslk:=pslk+1;FOR j IN 0 TO 3 LOOPEND LOOP;i:=i+1;ELSEi:=0;END IF;END IF;END PROCESS;END behave;數(shù)據(jù)處理模塊:LIBRARY IEEE;USE IEEE.STD

14、_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY eightbit ISPORT(data2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -按鍵信息輸入 en2:IN STD_LOGIC; -使能脈沖接收 clk2:IN STD_LOGIC; -時鐘信號,負(fù)責(zé)檢查輸入信號狀態(tài),分頻倒計時 bit1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit3:OUT

15、STD_LOGIC_VECTOR(7 DOWNTO 0);bit4:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-對應(yīng)四個需要顯示的數(shù)碼管需要顯示的信息END eightbit;ARCHITECTURE behave OF eightbit ISPROCEDURE q_to_bit -子程序(數(shù)值轉(zhuǎn)數(shù)碼管顯示碼) (q:IN INTEGER; -需要顯示的數(shù)值 SIGNAL bit0:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)IS -轉(zhuǎn)換出來的數(shù)碼管顯示碼 BEGINCASE q ISWHEN 0=>bit0<="0011111

16、1"WHEN 1=>bit0<="00000110"WHEN 2=>bit0<="01011011"WHEN 3=>bit0<="01001111"WHEN 4=>bit0<="01100110"WHEN 5=>bit0<="01101101"WHEN 6=>bit0<="01111101"WHEN 7=>bit0<="00100111"WHEN 8=>bi

17、t0<="01111111"WHEN 9=>bit0<="01101111"WHEN OTHERS=>bit0<="00000000"END CASE;END PROCEDURE q_to_bit;PROCEDURE x_to_y -子程序(四變量賦值) (x1:IN INTEGER; -賦值內(nèi)容 x2:IN INTEGER;x3:IN INTEGER;- 5 -x4:IN INTEGER;y1:OUT INTEGER; -被賦值變量 y2:OUT INTEGER;y3:OUT INTEGER;y4:OU

18、T INTEGER)ISBEGINy1:=x1;y2:=x2;y3:=x3;y4:=x4;END PROCEDURE x_to_y;PROCEDURE add -子程序(十進(jìn)制一位加法) (a:IN INTEGER; -被加數(shù) b:IN INTEGER; -加數(shù) c1:IN INTEGER RANGE 0 TO 2; -上級進(jìn)位 z:OUT INTEGER; -和 c2:OUT INTEGER RANGE 0 TO 2)IS -下級進(jìn)位 VARIABLE zz:INTEGER;BEGINzz:=a+b+c1; -被加數(shù)+加數(shù)+進(jìn)位 IF(zz>9)THEN -大于10進(jìn)位 c2:=1;z

19、z:=zz-10;ELSEc2:=0;END IF;z:=zz;END PROCEDURE add;PROCEDURE sub -子程序(十進(jìn)制一位減法) (a:IN INTEGER; -被減數(shù) b:IN INTEGER; -減數(shù) c1:IN INTEGER RANGE 0 TO 2; -上級借位 z:OUT INTEGER; -差 c2:OUT INTEGER RANGE 0 TO 2)IS -下級借位 VARIABLE zz:INTEGER;BEGINzz:=a-b-c1; -被減數(shù)-減數(shù)-借位 IF(zz<0)THEN -差小于0借位 c2:=1;zz:=zz+10;ELSEc2:

20、=0;END IF;z:=zz;END PROCEDURE sub;BEGINPROCESS(clk2)VARIABLE q1,q2,q3,q4,p1,p2,p3,p4:INTEGER RANGE 0 TO 9:=0;-q為顯示的數(shù)對應(yīng)的四個位的值,p和q一一對應(yīng),用作加減法時存放被加數(shù),被減數(shù)- 6 -VARIABLE c:INTEGER RANGE 0 TO 2:=0; VARIABLE r,n,a,b,e:BIT:='0'-進(jìn)位,借位標(biāo)志位BEGINIF(clk2'EVENT AND clk2='1')THEN -時鐘信號上升沿觸發(fā)檢查端口狀態(tài) I

21、F(en2='1' AND e='0')THEN -使能信號有效,且重復(fù)屏蔽信號關(guān)閉時響應(yīng)按鍵信息 CASE data2 ISWHEN "1100" => -按鍵為“enter”鍵,執(zhí)行求結(jié)果,倒計時啟動暫停功能 n:='0' -解除加減法待操作狀態(tài) IF(a='1')THEN -有加法則進(jìn)行加法運算 a:='0' -加法標(biāo)志位清零 add(q1,p1,0,q1,c); -被加數(shù)與加數(shù)求和 add(q2,p2,c,q2,c); add(q3,p3,c,q3,c);add(q4,p4,c,q

22、4,c);ELSIF (b='1')THEN -有減法則進(jìn)行減法運算 b:='0' -減法標(biāo)志位清零 sub(p1,q1,0,q1,c); -被減數(shù)與減數(shù)作差 sub(p2,q2,c,q2,c); sub(p3,q3,c,q3,c); sub(p4,q4,c,q4,c);ELSIF (r='0')THEN -沒有加減法操作又不在倒計時狀態(tài)則啟動倒計時 r:='1'ELSE -否則為在倒計時狀態(tài),“enter”鍵功能為暫停 r:='0' END IF;WHEN "1110" => -按鍵為“

23、A(+)”鍵,執(zhí)行加法功能 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) a:='1' -加法標(biāo)注位置1 b:='0' -減法標(biāo)志位清零 n:='1' -待操作位置1 x_to_y(q1,q2,q3,q4,p1,p2,p3,p4); -被加數(shù)暫存 x_to_y(0,0,0,0,q1,q2,q3,q4); -顯示清零 END IF;WHEN "1111" => -按鍵為“B(-)”鍵,執(zhí)行減法功能 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) a:=

24、9;0' -加法標(biāo)志位清零 b:='1' -減法標(biāo)志位置1 n:='1' -待操作位置1 x_to_y(q1,q2,q3,q4,p1,p2,p3,p4); -被減數(shù)暫存 x_to_y(0,0,0,0,q1,q2,q3,q4); -顯示清零 END IF;WHEN "1010" => -按鍵為“next”鍵,執(zhí)行自加1功能 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) IF (n='0')THEN -不在加減號剛輸入之后(否則無效) add(q1,1,0,q1,c); -加1 ad

25、d(q2,0,c,q2,c); add(q3,0,c,q3,c); add(q4,0,c,q4,c); END IF; END IF;- 7 -r為倒計時標(biāo)志位,n為加減法待操作位,a為加法標(biāo)志位,b為減法標(biāo)志位,e為重復(fù)屏蔽位VARIABLE count:INTEGER RANGE 0 TO 500:=0; -倒計時分頻計數(shù)變量WHEN "1011" => -按鍵為“l(fā)ast”鍵,執(zhí)行自減1功能 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) IF (n='0')THEN -不在加減號剛輸入之后(否則無效) sub(q

26、1,1,0,q1,c); -減1 sub(q2,0,c,q2,c);sub(q3,0,c,q3,c);sub(q4,0,c,q4,c);END IF;END IF;WHEN "1101" => -按鍵為“esc”鍵,執(zhí)行清零功能 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) x_to_y(0,0,0,0,p1,p2,p3,p4); -寄存器,標(biāo)志位清零 x_to_y(0,0,0,0,q1,q2,q3,q4);a:='0'b:='0'n:='0'END IF;WHEN OTHERS =&g

27、t; -按鍵為“09”,執(zhí)行多位數(shù)據(jù)輸入,移位顯示 IF (r='0')THEN -不在倒計時狀態(tài),則(否則無效) n:='0' -解除加減法待操作狀態(tài) q4:=q3; -后一個數(shù)碼管顯示內(nèi)容給前一個 q3:=q2;q2:=q1;q1:=CONV_INTEGER(date2); -第一位讀取輸入的數(shù)字 END IF;END CASE;e:='1' -重復(fù)屏蔽信號打開,防止重復(fù)觸發(fā) ELSIF (en2='0')THEN -使能脈沖過去后重復(fù)屏蔽信號關(guān)閉 e:='0'END IF;IF(r='1')T

28、HEN -在倒計時狀態(tài),執(zhí)行每秒減1倒計時 IF(count<500)THEN -計500次一分頻 count:=count+1; -未到500時累加 ELSIF(count=500)THEN -計到500時減1 count:=0; -計數(shù)清零 sub(q1,1,0,q1,c);sub(q2,0,c,q2,c);sub(q3,0,c,q3,c);sub(q4,0,c,q4,c);END IF;END IF;END IF;q_to_bit(q1,bit1); -將各位數(shù)值轉(zhuǎn)成數(shù)碼管顯示碼給輸出 q_to_bit(q2,bit2);q_to_bit(q3,bit3);q_to_bit(q4,

29、bit4);END PROCESS;END behave;顯示模塊:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;- 8 -USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY choose ISPORT(slk2:IN STD_LOGIC_VECTOR(2 DOWNTO 0); number1:IN STD_LOGIC_VECTOR(7 DOWNTO 0); number2:IN STD_LOGIC_VECTOR(7 DOWNTO 0); number3:IN STD_L

30、OGIC_VECTOR(7 DOWNTO 0); number4:IN STD_LOGIC_VECTOR(7 DOWNTO 0); number:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END choose;ARCHITECTURE behave OF choose IS BEGINPROCESS(slk2) BEGINCASE slk2 ISWHEN "000"=>number<=number1; WHEN "001"=>number<=number2; WHEN "010"=>number<=number3; WHEN "011"=>number<=number4;WHEN OTHERS=>number<="00000000" END CASE; END PROCESS; END behave;-掃描信號,用作選擇 -各數(shù)碼管要顯示的內(nèi)容-片選的數(shù)碼管顯示的內(nèi)容-片選信號對應(yīng)的多路選擇器的選通規(guī)則-高四位數(shù)碼管未用,選到是統(tǒng)一輸出全暗3.4、仿真結(jié)果圖2.掃

溫馨提示

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

最新文檔

評論

0/150

提交評論