2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  VHDL綜合設(shè)計(jì)</b></p><p><b>  實(shí)驗(yàn)報(bào)告</b></p><p><b>  多功能電子計(jì)時(shí)器</b></p><p>  學(xué) 院 電子與信息學(xué)院 </p><p>  專 業(yè) 電子信息

2、科學(xué)類 </p><p>  評(píng)價(jià)等級(jí) </p><p>  姓 名 </p><p>  班 級(jí) </p><p>  提交日期 2013 年 2 月 27 日 </p><p>

3、;<b>  數(shù)字系統(tǒng)課程設(shè)計(jì)</b></p><p><b>  一、學(xué)時(shí)與學(xué)分</b></p><p>  課內(nèi)學(xué)時(shí):2周學(xué)分:2.0</p><p><b>  二、教學(xué)目的與要求</b></p><p>  本課程設(shè)計(jì)是一實(shí)踐性課程,要求學(xué)生用自頂向下的模塊設(shè)計(jì)

4、方法和VHDL語言完成一個(gè)小型數(shù)字系統(tǒng)的設(shè)計(jì),并可用可編程邏輯器件實(shí)現(xiàn)。</p><p><b>  三、教學(xué)安排</b></p><p>  1. 方案審核 </p><p>  要求2~3個(gè)學(xué)生自擬一個(gè)數(shù)字系統(tǒng)設(shè)計(jì)課題,其難度不得低于一個(gè)具有校時(shí)、整點(diǎn)報(bào)時(shí)

5、和鬧時(shí)功能的數(shù)字鐘。不允許抄襲他人的課題與方案。設(shè)計(jì)方案應(yīng)包括:設(shè)計(jì)要求、詳細(xì)框圖、控制器流程圖。學(xué)生在規(guī)定時(shí)間內(nèi)將設(shè)計(jì)方案與指導(dǎo)教師討論,通過后方可進(jìn)入下一階段學(xué)習(xí)(方案討論時(shí)間為15周3的課堂內(nèi))。</p><p>  2. 設(shè)計(jì)與實(shí)現(xiàn) </p><p>  在微機(jī)和進(jìn)階實(shí)驗(yàn)板平臺(tái)上完成,通過邏輯模擬和實(shí)

6、驗(yàn)板平臺(tái)功能驗(yàn)證。(因?qū)嶒?yàn)室板子有限,請(qǐng)同學(xué)們盡量利用課余時(shí)間到實(shí)驗(yàn)室調(diào)試)</p><p>  3. 驗(yàn)收 </p><p>  在進(jìn)階實(shí)驗(yàn)板上下載,由教師驗(yàn)收平分。</p><p>  4. 完成一份設(shè)計(jì)報(bào)告</p><p><b> 

7、 四、評(píng)分標(biāo)準(zhǔn)</b></p><p><b>  比例: </b></p><p>  作品 80%</p><p>  報(bào)告 20%</p><p>  2. 從創(chuàng)新、思想、難度、設(shè)計(jì)成果的可靠性、合理性等方面綜合評(píng)價(jià)。</p><p>&l

8、t;b>  設(shè)計(jì)要求</b></p><p>  1. 本計(jì)時(shí)器存在電子時(shí)鐘、定時(shí)器和秒表三種功能,并可以通過開關(guān)的選擇,進(jìn)行不同功能的切換。</p><p>  2. 電子時(shí)鐘包括:24時(shí)制的時(shí)間顯示、日期顯示、星期顯示,并具有調(diào)時(shí)、整點(diǎn)報(bào)時(shí)和鬧鐘功能。</p><p>  3. 定時(shí)器可以進(jìn)行 0~9999秒的定時(shí),中途可以暫停,繼續(xù)和停止,定

9、時(shí)結(jié)束會(huì)自動(dòng)提醒。</p><p>  4. 秒表要求最大精度為0.01s,并且有暫停、繼續(xù)、重置按鈕</p><p><b>  進(jìn)度安排和任務(wù)分工</b></p><p><b>  1. 任務(wù)分工</b></p><p><b>  確定方案</b></p>

10、<p><b>  模塊及模塊接口確定</b></p><p><b>  任務(wù)分工</b></p><p><b>  程序編寫</b></p><p><b>  各自仿真實(shí)現(xiàn)</b></p><p><b>  整體調(diào)試<

11、/b></p><p><b>  整體仿真</b></p><p><b>  后期修改調(diào)整</b></p><p><b>  2. 進(jìn)度安排</b></p><p>  按模塊分工,以模塊難易程度均勻分工,力保成員都能真正參與到設(shè)計(jì)中來,拒絕打醬油</p>

