課程設(shè)計(jì)(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第1頁
課程設(shè)計(jì)(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第2頁
課程設(shè)計(jì)(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第3頁
課程設(shè)計(jì)(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第4頁
課程設(shè)計(jì)(基于FPGA的數(shù)碼管十進(jìn)制顯示)_第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、中北大學(xué)課 程 設(shè) 計(jì) 說 明 書   學(xué)生姓名:金博楠學(xué) 號(hào): 0906024139學(xué) 院: 電子與計(jì)算機(jī)科學(xué)技術(shù)學(xué)院專 業(yè): 微電子題 目:利用鍵盤控制數(shù)碼管進(jìn)行十進(jìn)制數(shù)字顯示   指導(dǎo)教師: 崔永俊 職稱: 副教授     2012 年 6 月 22 日目 錄1、課程設(shè)計(jì)的目的12、課程設(shè)計(jì)內(nèi)容和要求12.1、設(shè)計(jì)內(nèi)容12.2、設(shè)計(jì)要求13、設(shè)計(jì)方案及實(shí)現(xiàn)情況13.1、設(shè)計(jì)思路13.2、工作原理及框圖13.3、各模塊功能描述33.4、仿真結(jié)果93.5、試驗(yàn)箱驗(yàn)

2、證情況104、課程設(shè)計(jì)總結(jié)115、參考文獻(xiàn)12- 2 -1、課程設(shè)計(jì)的目的1)、學(xué)習(xí)操作數(shù)字電路設(shè)計(jì)實(shí)驗(yàn)開發(fā)系統(tǒng),掌握數(shù)碼管顯示模塊的工作原理及應(yīng)用。 2)、掌握組合邏輯電路、時(shí)序邏輯電路的設(shè)計(jì)方法。 3)、學(xué)習(xí)掌握可編程器件設(shè)計(jì)的全過程。2、課程設(shè)計(jì)內(nèi)容和要求2.1、設(shè)計(jì)內(nèi)容1)、學(xué)習(xí)掌握鍵盤控制模塊、數(shù)碼管顯示模塊的工作原理及應(yīng)用; 2)、熟練掌握VHDL編程語言,編寫鍵盤控制模塊的控制邏輯。2.2、設(shè)計(jì)要求1)、仿真所編寫的程序,模擬驗(yàn)證所編寫的模塊功能; 2)、下載程序到芯片中,硬件驗(yàn)證所設(shè)置的功能,能夠?qū)崿F(xiàn)十進(jìn)制數(shù)的顯示; 3)、整理設(shè)計(jì)內(nèi)容,編寫設(shè)計(jì)說明書。3、設(shè)計(jì)方案及實(shí)現(xiàn)情況3

