數(shù)電設(shè)計數(shù)字鐘(基于QUARTUS)_第1頁
數(shù)電設(shè)計數(shù)字鐘(基于QUARTUS)_第2頁
數(shù)電設(shè)計數(shù)字鐘(基于QUARTUS)_第3頁
數(shù)電設(shè)計數(shù)字鐘(基于QUARTUS)_第4頁
數(shù)電設(shè)計數(shù)字鐘(基于QUARTUS)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)電課設(shè)數(shù)字鐘 電子1班 陳佳麗 200981070大連理工大學本科實驗報告題目:數(shù)電課設(shè)多功能數(shù)字鐘課程名稱:數(shù)字電路課程設(shè)計 學院(系): 電信學部 專 業(yè): 電子與通信工程 班 級: 學生姓名: *學 號:* 完成日期: 成 績: 2010 年 12 月 17 日題目:多功能數(shù)字時鐘一 設(shè)計要求1) 具有時、分、秒的十進制數(shù)字顯示(小時從0023)2) 具有手動校時校分功能3) 具有整點報時功能,從59分50秒起,每隔2秒鐘提示一次4) 具有秒表顯示、計時功能(精確至百分之一秒),可一鍵清零5) 具有手動定時,及鬧鐘功能,LED燈持續(xù)提醒一分鐘6) 具有倒計時功能,可手動設(shè)定倒計時范圍,

2、倒計時停止時有燈光提示,可一鍵清零二 設(shè)計分析及系統(tǒng)方案設(shè)計 1. 數(shù)字鐘的基本功能部分,包括時、分、秒的顯示,手動調(diào)時,以及整點報時部分。基本模塊是由振蕩器、分頻器、計數(shù)器、譯碼器、顯示器等幾部分組成。利用DE2硬件中提供的50MHZ晶振,經(jīng)過分頻得到周期為1s的時鐘脈沖。將該信號送入計數(shù)器進行計算,并把累加結(jié)果以“時”“分”“秒”的形式通過譯碼器由數(shù)碼管顯示出來。進入手動調(diào)時功能時,通過按鍵改變控制計數(shù)器的時鐘周期,使用0.5s的時鐘脈沖進行調(diào)時計數(shù)(KEY1調(diào)秒,LOAD2調(diào)分,LOAD3調(diào)時),并通過譯碼器由七位數(shù)碼管顯示。從59分50秒開始,數(shù)字鐘進入整點報時功能。每隔兩秒提示一次。

3、(本設(shè)計中以兩個LED燈代替蜂鳴器,進行報時)2. 多功能數(shù)字鐘的秒表功能部分,計時范圍從00分00.00秒至59分59.99秒??捎奢斎胄盘枺≧ST1)異步清零,并由按鍵(EN1)控制計時開始與停止。將DE2硬件中的50MHZ晶振經(jīng)過分頻獲得周期為0.01秒的時鐘脈沖,將信號送入計數(shù)器進行計算,并把累計結(jié)果通過譯碼器由七位數(shù)碼管顯示。3. 多功能數(shù)字鐘的鬧鐘功能部分,通過按鍵(KEY1,KEY2,KEY3)設(shè)定鬧鐘時間,當時鐘進入鬧鐘設(shè)定的時間(判斷時鐘的時信號qq6,qq5與分信號qq4,qq3分別與鬧鐘設(shè)定的時信號r6,r5與分信號r4,43是否相等),則以LED燈連續(xù)提示一分鐘。4.

4、多功能數(shù)字鐘的倒計時功能部分,可通過按鍵(LOAD7調(diào)秒,LOAD8調(diào)分,LOAD9調(diào)時)設(shè)定倒計時開始時刻。倒計時的時鐘與數(shù)字鐘的時鐘相同,每迎到一個時鐘上升沿,則計數(shù)器減一。計數(shù)器減至00時,分鐘位、秒鐘位恢復至59,時鐘位恢復至23。倒計時結(jié)束時(即00時00分00秒),控制LED燈亮,表示倒計時結(jié)束。 本設(shè)計通過數(shù)據(jù)選擇器控制譯碼器,使數(shù)碼管獨立顯示,各功能之間互不影響。當LOAD4為高電平,則對秒表信號進行譯碼,數(shù)碼管顯示秒表數(shù)據(jù);當LOAD4為低電平,LOAD5為高電平,則對鬧鐘信號進行譯碼,數(shù)碼管顯示鬧鐘數(shù)據(jù);當LOAD4,LOAD5為低電平,LOAD6為高電平,則對倒計時信號進