12、;<p>  14周確定題目 15周做題目報(bào)告 </p><p><b>  期末前分工</b></p><p><b>  假期編寫各自模塊</b></p><p>  返校進(jìn)去整合以及后期處理</p><p><b>  設(shè)計(jì)環(huán)境</b></p>

13、<p>  Quartus軟件,基于EP2C5T144C8芯片的開發(fā)板。</p><p><b>  整體設(shè)計(jì)</b></p><p>  (有QuartusII RTL Viewer工具生成)</p><p><b>  設(shè)計(jì)模塊分析</b></p><p>  1. LCD1602液

14、晶顯示時(shí)鐘脈沖模塊</p><p>  本實(shí)驗(yàn)采用LCD1602液晶來顯示。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每

15、行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。</p><p><b> ?。▓D片來源于網(wǎng)絡(luò))</b></p><p>  用于將實(shí)驗(yàn)板上的50MHz的信號(hào)分頻成為,適合于液晶顯示的時(shí)鐘頻率,經(jīng)過實(shí)驗(yàn)的測(cè)試以及查閱相關(guān)的資料,1602的時(shí)鐘可用周期為5ms的信號(hào),產(chǎn)生的信號(hào)適合于液晶顯示的正常工作。</p><p>  分頻器代碼實(shí)現(xiàn)如下:</

16、p><p>  PROCESS(clk)</p><p>  VARIABLE clk_out : std_logic := '0';</p><p><b>  BEGIN</b></p><p>  IF clk'event AND clk = '1' THEN</p>

17、<p>  count <= count + 1;--脈沖信號(hào)的累計(jì)</p><p>  IF count = 124999 THEN</p><p>  clk_out := NOT clk_out;</p><p><b>  END IF;</b></p><p>  clk_l

18、cd <= clk_out;</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  2. 按鍵控制功能以及時(shí)間校準(zhǔn)模塊</p><p>  通過實(shí)驗(yàn)板上的4個(gè)按鍵實(shí)現(xiàn)多功能電子計(jì)時(shí)器的功能選擇,以及相應(yīng)的時(shí)鐘的調(diào)校、鬧鐘的設(shè)定、鬧鐘的停止開啟、定時(shí)器的

19、設(shè)定和秒表的控制。</p><p>  其實(shí)現(xiàn)在于按鍵的輸入,經(jīng)過key1_reg2、key1_reg1,兩個(gè)中間信號(hào)的消抖,從而正確的讀取按鍵的變換,從而進(jìn)行相應(yīng)的操作改變。</p><p><b>  代碼實(shí)現(xiàn):</b></p><p>  PROCESS(clk)</p><p>  VARIABLE count

20、: integer RANGE 0 TO 500000;</p><p><b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN</p><p>  count := count + 1;</p><p>  IF(count = 500000) THEN</p>

21、<p>  count := 0;</p><p>  key1_reg1<=key1;</p><p>  key2_reg1<=key2;</p><p>  key3_reg1<=key3;</p><p>  key4_reg1<=key4;</p><p><b&g

22、t;  END IF;</b></p><p>  key1_reg2<=key1_reg1;</p><p>  key2_reg2<=key2_reg1;</p><p>  key3_reg2<=key3_reg1;</p><p>  key4_reg2<=key4_reg1;</p>

23、<p>  key1_out<=key1_reg2 AND (NOT key1_reg1); --消抖</p><p>  key2_out<=key2_reg2 AND (NOT key2_reg1);</p><p>  key3_out<=key3_reg2 AND (NOT key3_reg1);</p><p>  key4

24、_out<=key4_reg2 AND (NOT key4_reg1);</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  3. 功能模式選擇模塊</p><p>  通過一個(gè)按鍵的多次按下,用flag作為標(biāo)志位,通過flag的累加分別執(zhí)行0、1、

25、2、3,,分別對(duì)應(yīng)的時(shí)間顯示,鬧鐘,秒表,定時(shí)器。</p><p><b>  代碼實(shí)現(xiàn):</b></p><p>  PROCESS(clk)</p><p><b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN</p><p&g

26、t;  IF(key='1') THEN</p><p>  flag <= flag + 1; --flag的累加分別對(duì)因不同的功能顯示</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END

27、PROCESS;</p><p>  PROCESS(clk)</p><p><b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN</p><p>  CASE flag IS--用case語句分別根據(jù)flag進(jìn)入不同的功能</p><p>

28、  WHEN 0 => mode_out <= "1000";</p><p>  WHEN 1 => mode_out <= "0100";</p><p>  WHEN 2 => mode_out <= "0010";</p><p>  WHEN 3 => m

29、ode_out <= "0001";</p><p><b>  END CASE;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p><b>  時(shí)間+萬年歷模塊</b><