3、.1、設(shè)計(jì)思路1)、鍵盤不斷掃描,有按鍵按下則輸出相應(yīng)信號(hào),并且發(fā)出使能信號(hào)給處理模塊。2)、處理模塊對(duì)收到的信號(hào)進(jìn)行判斷,決定執(zhí)行什么操作,對(duì)數(shù)據(jù)進(jìn)行運(yùn)算。3)、對(duì)于數(shù)字鍵需要移位顯示,功能鍵要考慮優(yōu)先級(jí)判斷,進(jìn)行倒計(jì)時(shí)操作時(shí)要能對(duì)時(shí)鐘信號(hào)分頻自減。4)、專門的程序段用來不斷將當(dāng)前數(shù)據(jù)各位求出,譯碼成顯示內(nèi)容輸給數(shù)據(jù)選擇模塊。5)、數(shù)據(jù)選擇模塊根據(jù)掃描電路選擇信號(hào)將各位數(shù)字顯示出來。3.2、工作原理及框圖1、鍵盤原理 鍵盤電路網(wǎng)絡(luò)很像一臺(tái)微縮的計(jì)算機(jī),它擁有自己的處理器和在該處理器之間傳輸數(shù)據(jù)的電路,這個(gè)電路的很大一部分組成了鍵矩陣。鍵矩陣是位于鍵下方的一種電路網(wǎng)格。在所有的鍵盤(中,每個(gè)電

4、路在每個(gè)按鍵所處的位置點(diǎn)下均處于斷開狀態(tài)。當(dāng)您按下某個(gè)鍵時(shí),此按鍵將按下了開關(guān),從而閉合電路,使得少量電流可以通過。開關(guān)的機(jī)械作用會(huì)導(dǎo)致某種振動(dòng)(稱作回彈),處理器可以過濾掉這種振動(dòng)。如果您按下某鍵并保持住,則處理器認(rèn)為您是在反復(fù)按下該鍵。試驗(yàn)箱上的鍵盤可以看做是8*4的矩陣鍵盤(雖然外部不是),8行由38譯碼器選擇,所以有外部sel0-2三根線控制掃描。2、鍵盤中按鍵的判斷 對(duì)于鍵盤中有無鍵按下的判斷是很重要的,具體判斷如下:將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與行線相交叉的按鍵之中。若所有列線均為高電平,則鍵盤中無鍵

5、按下。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與低電平的行線交叉處的按鍵就是閉合的按鍵。鍵盤掃描模塊在時(shí)鐘下不斷將行置零,掃描列的狀態(tài),判斷按鍵。3、鍵盤按鍵對(duì)應(yīng)的編碼Sel2-0Kin3-0對(duì)應(yīng)按鍵0001110000111101010111020111110311011104111111050001101600111017Sel2-0Kin3-0對(duì)應(yīng)按鍵10011018101110191101011NEXT0001011LAST11

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

7、某一時(shí)刻那個(gè)值輸出。選擇信號(hào)即為掃描輸出信號(hào),因?yàn)閿?shù)碼管和鍵盤是共用一個(gè)掃描端。所以當(dāng)掃描信號(hào)選中相應(yīng)數(shù)碼管時(shí)讓對(duì)應(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;-輸入時(shí)鐘en:OUT STD_LOGIC;-有鍵按下時(shí)輸出使能data:OUT STD_LOGIC_VECTOR(3 DOWN

8、TO 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 0 TO 7;-掃描循環(huán)變量VARIABL

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

10、入任意位為0即引起中斷IF(int='0' AND rel=300)THEN-在中斷和最小按鍵間隔條件滿足下對(duì)按鍵內(nèi)容進(jìn)行判斷FOR j IN 0 TO 20 LOOP-延時(shí)(避開抖動(dòng)階段)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的信息判斷哪個(gè)鍵按下CASE p IS-判斷按鍵信息WHEN "0001110"=>data<="

11、;0000"-0WHEN "0011110"=>data<="0001"-1WHEN "0101110"=>data<="0010"-2WHEN "0111110"=>data<="0011"-3WHEN "1101110"=>data<="0100"-4WHEN "1111110"=>data<="0101"-5WHEN &q

12、uot;0001101"=>data<="0110"-6WHEN "0011101"=>data<="0111"-7WHEN "1001101"=>data<="1000"-8WHEN "1011101"=>data<="1001"-9WHEN "1101011"=>data<="1010"-10-NEXTWHEN "0001011&qu

13、ot;=>data<="1011"-11-LASTWHEN "1111011"=>data<="1100"-12-ENTERWHEN "1011110"=>data<="1101"-13-ESCWHEN "1101101"=>data<="1110"-14-A(+)WHEN "1111101"=>data<="1111"-15-B(-)WHEN OTHERS

14、=>NULL;END CASE;en<='1'-產(chǎn)生脈沖信號(hào)END IF;ELSEen<='0'END IF;pslk:=pslk+1;FOR j IN 0 TO 3 LOOPEND LOOP;i:=i+1;ELSE i:=0;END IF;END IF;END PROCESS;END behave;數(shù)據(jù)處理模塊:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY eightbit

15、 ISPORT(data2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-按鍵信息輸入en2:IN STD_LOGIC;-使能脈沖接收clk2:IN STD_LOGIC;-時(shí)鐘信號(hào),負(fù)責(zé)檢查輸入信號(hào)狀態(tài),分頻倒計(jì)時(shí)bit1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit3:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit4:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-對(duì)應(yīng)四個(gè)需要顯示的數(shù)碼管需要顯示的信息END eightbi

16、t;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<="00111111"WHEN 1=>bit0<="00000110"WHEN 2=>bit0<="01011011"WHEN 3=>bit0&l

17、t;="01001111"WHEN 4=>bit0<="01100110"WHEN 5=>bit0<="01101101"WHEN 6=>bit0<="01111101"WHEN 7=>bit0<="00100111"WHEN 8=>bit0<="01111111"WHEN 9=>bit0<="01101111"WHEN OTHERS=>bit0<="000000

18、00"END CASE;END PROCEDURE q_to_bit;PROCEDURE x_to_y-子程序(四變量賦值)(x1:IN INTEGER;-賦值內(nèi)容x2:IN INTEGER;x3:IN INTEGER;x4:IN INTEGER;y1:OUT INTEGER;-被賦值變量y2:OUT INTEGER;y3:OUT INTEGER;y4:OUT INTEGER)ISBEGINy1:=x1;y2:=x2;y3:=x3;y4:=x4;END PROCEDURE x_to_y;PROCEDURE add-子程序(十進(jìn)制一位加法)(a:IN INTEGER;-被加數(shù)b:IN

19、INTEGER;-加數(shù)c1:IN INTEGER RANGE 0 TO 2;-上級(jí)進(jìn)位z:OUT INTEGER;-和c2:OUT INTEGER RANGE 0 TO 2)IS-下級(jí)進(jìn)位VARIABLE zz:INTEGER;BEGINzz:=a+b+c1;-被加數(shù)+加數(shù)+進(jìn)位IF(zz>9)THEN-大于10進(jìn)位c2:=1;zz:=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

20、 TO 2;-上級(jí)借位z:OUT INTEGER;-差c2:OUT INTEGER RANGE 0 TO 2)IS-下級(jí)借位VARIABLE zz:INTEGER;BEGINzz:=a-b-c1;-被減數(shù)-減數(shù)-借位IF(zz<0)THEN-差小于0借位c2:=1;zz:=zz+10;ELSEc2:=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ù)對(duì)應(yīng)的四個(gè)位的值,p和q一一對(duì)應(yīng),用作加減法時(shí)存放被加數(shù),被減