5、行譯碼,數(shù)碼管顯示倒計時信號數(shù)據(jù);當LOAD4,LOAD5,LOAD6全為低電平,則對正常時鐘信號進行譯碼,數(shù)碼管顯示時鐘信號數(shù)據(jù)。附圖1:系統(tǒng)總體結(jié)構(gòu)框圖Load10=0數(shù)碼管顯示譯碼器數(shù)據(jù)選擇器時鐘計數(shù)器分頻(周期1s)50MHZ分頻LED提醒報時鬧鐘 Load4=0分頻(周期0.01s)秒表計數(shù)器異步清零倒計時計數(shù)器3 系統(tǒng)以及模塊硬件電路設(shè)計硬件模塊包含與,或,非多個基本邏輯單元,由硬件芯片內(nèi)部提供,軟件編程是為了目的性的操作硬件。50MHZ的晶振進行分頻操作:根據(jù)上式得到周期分別為1s,0.01s,0.5s的時鐘。附圖2系統(tǒng)硬件電路設(shè)計下載時選擇的開發(fā)系統(tǒng)模式以及管腳定義表1 GW4

6、8-CK開發(fā)系統(tǒng)工作模式:接口名稱類型(輸入/輸出)結(jié)構(gòu)圖上的信號名引腳號說明clkInput Pin_N2250MHz clock 信號En1InputPin_P21秒表運行使能段EN2InputPin_N12倒計時運行使能段KEY1InputPin_N235秒鐘調(diào)節(jié)按鍵KEY2Input Pin_P236鬧鐘分鐘調(diào)節(jié)按鍵KEY3Input Pin_W266鬧鐘時鐘調(diào)節(jié)按鍵Led1OutputPin_AE237鬧鐘顯示Led2OutputPin_AA207接近整點顯示Led3OutputPin_Y187整點顯示Led4OutputPin_AF237倒計時結(jié)束顯示Led5OutputPin_A

7、D128倒計時結(jié)束閃爍Load1InputPin_V21時鐘運行使能端Load2InputPin_V11數(shù)字鐘分鐘調(diào)節(jié)按鍵Load3InputPin_U41數(shù)字時鐘調(diào)節(jié)按鍵Load4InputPin_U31選擇秒表顯示Load5InputPin_P11選擇鬧鐘顯示Load6InputPin_A134選擇倒計時顯示Load7InputPin_C133倒計時初始秒鐘設(shè)定Load8InputPin_AC238倒計時初始分鐘設(shè)定Load9InputPin_AD138倒計時初始時鐘設(shè)定q10Output Pin_AF108秒鐘低位數(shù)碼管顯示q11OutputPin_AB128q12OutputPin_A

8、C128q13OutputPin_AD118q14OutputPin_AE118q15OutputPin_V148q16OutputPin_V138q20OutputPin_V206秒鐘高位數(shù)碼管顯示q21OutputPin_V216q22OutputPin_W216q23OutputPin_Y226q24OutputPin_AA246q25OutputPin_AA236q26OutputPin_AB246q30OutputPin_AB236分鐘低位數(shù)碼管顯示q31OutputPin_V226q32OutputPin_AC256q33OutputPin_AC266q34OutputPin_AB

9、266q35OutputPin_AB256q36OutputPin_Y246q40OutputPin_Y236分鐘高位數(shù)碼管顯示q41OutputPin_AA256q42OutputPin_AA266q43OutputPin_Y266q44OutputPin_Y256q45OutputPin_U226q46OutputPin_W246q50OutputPin_U91q51OutputPin_U11q52OutputPin_U21小時低位數(shù)碼管顯示q53OutputPin_T41q54OutputPin_R71q55OutputPin_R61q56OutputPin_T31q60OutputPi