30、/p><p>  整個(gè)模塊共有六個(gè)進(jìn)程:分別是調(diào)校時(shí)間的閃爍進(jìn)程、時(shí)間日期輸出進(jìn)程、時(shí)鐘萬年歷邏輯進(jìn)程、鬧鐘進(jìn)程、鬧鈴進(jìn)程、鬧鐘設(shè)置進(jìn)程。</p><p>  閃爍進(jìn)程,通過標(biāo)志位的scan_flag的取反,進(jìn)行顯示和不顯示的切換,從而達(dá)到閃爍的效果。</p><p>  時(shí)間日期輸出進(jìn)程,通過各自時(shí)間日期的temp信號(hào)的改變,賦予相應(yīng)的輸出管教,來顯示時(shí)間同時(shí)時(shí)間的計(jì)

31、時(shí)。</p><p>  時(shí)鐘萬年歷邏輯進(jìn)程,即時(shí)間24時(shí)制的VHDL邏輯表示以及萬年歷中關(guān)于月份閏年不閏年的邏輯關(guān)系。</p><p>  鬧鐘進(jìn)程:通過IF語句判斷當(dāng)前時(shí)間是否為設(shè)定的時(shí)間,盡在鬧鐘打開以及時(shí)間到達(dá)的時(shí)候才起作用,從而設(shè)置鬧鈴標(biāo)志位。</p><p>  鬧鈴進(jìn)程:控制鬧鈴的響起。</p><p>  鬧鐘設(shè)置進(jìn)程:進(jìn)行鬧

32、鐘的設(shè)定。</p><p>  實(shí)現(xiàn)代碼:見附錄1。</p><p><b>  5. 秒表模塊</b></p><p>  此模塊共有三個(gè)進(jìn)程,分別為顯示時(shí)間進(jìn)程、秒表計(jì)時(shí)進(jìn)程和秒表控制進(jìn)程。</p><p>  顯示時(shí)間進(jìn)程:同時(shí)間顯示進(jìn)程。</p><p>  秒表計(jì)時(shí)進(jìn)程:通過最小精度毫

33、秒計(jì)時(shí),來進(jìn)行最高99:99.99的計(jì)時(shí),該進(jìn)程實(shí)現(xiàn)了秒表的內(nèi)部實(shí)現(xiàn)邏輯。</p><p>  秒表控制進(jìn)程:通過狀態(tài)機(jī)控制復(fù)位、停止、計(jì)時(shí),暫停的不同狀態(tài),來實(shí)現(xiàn)對(duì)于秒表的控制。</p><p><b>  ASM圖:</b></p><p>  實(shí)現(xiàn)代碼:見附錄2。</p><p><b>  6. 定時(shí)器

34、模塊</b></p><p>  本模塊利用狀態(tài)機(jī),用flag,分別來控制定時(shí)設(shè)置、定時(shí)、暫停繼續(xù)、停止</p><p><b>  ASM圖:</b></p><p>  實(shí)現(xiàn)代碼:見附錄3。</p><p><b>  7. 三路選通器</b></p><p>

35、;  根據(jù)模式選擇模塊的選擇,選通不同的顯示內(nèi)容,實(shí)現(xiàn)時(shí)間、定時(shí)器以及秒表的分別顯示。</p><p><b>  代碼實(shí)現(xiàn):</b></p><p>  PROCESS(clk)</p><p><b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN&

36、lt;/p><p>  IF key0='1' OR key1='1' THEN</p><p>  DO0 <= DI0;</p><p>  DO1 <= DI1;</p><p>  DO2 <= DI2;</p><p>  DO3 <= DI3;</p

37、><p>  DO4 <= DI4;</p><p>  DO5 <= DI5;</p><p>  DO6 <= DI6;</p><p>  DO7 <= DI7;</p><p>  DO8 <= DI8;</p><p>  DO9 <= DI9;<

38、/p><p>  DO10 <= DI10;</p><p>  DO11 <= DI11;</p><p>  DO12 <= DI12;</p><p>  ELSIF key2='1' THEN</p><p>  DO0 <= DII0;</p><p&g

39、t;  DO1 <= DII1;</p><p>  DO2 <= DII2;</p><p>  DO3 <= DII3;</p><p>  DO4 <= DII4;</p><p>  DO5 <= DII5;</p><p>  DO6 <= DII6;</p>

40、<p>  DO7 <= DII7;</p><p>  DO8 <= DII8;</p><p>  DO9 <= DII9;</p><p>  DO10 <= DII10;</p><p>  DO11 <= DII11;</p><p>  DO12 <= DII

41、12;</p><p><b>  ELSE</b></p><p>  DO0 <= DIII0;</p><p>  DO1 <= DIII1;</p><p>  DO2 <= DIII2;</p><p>  DO3 <= DIII3;</p><