21、數(shù)VARIABLE c:INTEGER RANGE 0 TO 2:=0;-進(jìn)位,借位標(biāo)志位VARIABLE r,n,a,b,e:BIT:='0'-r為倒計(jì)時(shí)標(biāo)志位,n為加減法待操作位,a為加法標(biāo)志位,b為減法標(biāo)志位,e為重復(fù)屏蔽位VARIABLE count:INTEGER RANGE 0 TO 500:=0;-倒計(jì)時(shí)分頻計(jì)數(shù)變量BEGINIF(clk2'EVENT AND clk2='1')THEN-時(shí)鐘信號(hào)上升沿觸發(fā)檢查端口狀態(tài)IF(en2='1' AND e='0')THEN-使能信號(hào)有效,且重復(fù)屏蔽信號(hào)關(guān)閉時(shí)響應(yīng)按

22、鍵信息CASE data2 ISWHEN "1100" =>-按鍵為“enter”鍵,執(zhí)行求結(jié)果,倒計(jì)時(shí)啟動(dòng)暫停功能n:='0'-解除加減法待操作狀態(tài)IF(a='1')THEN-有加法則進(jìn)行加法運(yù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,q4,c);ELSIF (b='1')THEN-有減法則進(jìn)行減法運(yùn)算b:='0'-減法標(biāo)志位清零sub(p1,q1,0

23、,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-沒有加減法操作又不在倒計(jì)時(shí)狀態(tài)則啟動(dòng)倒計(jì)時(shí)r:='1'ELSE-否則為在倒計(jì)時(shí)狀態(tài),“enter”鍵功能為暫停r:='0'END IF;WHEN "1110" =>-按鍵為“A(+)”鍵,執(zhí)行加法功能IF (r='0')THEN-不在倒計(jì)時(shí)狀態(tài),則(否則無效)a:='1'-加法標(biāo)注位置1b:='0'-

24、減法標(biāo)志位清零n:='1'-待操作位置1x_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-不在倒計(jì)時(shí)狀態(tài),則(否則無效)a:='0'-加法標(biāo)志位清零b:='1'-減法標(biāo)志位置1n:='1'-待操作位置1x_to_y(q1,q2,q3,q4,p1,p2,p3,p4);-被減數(shù)暫存x_to_y(0

25、,0,0,0,q1,q2,q3,q4);-顯示清零END IF;WHEN "1010" =>-按鍵為“next”鍵,執(zhí)行自加1功能IF (r='0')THEN-不在倒計(jì)時(shí)狀態(tài),則(否則無效)IF (n='0')THEN-不在加減號(hào)剛輸入之后(否則無效)add(q1,1,0,q1,c);-加1add(q2,0,c,q2,c);add(q3,0,c,q3,c);add(q4,0,c,q4,c);END IF;END IF;WHEN "1011" =>-按鍵為“l(fā)ast”鍵,執(zhí)行自減1功能IF (r='0&#

26、39;)THEN-不在倒計(jì)時(shí)狀態(tài),則(否則無效)IF (n='0')THEN-不在加減號(hào)剛輸入之后(否則無效)sub(q1,1,0,q1,c);-減1sub(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-不在倒計(jì)時(shí)狀態(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:=&

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

28、復(fù)屏蔽信號(hào)關(guān)閉e:='0'END IF;IF(r='1')THEN-在倒計(jì)時(shí)狀態(tài),執(zhí)行每秒減1倒計(jì)時(shí)IF(count<500)THEN-計(jì)500次一分頻count:=count+1;-未到500時(shí)累加ELSIF(count=500)THEN-計(jì)到500時(shí)減1count:=0;-計(jì)數(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,bi

29、t2);q_to_bit(q3,bit3);q_to_bit(q4,bit4);END PROCESS;END behave;顯示模塊:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY choose ISPORT(slk2:IN STD_LOGIC_VECTOR(2 DOWNTO 0);-掃描信號(hào),用作選擇number1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-各數(shù)碼管要顯示的內(nèi)容number2:IN

30、STD_LOGIC_VECTOR(7 DOWNTO 0);number3:IN STD_LOGIC_VECTOR(7 DOWNTO 0);number4:IN STD_LOGIC_VECTOR(7 DOWNTO 0);number:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-片選的數(shù)碼管顯示的內(nèi)容END choose;ARCHITECTURE behave OF choose ISBEGINPROCESS(slk2)BEGINCASE slk2 ISWHEN "000"=>number<=number1;-片選信號(hào)對(duì)應(yīng)的多路選擇器的選通規(guī)則WHEN "001"=>number<=number2;WHEN "010"=>number<=number3;WHEN "011"=>number<=number4;WHEN OTHERS=>number<="00000000"-高四位數(shù)碼管未用,選到是統(tǒng)一輸出全暗END CASE;END PROCESS;END

溫馨提示

  • 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)論