10、n_T21小時高位數(shù)碼管顯示q61OutputPin_P61q62OutputPin_P71q63OutputPin_T91q64OutputPin_R51q65OutputPin_R41q66OutputPin_R31rst1InputPin_T71秒表異步清零Rst2InputPin_B134倒計時異步清零四 系統(tǒng)的VHDL設(shè)計源程序:-代碼共372行l(wèi)ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock is port( load9,load8,load7,load6,lo

11、ad5,load4,load3,load2,load1:in std_logic; clk,rst1,rst2,en1,en2,key1,key2,key3:in std_logic; q1,q2,q3,q4,q5,q6:out std_logic_vector(6 downto 0);led1,led2,led3,led4,led5:out std_logic );end;architecture a of clock issignal qq1,qq2,qq3,qq4,qq5,qq6:std_logic_vector(3 downto 0);-數(shù)字鐘計數(shù)器信號signal vis1,vis2

12、,vis3,vis4,vis5,vis6:std_logic_vector(3 downto 0);signal cp1,cp2,cp3,cp4,cp5:std_logic;signal p1:integer range 0 to 49;signal p2:integer range 0 to 999;signal p3:integer range 0 to 999;signal clfsa:integer range 0 to 499;signal en,a1,e1,c1,hlfs,l:std_logic;signal clkx,clkx1,clkx2,clkx3,clkx4 : std_l

13、ogic;signal a,b,c,d,e,f,g: std_logic_vector(3 downto 0);-秒表計數(shù)器信號signal r1,r2,r3,r4,r5,r6:std_logic_vector(3 downto 0);-鬧鐘信號signal z1,z2,z3,z4,z5,z6:std_logic_vector(3 downto 0);-倒計時計數(shù)器信號signal alz1,alz2,alz3,alz4,alz5:std_logic; Begin-分頻模塊-process(clk) -分頻1 begin if rising_edge(clk) then if p1=49 th

14、en p1<=0;cp1<='1' else p1<=p1+1;cp1<='0' end if; end if; end process; process(cp1) -分頻2begin if rising_edge(cp1) then if p2=999 then p2<=0;cp2<='1' else p2<=p2+1;cp2<='0' end if; end if; end process; process(cp2) -得到周期為1秒的信號begin if rising_edge

15、(cp2) then if p3=999 then p3<=0;cp3<='1' else p3<=p3+1;cp3<='0' end if; end if; end process;process(cp2) -得到周期為百分之一秒的信號begin if rising_edge(cp2) then if a="1001" then a<="0000"a1<='1' else a<=a+1;a1<='0' end if;end if;end pr

16、ocess;process(cp2) -得到周期為0.5秒的信號begin if rising_edge(cp2) then if clfsa=499 then clfsa<=0;hlfs<='1' else clfsa<=clfsa+1;hlfs<='0' end if; end if; end process;-數(shù)字鐘模塊-process(cp3,load1,key1) -數(shù)字鐘秒鐘計數(shù)器begin if rising_edge(cp3) then if load1='1' then if key1='0

17、9; then -秒鐘手動調(diào)節(jié) if qq2="0101" and qq1="1001" then qq1<="0000" qq2<="0000" elsif qq1="1001" then qq1<="0000"qq2<=qq2+1; else qq1<=qq1+1; end if;end if;else if load1='0' thenif qq2="0101" and qq1="1001&qu

18、ot; then qq1<="0000" qq2<="0000"cp4<='1' elsif qq1="1001" then qq1<="0000"qq2<=qq2+1;cp4<='0' else qq1<=qq1+1;cp4<='0' end if; if qq2="0101" and en='1' then -整點報時case qq1 iswhen "0001"

19、=>led2<='1'when "0011"=>led2<='1'when "0101"=>led2<='1'when "0111"=>led2<='1'when "1001"=>led3<='1'when others =>led2<='0'led3<='0'end case;else led2<='0'

20、led3<='0'end if;end if;end if;end if; end process;process(hlfs,cp4,load2) -數(shù)字鐘分鐘計數(shù)器beginif load2='1' then clkx<=hlfs;else clkx<=cp4;end if; -當load2為高電平時,進行分調(diào)節(jié) if rising_edge(clkx)then if qq4="0101" and qq3="1001" then qq3<="0000" qq4<=&quo

21、t;0000"cp5<='1' elsif qq3="1001" then qq3<="0000"qq4<=qq4+1;cp5<='0' else qq3<=qq3+1;cp5<='0'end if;end if;if qq3="1001" and qq4="0101" then en<='1'else en<='0'end if;end process;process(hlfs