42、;p>  DO4 <= DIII4;</p><p>  DO5 <= DIII5;</p><p>  DO6 <= DIII6;</p><p>  DO7 <= DIII7;</p><p>  DO8 <= DIII8;</p><p>  DO9 <= DIII9;&

43、lt;/p><p>  DO10 <= DIII10;</p><p>  DO11 <= DIII11;</p><p>  DO12 <= DIII12;</p><p><b>  END IF;</b></p><p><b>  END IF;</b>

44、</p><p>  END PROCESS;</p><p>  8. LCD1602液晶顯示驅(qū)動(dòng)</p><p>  本模塊是有了狀態(tài)機(jī)的嵌套。先使用一個(gè)狀態(tài)機(jī)對(duì)1602進(jìn)行顯示模式,顯示的位置等各種屬性的設(shè)置,然后再在顯示內(nèi)容的地方再用一個(gè)狀態(tài)機(jī)來顯示時(shí)間日期等內(nèi)容。</p><p>  通過上面的設(shè)置和狀態(tài)機(jī)的搭配,達(dá)到了使用VHDL

45、對(duì)1602進(jìn)行驅(qū)動(dòng)的目的。</p><p>  代碼實(shí)現(xiàn):見附錄4。</p><p><b>  總體功能描述</b></p><p>  1. 顯示第一行固定為萬年歷的顯示,第二行則是功能顯示,默認(rèn)為時(shí)鐘;</p><p>  2. 功能切換由4個(gè)按鍵完成;</p><p>  3. 時(shí)鐘,鬧鈴

46、,秒表,定時(shí)器間的切換由key1完成,按該按鈕依次切換;</p><p>  4. 在時(shí)鐘狀態(tài)下,按key4進(jìn)行功能切換,按第一下時(shí)鐘停止運(yùn)行,隨著按key4,依次為年,月,日,星期,時(shí),分,秒的修改,修改狀態(tài)下,按key3為加,key2為減,key4為確定;</p><p>  5. 在鬧鈴狀態(tài)下,按下key4可以修改鬧鈴時(shí)間,依次為時(shí),分,鬧鈴開關(guān),key2,key3的功能同上,鬧鈴響

47、起時(shí),按key2停止;</p><p>  6. 在秒表狀態(tài)下,按下key4可暫停/開始的切換,key3停止,key2重置,僅在停止?fàn)顟B(tài)下才能進(jìn)行重置操作;</p><p>  7. 在定時(shí)器狀態(tài)下,按下key4可設(shè)定定時(shí)時(shí)間時(shí)長,最大時(shí)長為99:59:59,設(shè)定好以后,按key3可開始/暫停定時(shí),暫?;虻褂?jì)時(shí)結(jié)束狀態(tài)下,按key2可自動(dòng)重載為上次設(shè)定定時(shí)時(shí)間,定時(shí)結(jié)束后,會(huì)有鈴聲提示,按

48、key2鍵停止響聲。</p><p><b>  系統(tǒng)的仿真與調(diào)試</b></p><p>  因?yàn)閱为?dú)的模塊管腳過多,單個(gè)模塊無法編譯成功,故這次設(shè)計(jì)沒有在軟件上進(jìn)行仿真,調(diào)試全都在自己購買的學(xué)習(xí)板上完成。</p><p>  本次調(diào)試遇到的問題主要都是LCD1602上顯示的問題。譬如寫定時(shí)器的模塊時(shí),第一行的萬年歷顯示正常,第二行開頭的TI

49、MER也顯示正常,但后面的顯示卻出現(xiàn)亂碼。首先在程序上把后面的程序都改為某個(gè)字符的靜態(tài)輸出,下載到板子上以后發(fā)現(xiàn)顯示正常,便可確定是定時(shí)器運(yùn)行的進(jìn)程部分出現(xiàn)問題。第一次認(rèn)真看了內(nèi)部邏輯以后發(fā)現(xiàn)不到問題,然后便把內(nèi)部的東西都忽略了看外圍的代碼,最后發(fā)現(xiàn)漏寫時(shí)鐘的邊沿觸發(fā),添加后便能正常顯示。</p><p>  類似的調(diào)試方法在本次實(shí)踐中屢屢出現(xiàn),主要便歸結(jié)為:若是功能出現(xiàn)問題就檢查代碼的邏輯性,若是顯示問題,先把

50、出現(xiàn)問題部分改為靜態(tài)輸出,逐步找出問題根源,若無問題再檢查代碼的邏輯問題,從里到外找出癥結(jié)所在。</p><p><b>  總結(jié)</b></p><p>  本次課程設(shè)計(jì)選取的題目算不上困難,在這次設(shè)計(jì)過程中,主要是鍛煉對(duì)LCD1602的顯示功能自學(xué)能力,團(tuán)隊(duì)合作能力,并使自己的代碼寫得更規(guī)范。沿著設(shè)計(jì)的進(jìn)展,代碼條理性明顯加強(qiáng),縮進(jìn)等細(xì)節(jié)也逐漸形成了自己的風(fēng)格。&

51、lt;/p><p><b>  附錄:</b></p><p><b>  部分模塊代碼:</b></p><p><b>  時(shí)間萬年歷模塊代碼</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.std_logi

52、c_1164.ALL;</p><p>  USE IEEE.std_logic_unsigned.ALL;</p><p>  ENTITY clock IS</p><p><b>  PORT(</b></p><p>  clk_LCD : IN std_logic;</p><p>  

53、clk : IN std_logic;</p><p>  key1,key2,key3 : IN std_logic;</p><p>  C_sel,A_sel : IN std_logic;</p><p>  D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,D16,D17,D18,D19,D20,D

54、21,D22,D23:OUT std_logic_vector(7 DOWNTO 0);</p><p>  ring : OUT std_logic</p><p><b>  );</b></p><p>  END ENTITY;</p><p>  ARCHITECTURE behav OF clock IS&l

55、t;/p><p>  --時(shí)鐘,萬年歷部分</p><p>  CONSTANT MON : std_logic_vector(23 DOWNTO 0) := "010011010100111101001110";--周一到周日的ASCII碼</p><p>  CONSTANT TUE : std_logic_vector(23 DOWNTO 0

56、) := "010101000101010101000101";</p><p>  CONSTANT WED : std_logic_vector(23 DOWNTO 0) := "010101110100010101000100";</p><p>  CONSTANT THU : std_logic_vector(23 DOWNTO 0) :=

57、 "010101000100100001010101";</p><p>  CONSTANT FIR : std_logic_vector(23 DOWNTO 0) := "010001100100100101010010";</p><p>  CONSTANT SAT : std_logic_vector(23 DOWNTO 0) := &qu

58、ot;010100110100000101010100";</p><p>  CONSTANT SUN : std_logic_vector(23 DOWNTO 0) := "010100110101010101001110";</p><p>  SIGNAL y1 :std_logic_vector(7 DOWNTO 0) := "001100

59、10";--日期,yyyy-mm-dd</p><p>  SIGNAL y2 :std_logic_vector(7 DOWNTO 0) := "00110000";</p><p>  SIGNAL y3 :std_logic_vector(7 DOWNTO 0) := "00110001";</p><p&g

60、t;  SIGNAL y4 :std_logic_vector(7 DOWNTO 0) := "00110011";</p><p>  SIGNAL month :std_logic_vector(15 DOWNTO 0) := "0011000000110010";</p><p>  SIGNAL date1 :std_logic_vector

61、(7 DOWNTO 0) := "00110010";</p><p>  SIGNAL date2 :std_logic_vector(7 DOWNTO 0) := "00111000";</p><p>  SIGNAL wd :std_logic_vector(23 DOWNTO 0) := "01010100010101010100

62、0101";--星期</p><p>  SIGNAL h1 : std_logic_vector(7 DOWNTO 0) := "00110010";-- 時(shí)間,hh:mm:ss</p><p>  SIGNAL h2 : std_logic_vector(7 DOWNTO 0) := "00110011";</p>

63、;<p>  SIGNAL m1 : std_logic_vector(7 DOWNTO 0) := "00110101";</p><p>  SIGNAL m2 : std_logic_vector(7 DOWNTO 0) := "00111001";</p><p>  SIGNAL s1 : std_logic_vector(7

64、 DOWNTO 0) := "00110101";</p><p>  SIGNAL s2 : std_logic_vector(7 DOWNTO 0) := "00110000";</p><p><b>  --顯示寄存器</b></p><p>  SIGNAL y1_temp :std_logi

65、c_vector(7 DOWNTO 0);--DAY</p><p>  SIGNAL y2_temp :std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL y3_temp :std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL y4_temp :std_logic_vector

66、(7 DOWNTO 0);</p><p>  SIGNAL month_temp :std_logic_vector(15 DOWNTO 0);</p><p>  SIGNAL date1_temp :std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL date2_temp :std_logic_vector(7 DOW

67、NTO 0);</p><p>  SIGNAL wd_temp :std_logic_vector(23 DOWNTO 0);--WEEKDAY</p><p>  SIGNAL h1_temp : std_logic_vector(7 DOWNTO 0);-- TIME</p><p>  SIGNAL h2_temp : std_logic_vec

68、tor(7 DOWNTO 0);</p><p>  SIGNAL m1_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL m2_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL s1_temp : std_logic_vector(7 DOWNTO

69、0);</p><p>  SIGNAL s2_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL wd_state : integer RANGE 0 TO 6 := 4;</p><p><b>  --鬧鐘部分信號(hào)</b></p><p>  CONSTANT