22、,cp5,load1) -數(shù)字鐘時鐘計數(shù)器begin if load3='1' then clkx1<=hlfs;else clkx1<=cp5;end if; -當load3為高電平時,進行小時調(diào)節(jié)if rising_edge(clkx1) then if qq5="0011" and qq6="0010" then qq5<="0000" qq6<="0000" elsif qq5="1001" then qq5<="0000"

23、;qq6<=qq6+1; else qq5<=qq5+1; end if;end if;end process;-鬧鐘模塊-process(hlfs,load5,key1) -鬧鐘秒計數(shù)器begin if rising_edge(hlfs) then if load5='1' then if key1='0' then -手動進行鬧鐘秒設(shè)定 if r2="0101" and r1="1001" then r1<="0000" r2<="0000" elsif

24、r1="1001" then r1<="0000"r2<=r2+1; else r1<=r1+1; end if;end if;end if;end if;end process;process(hlfs,load5,key2) -鬧鐘分計數(shù)器begin if rising_edge(hlfs) then if load5='1' then if key2='0' then -手動進行鬧鐘分設(shè)定 if r4="0101" and r3="1001" then r3&

25、lt;="0000" r4<="0000" elsif r3="1001" then r3<="0000"r4<=r4+1; else r3<=r3+1; end if;end if;end if;end if;end process;process(hlfs,load5,key3) -鬧鐘小時計數(shù)器begin if rising_edge(hlfs) then if load5='1' then if key3='0' then -手動進行鬧鐘小時設(shè)定 if

26、 r6="0010" and r5="0011" then r5<="0000" r6<="0000" elsif r5="1001" then r5<="0000"r6<=r6+1; else r5<=r5+1; end if;end if;end if;end if;end process;process(cp3,qq1,qq2,qq3,qq4,qq5,qq6,r1,r2,r3,r4,r5,r6) -數(shù)字鐘與鬧鐘相符,以LED燈進行提示beg

27、in if rising_edge(cp3) thenif qq3=r3 and qq4=r4 and qq5=r5 and qq6=r6then led1<='1'else led1<='0'end if;end if;end process;-秒表模塊-process(a1,rst1,en1) -秒表計數(shù)器begin if rst1='1' then b<="0000"c<="0000" -秒表異步清零 elsif rising_edge(a1) then if en1='

28、;1' then if b="1001" and c="1001"then b<="0000"c<="0000"c1<='1'elsif b="1001" then b<="0000"c<=c+1;c1<='0'else b<=b+1;c1<='0' end if; end if;end if;end process;process(c1,rst1,en1) beginif

29、 rst1='1' then d<="0000"e<="0000" elsif rising_edge(c1) then if en1='1' then if d="1001" and e="0101"then d<="0000"e<="0000"e1<='1'elsif d="1001" thend<="0000"e<=e+1;e1<=&#

30、39;0' else d<=d+1;e1<='0' end if;end if;end if;end process;process(e1,rst1,en1)beginif rst1='1' then f<="0000"g<="0000" elsif rising_edge(e1) then if en1='1' then if f="1001" and g="0101"then f<="0000"g<=

31、"0000"elsif f="1001" then f<="0000"g<=g+1;else f<=f+1; end if; end if;end if;end process;-倒計時模塊-process(cp3,rst2,en2,clkx2,load7,hlfs) -倒計時計數(shù)器begin if load7='1' then clkx2<=hlfs; else clkx2<=cp3;end if;if rst2='1' then z2<="0000&qu

32、ot;z1<="0000"alz1<='1' -倒計時異步清零 elsif rising_edge(clkx2) then if en2='1' then if z2="0000" and z1="0000"then z2<="0101"z1<="1001"alz1<='1'elsif z1="0000" then z1<="1001"z2<=z2-1;alz1<

33、;='0'else z1<=z1-1;alz1<='0' end if;if alz5='1' then if z1="0001" and z2="0000" then led4<='1'else led4<='0'end if;end if; end if;end if;end process;process(alz1,rst2,en2,load8,clkx3,hlfs)begin if load8='1' then clkx3<

34、;=hlfs;else clkx3<=alz1;end if;if rst2='1' then z4<="0000"z3<="0000"alz2<='1' elsif rising_edge(clkx3) then if z4="0000" and z3="0000"then z4<="0101"z3<="1001"alz2<='1'elsif z3="0000" t