70、 r_on : std_logic_vector(23 DOWNTO 0) := "010011110100111000100000";</p><p>  CONSTANT r_off : std_logic_vector(23 DOWNTO 0) := "010011110100011001000110";</p><p>  SIGNAL A_

71、h1 : std_logic_vector(7 DOWNTO 0) := "00110000";--鬧鐘時(shí)間顯示</p><p>  SIGNAL A_h2 : std_logic_vector(7 DOWNTO 0) := "00110000";</p><p>  SIGNAL A_m1 : std_logic_vector(7 DOWN

72、TO 0) := "00110000";</p><p>  SIGNAL A_m2 : std_logic_vector(7 DOWNTO 0) := "00110000";</p><p>  SIGNAL A_h1_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL

73、 A_h2_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL A_m1_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL A_m2_temp : std_logic_vector(7 DOWNTO 0);</p><p>  SIGNAL r_stat

74、e : std_logic_vector(23 DOWNTO 0);--鬧鈴開關(guān)顯示</p><p>  SIGNAL scan_flag : std_logic;--產(chǎn)生閃爍的標(biāo)志</p><p>  SIGNAL C_flag : integer RANGE 0 TO 8 := 0;--時(shí)鐘狀態(tài)的標(biāo)志</p><p>  SIGNAL A_fla

75、g : integer RANGE 0 TO 3 := 0;--鬧鈴狀態(tài)的標(biāo)志</p><p>  SIGNAL r_flag : std_logic;--鬧鈴響,停的標(biāo)志</p><p>  SIGNAL r_SW : std_logic :='0';--鬧鈴開關(guān)的狀態(tài)位</p><p>  SIGNAL ring_temp :

76、 std_logic := '0';</p><p><b>  BEGIN</b></p><p>  PROCESS(clk)--產(chǎn)生調(diào)整時(shí)間時(shí)閃爍的標(biāo)志</p><p>  VARIABLE count : integer RANGE 0 TO 10000000 := 0;</p><p>&l

77、t;b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN</p><p>  count := count + 1;</p><p>  IF count = 10000000 THEN</p><p>  count := 0;</p><p>  sca

78、n_flag <= NOT scan_flag;</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(clk)--鬧鈴,時(shí)間顯示的狀態(tài)切換。</p&g

79、t;<p><b>  BEGIN</b></p><p>  IF rising_edge(clk) THEN</p><p>  IF key1='1' THEN</p><p>  IF C_sel='1' THEN</p><p>  IF C_flag = 8 TH

80、EN</p><p>  C_flag <= 0;</p><p><b>  ELSE</b></p><p>  C_flag <= C_flag + 1;</p><p><b>  END IF;</b></p><p>  ELSIF A_sel=

81、9;1' THEN</p><p>  IF A_flag = 3 THEN</p><p>  A_flag <= 0;</p><p><b>  ELSE</b></p><p>  A_flag <= A_flag + 1;</p><p><b>  END

82、 IF;</b></p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  P

83、ROCESS(clk_LCD)--輸出到LCD的進(jìn)程</p><p><b>  BEGIN</b></p><p>  IF clk_LCD'EVENT AND clk_LCD='1' THEN</p><p>  D0 <= y1_temp;</p><p>  D1 <= y2

84、_temp;</p><p>  D2 <= y3_temp;</p><p>  D3 <= y4_temp;</p><p>  D4 <= month_temp(15 DOWNTO 8);</p><p>  D5 <= month_temp(7 DOWNTO 0);</p><p>  

85、D6 <= date1_temp;</p><p>  D7 <= date2_temp;</p><p>  D8 <= wd_temp(23 DOWNTO 16);</p><p>  D9 <= wd_temp(15 DOWNTO 8);</p><p>  D10 <= wd_temp(7 DOWNTO

86、0);</p><p>  IF C_sel='1' THEN</p><p>  D11 <= "01000011";</p><p>  D12 <= "01001100";</p><p>  D13 <= "01001111";</p&

87、gt;<p>  D14 <= "01000011";</p><p>  D15 <= "01001011";</p><p>  D16 <= h1_temp;</p><p>  D17 <= h2_temp;</p><p>  D18 <= m1_t

88、emp;</p><p>  D19 <= m2_temp;</p><p>  D20 <= "00111010";</p><p>  D21 <= s1_temp;</p><p>  D22 <= s2_temp;</p><p>  D23 <= "

89、00100000";</p><p>  ELSIF A_sel='1' THEN</p><p>  D11 <= "01000001";</p><p>  D12 <= "01001100";</p><p>  D13 <= "0100000

90、1";</p><p>  D14 <= "01010010";</p><p>  D15 <= "01001101";</p><p>  D16 <= A_h1_temp;</p><p>  D17 <= A_h2_temp;</p><p&

91、gt;  D18 <= A_m1_temp;</p><p>  D19 <= A_m2_temp;</p><p>  D20 <= "00100000";</p><p>  D21 <= r_state(23 DOWNTO 16);</p><p>  D22 <= r_state(15

92、 DOWNTO 8);</p><p>  D23 <= r_state(7 DOWNTO 0);</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  

93、PROCESS(clk)--萬年歷,時(shí)鐘的調(diào)整與進(jìn)行</p><p>  VARIABLE year : INTEGER RANGE 0 TO 9999;</p><p>  VARIABLE count_1hz : integer RANGE 0 TO 50000000;</p><p><b>  BEGIN</b></p>

94、<p>  IF clk'EVENT AND clk='1' THEN</p><p>  year := CONV_INTEGER(y1-"00110000")*1000+CONV_INTEGER(y2-"00110000")*100+CONV_INTEGER(y3-"00110000")*10+CONV_INTE

95、GER(y4-"00110000");</p><p>  CASE C_flag IS</p><p><b>  WHEN 0 =></b></p><p>  count_1hz := count_1hz + 1;</p><p>  IF count_1hz = 50000000 THE

96、N</p><p>  count_1hz := 0;</p><p>  IF s2 >= "00111001" THEN</p><p>  s2 <= "00110000";</p><p>  IF s1 >= "00110101" THEN</p&g

97、t;<p>  s1 <= "00110000";</p><p>  IF m2 >= "00111001" THEN</p><p>  m2 <= "00110000";</p><p>  IF m1 >= "00110101" THEN&l

98、t;/p><p>  m1 <= "00110000";</p><p>  IF h1 <= "00110001" THEN</p><p>  IF h2 >= "00111001" THEN</p><p>  h2 <= "00110000&qu

99、ot;;</p><p>  h1 <= h1 + '1';</p><p><b>  ELSE</b></p><p>  h2 <= h2 + '1';</p><p><b>  END IF;</b></p><p>&l

100、t;b>  ELSE</b></p><p>  IF h2 >= "00110011" THEN</p><p>  h2 <= "00110000";</p><p>  h1 <= "00110000";</p><p>  wd_state

101、 <= wd_state + 1;</p><p>  IF month="0011000000110001" OR month="0011000000110011" OR month="0011000000110101" OR month="0011000000110111" OR month="0011000000

102、111000" OR month="0011000100110000" OR month="0011000100110010" THEN</p><p>  IF date1="00110011" AND date2="00110001" THEN</p><p>  date1 <= &quo

103、t;00110000";</p><p>  date2 <= "00110001";</p><p>  IF month = "0011000100110010" THEN</p><p>  month(15 DOWNTO 8) <= "00110000";</p>

104、<p>  month(7 DOWNTO 0) <= "00110001";</p><p>  IF y4="00111001" THEN</p><p>  y4 <= "00110000";</p><p>  IF y3="00111001" THEN&l

105、t;/p><p>  y3 <= "00110000";</p><p>  IF y2="00111001" THEN</p><p>  y2 <= "00110000";</p><p>  IF y1="00111001" THEN</p&g

106、t;<p>  y1 <= "00110000";</p><p><b>  ELSE</b></p><p>  y1 <= y1 + '1';</p><p><b>  END IF;</b></p><p><b> 

107、 ELSE</b></p><p>  y2 <= y2 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y3 <= y3 + '1';</p>

108、<p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y4 <= y4 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE<

109、;/b></p><p>  month(7 DOWNTO 0) <= month(7 DOWNTO 0) + '1';</p><p><b>  END IF;</b></p><p>  ELSIF date2="00111001" THEN</p><p>  da

110、te1 <= date1 + '1';</p><p>  date2 <= "00110000";</p><p><b>  ELSE</b></p><p>  date2 <= date2 + '1';</p><p><b>  E

111、ND IF;</b></p><p>  ELSIF month="0011000000110010" THEN</p><p>  IF ((year MOD 4 = 0) AND (NOT(year MOD 100 = 0))) OR (year MOD 400 = 0) THEN</p><p>  IF date1="

112、;00110010" AND date2="00111001" THEN</p><p>  date1 <= "00110000";</p><p>  date2 <= "00110001";</p><p>  month(7 DOWNTO 0) <= month(7 DO

113、WNTO 0) + '1';</p><p>  ELSIF date2="00111001" THEN</p><p>  date1 <= date1 + '1';</p><p>  date2 <= "00110000";</p><p><b&

114、gt;  ELSE</b></p><p>  date2 <= date2 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  IF date1="00110010"