35、hen z3<="1001"z4<=z4-1;alz2<='0'else z3<=z3-1;alz2<='0' end if;if alz4='1' then if z4<="0000" and z3<="0000" then alz5<='1'else alz5<='0'end if; end if;end if;end process;process(clkx4,alz2,rst2,en2,load

36、9,hlfs)begin if load9='1' then clkx4<=hlfs;else clkx4<=alz2;end if;if rst2='1' then z6<="0000"z5<="0000" elsif rising_edge(clkx4) then if z6="0000" and z5="0000"then z6<="0010"z5<="0011"elsif z5="0000&

37、quot; then z5<="1001"z6<=z6-1;else z5<=z5-1; end if;if z5="0000" and z6="0000" then alz4<='1'else alz4<='0'end if; end if;end process;process(z1,z2,z3,z4,z5,z6,hlfs,l)begin if rising_edge(hlfs) then if z1="0000" and z2="0000

38、" and z3="0000" and z4="0000" and z5="0000" and z6="0000" thenl<=not l;else l<='0'end if;end if;led5<=l;end process;-數(shù)據(jù)選擇器,選擇對數(shù)字鐘,秒表,倒計時,鬧鐘其中之一進行譯碼顯示-process(qq1,qq2,qq3,qq4,qq5,qq6,b,c,d,e,f,g,load4,load5,load6,r1,z1,r2,z2,r3,z4,r5,z5,r6

39、,z6) beginif load4='1' then vis1<=b;vis2<=c;vis3<=d;vis4<=e;vis5<=f;vis6<=g;else if load5='1' then vis1<=r1;vis2<=r2;vis3<=r3;vis4<=r4;vis5<=r5;vis6<=r6; elsif load6='1' then vis1<=z1;vis2<=z2;vis3<=z3;vis4<=z4;vis5<=z5;vis6&

40、lt;=z6; else vis1<=qq1;vis2<=qq2;vis3<=qq3;vis4<=qq4;vis5<=qq5;vis6<=qq6;end if;end if;end process;-顯示模塊-process(vis1,vis2,vis3,vis4,vis5,vis6)begincase vis1 iswhen "0000"=>q1<="1000000"when "0001"=>q1<="1111001"when "0010&qu

41、ot;=>q1<="0100100"when "0011"=>q1<="0110000"when "0100"=>q1<="0011001"when "0101"=>q1<="0010010"when "0110"=>q1<="0000010"when "0111"=>q1<="1111000"when &

42、quot;1000"=>q1<="0000000"when "1001"=>q1<="0010000"when others => null;end case;case vis2 iswhen "0000"=>q2<="1000000"when "0001"=>q2<="1111001"when "0010"=>q2<="0100100"wh

43、en "0011"=>q2<="0110000"when "0100"=>q2<="0011001"when "0101"=>q2<="0010010"when "0110"=>q2<="0000010"when "0111"=>q2<="1111000"when "1000"=>q2<="000

44、0000"when "1001"=>q2<="0010000"when others => null;end case;case vis3 iswhen "0000"=>q3<="1000000"when "0001"=>q3<="1111001"when "0010"=>q3<="0100100"when "0011"=>q3<="

45、;0110000"when "0100"=>q3<="0011001"when "0101"=>q3<="0010010"when "0110"=>q3<="0000010"when "0111"=>q3<="1111000"when "1000"=>q3<="0000000"when "1001"=>

46、q3<="0010000"when others => null;end case;case vis4 iswhen "0000"=>q4<="1000000"when "0001"=>q4<="1111001"when "0010"=>q4<="0100100"when "0011"=>q4<="0110000"when "0100"=

47、>q4<="0011001"when "0101"=>q4<="0010010"when "0110"=>q4<="0000010"when "0111"=>q4<="1111000"when "1000"=>q4<="0000000"when "1001"=>q4<="0010000"when other

48、s => null;end case;case vis5 iswhen "0000"=>q5<="1000000"when "0001"=>q5<="1111001"when "0010"=>q5<="0100100"when "0011"=>q5<="0110000"when "0100"=>q5<="0011001"when "0101"=>q5<="0010010"when "0110"=>q5<="0000010"when "0111"=>q5<="1111000"when "1000"=>q5<="0000000"when "1001"=>q5<="

溫馨提示

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

評論

0/150

提交評論