115、; AND date2="00111000" THEN</p><p>  date1 <= "00110000";</p><p>  date2 <= "00110001";</p><p>  month(7 DOWNTO 0) <= month(7 DOWNTO 0) + '

116、;1';</p><p>  ELSIF date2="00111001" THEN</p><p>  date1 <= date1 + '1';</p><p>  date2 <= "00110000";</p><p><b>  ELSE</

117、b></p><p>  date2 <= date2 + '1';</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><

118、p>  IF date1="00110011" AND date2="00110000" THEN</p><p>  date1 <= "00110000";</p><p>  date2 <= "00110001";</p><p>  IF month = &q

119、uot;0011000000111001" THEN</p><p>  month(15 DOWNTO 8) <= month(15 DOWNTO 8) + '1';</p><p>  month(7 DOWNTO 0) <= "00110000";</p><p><b>  ELSE<

120、/b></p><p>  month(7 DOWNTO 0) <= month(7 DOWNTO 0) + '1';</p><p><b>  END IF;</b></p><p>  ELSIF date2="00111001" THEN</p><p>  dat

121、e1 <= date1 + '1';</p><p>  date2 <= "00110000";</p><p><b>  ELSE</b></p><p>  date2 <= date2 + '1';</p><p><b>  EN

122、D IF;</b></p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  h2 <= h2 + '1';</p><p><b>  END IF;</b></p>

123、<p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  m1 <= m1 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE<

124、;/b></p><p>  m2 <= m2 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  s1 <= s1 + '1';</p><p>

125、;<b>  END IF;</b></p><p><b>  ELSE</b></p><p>  s2 <= s2 + '1';</p><p><b>  END IF;</b></p><p><b>  END IF;</b&g

126、t;</p><p>  y1_temp <= y1;</p><p>  y2_temp <= y2;</p><p>  y3_temp <= y3;</p><p>  y4_temp <= y4;</p><p>  month_temp <= month;</p>

127、<p>  date1_temp <= date1;</p><p>  date2_temp <= date2;</p><p>  wd_temp <= wd;</p><p>  h1_temp <= h1;</p><p>  h2_temp <= h2;</p><p>

128、;  m1_temp <= m1;</p><p>  m2_temp <= m2;</p><p>  s1_temp <= s1;</p><p>  s2_temp <= s2;</p><p><b>  WHEN 1 =></b></p><p>  cou

129、nt_1hz := 0;</p><p>  WHEN 2 =>--SET year</p><p>  IF scan_flag='0' THEN</p><p>  count_1hz := 0;</p><p>  y1_temp <= "00100000";</p>&l

130、t;p>  y2_temp <= "00100000";</p><p>  y3_temp <= "00100000";</p><p>  y4_temp <= "00100000";</p><p><b>  ELSE</b></p>&l

131、t;p>  count_1hz := 0;</p><p>  y1_temp <= y1;</p><p>  y2_temp <= y2;</p><p>  y3_temp <= y3;</p><p>  y4_temp <= y4;</p><p><b>  END

132、IF;</b></p><p>  IF key2='1' THEN--INCREASE</p><p>  IF y4 >= "00111001" THEN</p><p>  y4 <= "00110000";</p><p>  IF y3 >= &

133、quot;00111001" THEN</p><p>  y3 <= "00110000";</p><p>  IF y2 = "00111001" THEN</p><p>  y2 <= "00110000";</p><p>  IF y1 = &qu

134、ot;00111001" THEN</p><p>  y1 <= "00110000";</p><p><b>  ELSE</b></p><p>  y1 <= y1 + '1';</p><p><b>  END IF;</b>&

135、lt;/p><p><b>  ELSE</b></p><p>  y2 <= y2 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y3 <=

136、 y3 + '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y4 <= y4 + '1';</p><p><b>  END IF;</b></p>

137、;<p>  ELSIF key3='1' THEN--DECREASE</p><p>  IF y4 = "00110000" THEN</p><p>  y4 <= "00111001";</p><p>  IF y3 = "00110000" THEN<

138、;/p><p>  y3 <= "00111001";</p><p>  IF y2 = "00110000" THEN</p><p>  y2 <= "00111001";</p><p>  IF y1 = "00110000" THEN</

139、p><p>  y1 <= "00111001";</p><p><b>  ELSE</b></p><p>  y1 <= y1 - '1';</p><p><b>  END IF;</b></p><p><b&g

140、t;  ELSE</b></p><p>  y2 <= y2 - '1';</p><p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y3 <= y3 - '1';</p>

141、;<p><b>  END IF;</b></p><p><b>  ELSE</b></p><p>  y4 <= y4 - '1';</p><p><b>  END IF;</b></p><p><b>  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. 眾賞文庫僅提供信息存儲(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)論