eda課程設(shè)計(jì)---微波爐定時(shí)控制器_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  一、設(shè)計(jì)題目和要求-----------------------------------------------------------------2</p><p>  二、設(shè)計(jì)思路-------------------------------------------------------------

2、-------------2</p><p>  三、單元模塊設(shè)計(jì)--------------------------------------------------------------------3</p><p>  -----------------------------------------------------------------------------------

3、---------8</p><p>  3.1、FENPIN模塊設(shè)計(jì)-----------------------------------------------------(3,4)</p><p>  3.2、FIRST模塊設(shè)計(jì)------------------------------------------------------(4,5)</p><p>

4、;  3.3、JIANJISHU模塊設(shè)計(jì)------------------------------------------------(5,6)</p><p>  3.4、CHOICE和VIEW模塊設(shè)計(jì)------------------------------------------(7,8)</p><p>  四、硬件實(shí)驗(yàn)-----------------------------

5、----------------------------------------------8</p><p>  五、心得體會(huì)---------------------------------------------------------------------------9</p><p>  附頁:程序代碼--------------------------------------

6、----------------------------------10</p><p>  ---------------------------------------------------------------------------------------------17</p><p><b>  一、設(shè)計(jì)題目和要求</b></p><

7、;p>  設(shè)計(jì)題目為:微波爐定時(shí)控制器</p><p>  要求:1、復(fù)位開關(guān):</p><p><b>  啟動(dòng)開關(guān): </b></p><p><b>  烹調(diào)時(shí)間設(shè)置: </b></p><p><b>  烹調(diào)時(shí)間顯示:</b></p><p&

8、gt;<b>  七段碼測試:</b></p><p><b>  啟動(dòng)輸出:</b></p><p>  按TEST鍵可以測試七段碼管,顯示為“8888”;</p><p>  設(shè)定時(shí)間后,按啟動(dòng)鍵開始烹調(diào),同時(shí)七段碼顯示剩余時(shí)間,時(shí)間為0時(shí),顯示烹調(diào)完成信息“CDEF”</p><p><

9、b>  二、設(shè)計(jì)思路</b></p><p>  A.先有一個(gè)大概的模塊話設(shè)計(jì),就如下圖:</p><p>  預(yù)設(shè)初值 倒計(jì)時(shí)減計(jì)數(shù) 輸出數(shù)據(jù)</p><p>  B:再在上面大模塊的基礎(chǔ)上進(jìn)行改進(jìn)</p><p><b>  增加復(fù)位端和測試端</b><

10、/p><p><b>  復(fù)位輸出數(shù)據(jù)</b></p><p>  預(yù)設(shè) 倒計(jì)時(shí) 實(shí)現(xiàn)閃爍</p><p>  初值 減計(jì)數(shù)</p><p><b>  測試</b></p><p>  C:具體的設(shè)計(jì)過程:</p><p>

11、;  1、剛開始設(shè)計(jì)是先完成了FENPIN模塊的設(shè)計(jì),因?yàn)檫@個(gè)模塊比較簡單。</p><p>  2、然后是對設(shè)初值大模塊的設(shè)計(jì),在這一部分的設(shè)計(jì)遇到兩方案:</p><p> ?。?)設(shè)計(jì)四個(gè)按鈕的初始話模塊,四個(gè)按鈕分別控制秒,十秒,分,十分4個(gè)數(shù)值的初始化加;</p><p> ?。?)設(shè)計(jì)兩個(gè)按鈕的初始化模塊,兩個(gè)按鈕分別提供一個(gè)移位信號和一個(gè)加信號;<

12、;/p><p>  兩個(gè)方案都用了一下,發(fā)現(xiàn)還好是2號方案比較好,不僅程序上比較簡單而且省了很多按鈕的使用,比較符合實(shí)際應(yīng)用的要求;</p><p>  3、在完成了初始話模塊的設(shè)計(jì)之后,接下來就是減計(jì)數(shù)模塊的設(shè)計(jì),只要把由初始化模塊所提供的數(shù)據(jù)進(jìn)行減計(jì)數(shù)即可;</p><p>  4、在完成以上三個(gè)模塊時(shí),程序的已經(jīng)初見雛形了,然后把這三個(gè)模塊連接起來,添加上復(fù)位和測

13、試按鈕就可以了;</p><p>  5、用動(dòng)態(tài)掃描的方法隊(duì)數(shù)據(jù)進(jìn)行輸出,其中在輸入數(shù)據(jù)是使相應(yīng)的數(shù)據(jù)進(jìn)行閃爍。</p><p><b>  三.單元模塊設(shè)計(jì)</b></p><p>  單元模塊設(shè)計(jì)部分主要有4部分組成:</p><p> ?。ㄒ唬?、FENPIN模塊,用于給后面的JIANJISHU模塊和VIEW模塊提供

14、合適的頻率。</p><p> ?。ǘ?、FIRST模塊,用于設(shè)定微波爐的初試時(shí)間而用。</p><p> ?。ㄈ?、JIANJISHU模塊,配合FENPIN模塊提供的時(shí)鐘頻率實(shí)現(xiàn)每秒減一的計(jì)數(shù)。</p><p> ?。ㄋ模?、CHOICE模塊和VIEW模塊,利用動(dòng)態(tài)掃描的方法顯出對應(yīng)數(shù)字。</p><p>  3.1 FENPIN模塊的設(shè)計(jì)&

15、lt;/p><p>  FENPIN模塊主要利用1Khz的時(shí)鐘信號進(jìn)行分頻。得到1s的outlck時(shí)鐘信號(用于后期JIANJISHU模塊的使用)和0.5s的screen的時(shí)鐘信號(用于VIEW的顯示閃爍使用)。</p><p>  說明:試驗(yàn)箱上有1Khz,2Khz等多個(gè)時(shí)鐘信號。而在這里采用1Khz的信號使用。1Khz/1000=1s,所以采用1Khz進(jìn)行千分頻得到1s的信號。</p

16、><p><b>  實(shí)驗(yàn)波形圖:</b></p><p>  每秒產(chǎn)生一個(gè)時(shí)鐘脈沖</p><p> ?。ǔ绦虼a見附錄。)</p><p>  Move此時(shí)數(shù)碼管有輸出</p><p>  Move選中時(shí)數(shù)碼管無輸出</p><p>  3.2 FIRST模塊設(shè)計(jì)<

17、/p><p>  FIRST模塊主要用于對時(shí)間設(shè)定初始值而用,其中設(shè)有ABLE和CLK兩時(shí)鐘信號,分別用于外接按鈕信號而用,其中CLK用于進(jìn)行加計(jì)數(shù),ABLE用于移位而用。輸出o1,o2,o3和o4分別是輸出秒,十秒,分,十分。而輸出o5是為VIEW實(shí)現(xiàn)閃爍而用的。其中的RES和TEST要配合JIANJISHU模塊中的RES和TEST同時(shí)控制才能有效(具體會(huì)在JIANJISHU模塊中詳細(xì)介紹)。</p>

18、<p>  說明:開始設(shè)計(jì)時(shí),由于沒有考慮全面設(shè)計(jì)了一個(gè)有4個(gè)按鍵分別控制秒,十秒,分,十分的方案,因?yàn)檎n設(shè)要接近與實(shí)際設(shè)計(jì),而實(shí)際不可能給予如此多的按鍵,這樣不僅占用大量空間而且產(chǎn)品也是非常的不美觀,所以之后就改成現(xiàn)在的由ABLE控制移位,再由CLK給予時(shí)鐘脈沖的方式進(jìn)行設(shè)計(jì),最后發(fā)現(xiàn)這樣的設(shè)計(jì)不僅沒有上述的缺點(diǎn)更加使我的程序變的更加的簡單。</p><p><b>  波形圖仿真: &

19、lt;/b></p><p>  每個(gè)上升沿都會(huì)進(jìn)行加計(jì)數(shù)</p><p>  當(dāng)res和test為零時(shí)輸出分別是“0000”和“8888”</p><p>  Able在每個(gè)脈沖到來是都會(huì)進(jìn)行移位,而o5正好顯示出正在加的位數(shù)</p><p>  注意:編寫此段代碼是要注意秒位和分位都是記從1記到9然后進(jìn)位自己變成0的,</p&

20、gt;<p>  而十秒位和十分位是記到5然后變成0的。</p><p><b> ?。ǔ绦虼a見附頁)</b></p><p>  3.3 JIANJISHU模塊的設(shè)計(jì)</p><p>  JIANJISHU模塊的主要用于對FIRST的數(shù)據(jù)進(jìn)行選擇性的處理和輸出:</p><p> ?。ㄒ唬?、當(dāng)JIANJ

21、ISHU模塊中的res=0時(shí),由于res作為輸入同樣也連接這FRIST模塊中</p><p>  的res,他們是由一個(gè)輸入共同控制的,所以此時(shí)輸出的就是“0000”;</p><p> ?。ǘ?、當(dāng)JIANJISHU模塊中的test=0時(shí),同res一樣的道理,此時(shí)輸出為“8888”;</p><p> ?。ㄈ?、當(dāng)q4=15(輸出為F)或start=0時(shí),LED就

22、不會(huì)亮了,表示工作完成或處</p><p>  于等待狀態(tài),此時(shí)不對FIRST模塊中的數(shù)據(jù)進(jìn)行任何處理就直接輸出;</p><p> ?。ㄋ模?、在以上條件都不滿足的情況下,若此時(shí)start=1,那么JIANJISHU模塊才</p><p>  開始了真正的工作狀態(tài),即配合FENPIN模塊中時(shí)鐘outclk開始每秒減一的記時(shí)計(jì)數(shù);</p><p&g

23、t;  本程序中復(fù)位鍵res和test的詳細(xì)說明:</p><p>  這里的res和test和模塊FRIST中的res和test是用同一個(gè)控制端,而且JIANJISHU的res和test是必不可少的。因?yàn)槊看芜M(jìn)行計(jì)數(shù)完后由于是利用信號進(jìn)行減計(jì)數(shù),在記完一次數(shù)之后q1,q2,q3和q4都會(huì)保持最后一次的狀態(tài),如果不及時(shí)清零的話,那么下一次的res,test以及加計(jì)數(shù)就是只能對前一級的輸入進(jìn)行復(fù)位和測試,輸出的將是

24、前一級的各個(gè)位數(shù)減去q1,q2,q3和q4的值,所以在JIANJISHU模塊中進(jìn)行清零是十分重要的。</p><p><b>  波形圖仿真:</b></p><p>  輸入初值為“0015”</p><p>  當(dāng)start=1時(shí)開始配合clks的始終上升沿開始減計(jì)數(shù)</p><p>  在各位都記到0時(shí),就數(shù)碼管就

25、會(huì)顯示 “FEDC”同時(shí)LED熄滅</p><p>  這就是上次提到的復(fù)位是清零了所有的中間信號,這樣輸出為FIRST中提供原始數(shù)據(jù)</p><p><b> ?。ǔ绦虼a見附頁)</b></p><p>  3.4 CHOICE模塊和VIEW模塊</p><p>  CHOICE模塊和VIEW模塊必須放在一起進(jìn)行使用

26、,CHOICE模塊是進(jìn)行數(shù)據(jù)選則而使用的,VIEW模塊是用于在相應(yīng)的為進(jìn)行輸出對應(yīng)的數(shù),兩者和起來就是一個(gè)動(dòng)態(tài)掃描的過程。</p><p>  A:CHOICE模塊;</p><p>  說明:這里的clk時(shí)鐘信號是使用和FENPIN模塊中一樣的時(shí)鐘信號(1Khz),因?yàn)槿?lt;/p><p>  的眼睛對時(shí)間的分辨為20個(gè)微秒,用1Khz的信號完全能滿足這樣的要求;要

27、注意CHOICE有兩個(gè)輸出,o2顯然輸出的是對應(yīng)的數(shù)據(jù)信號,而o1要輸出的是一個(gè)位選信號,是為下一個(gè)模塊VIEW顯示而用。</p><p><b>  B:VIEW模塊;</b></p><p>  說明:f1是接受位信號用的,f2是接受數(shù)據(jù)而用的。</p><p>  詳細(xì)說明一下screen和able的作用:</p><

28、p>  Screen是有FENPIN模塊通過對時(shí)鐘信號分頻得到的,當(dāng)在模塊FRIST選中某一</p><p>  進(jìn)行加數(shù)初始化是,VIEW就可以在時(shí)鐘screen在為1是正常輸出able所指的那位,</p><p>  當(dāng)screen為0時(shí),able所指的那位不能對應(yīng)輸出,這樣就能達(dá)到讓相應(yīng)的數(shù)碼管閃爍</p><p><b>  的效果。<

29、/b></p><p><b>  波形圖:</b></p><p> ?。?程序代碼見附頁)</p><p><b>  四.硬件實(shí)驗(yàn)</b></p><p><b>  管腳設(shè)置</b></p><p>  注釋:Clk1:選用的是1Khz的信

30、號;</p><p>  Clk2,Move,Rest,Testt:選用的是按鈕信號;</p><p>  Startt:使用的是開關(guān)信號;</p><p>  Lighto:LED輸出;</p><p><b>  五、心得體會(huì)</b></p><p>  這次我獨(dú)立完成了一次完整的程序設(shè)計(jì),在

31、整個(gè)的設(shè)計(jì)過程中我感覺我的動(dòng)手能力得到了比較高的提高吧,學(xué)了的東西如果連這么一個(gè)比較簡單的課設(shè)都不能完成的話我感覺是比較羞愧的一件事情。</p><p>  在整個(gè)的設(shè)計(jì)過程中現(xiàn)在回頭好好回想一下我覺得還是有很多不足的,做任何事情起步的時(shí)候就應(yīng)該有一個(gè)全局觀,但是剛開始由于我沒有考慮完全,在FIRST模塊種設(shè)計(jì)了有四個(gè)按鍵控制的初始化程序,之后發(fā)現(xiàn)這樣不僅程序非常的繁瑣,而且這種課設(shè)應(yīng)該和實(shí)際好好聯(lián)系一下,有誰家

32、的微波爐就光是剛開始設(shè)定初值都有這么多按鈕,那么不僅難看而且比較耗資源,使用也不是最方便的,所以之后經(jīng)過分析后選擇了現(xiàn)在使用的由兩個(gè)按鈕就能事先數(shù)據(jù)初始化的功能。因此在以后的設(shè)計(jì)工作中也要學(xué)會(huì)有大局觀。</p><p>  同是在編寫復(fù)位和測試兩個(gè)按鍵的功能是遇到了比較大的麻煩,總是輸出一些莫名其妙的數(shù)據(jù),之后發(fā)現(xiàn)是由于在JIANJISHU模塊的中的中間信號沒有清零而導(dǎo)致的,這樣的一個(gè)遇到困難然后去解決這個(gè)問題的

33、過程讓我對中間信號有了比較深刻的理解。</p><p>  在完成大半個(gè)程序之后,我發(fā)現(xiàn)在初始化數(shù)據(jù)的時(shí)候沒有任何的提示是在對哪以為進(jìn)行加,所以就去請教了老師,以老師的方案就是用一個(gè)時(shí)間較長的時(shí)鐘信號對輸出數(shù)碼管的管腳進(jìn)行或操作(數(shù)碼管是共陰),當(dāng)時(shí)我嫌這么方法寫的代碼比較長,所以我就嘗試了一下在輸出數(shù)碼管的位選上做文章,用這個(gè)較長的時(shí)鐘信號和位信號進(jìn)行位操作,這樣可以實(shí)現(xiàn)閃爍,但是在時(shí)鐘信號為’1’時(shí)輸入的位信

34、號是“111”,由于實(shí)驗(yàn)箱上的數(shù)碼管都進(jìn)行了引腳的鎖定,所以會(huì)讓第8個(gè)數(shù)碼管點(diǎn)亮,所以這個(gè)方案宣告失敗,最后就采用了現(xiàn)程序使用的方法,和老師的差不多,寫起來也比較方便。</p><p>  總的來說這樣的課程設(shè)計(jì)比上課有意思多了,在實(shí)際中還是有很多不是在課本上能學(xué)的到的東西,這個(gè)需要自己去理解,去總結(jié)的。</p><p><b>  附頁:</b></p>

35、<p>  ————————————微波爐定時(shí)控制器程序代碼————————————</p><p>  第一部分:TOP(頂層文件)</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsig

36、ned.all;</p><p>  entity top is</p><p>  port(rest,clk1,clk2,move,startt,testt:in std_logic;</p><p>  lighto:out std_logic;</p><p>  sel:out std_logic_vector(2 downto 0

37、);</p><p>  seg:out std_logic_vector(7 downto 0));</p><p><b>  end;</b></p><p>  architecture three of top is</p><p>  component fenpin is</p><p&

38、gt;  port(clk:in std_logic; 分頻</p><p>  outclk,screen:out std_logic);</p><p>  end component;</p><p>  component first is</p><p>  port(clk,able,res,tes

39、t:in std_logic; 初始化數(shù)據(jù)</p><p>  o1,o2,o3,o4,o5:out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component jianjishu is</p><p>  

40、port(clks,start,res,test:in std_logic;</p><p>  in1,in2,in3,in4:in std_logic_vector(3 downto 0); 減計(jì)數(shù)</p><p>  light:out std_logic;</p><p>  out1,out2,out3,out4:out std_logi

41、c_vector(3 downto 0));</p><p>  end component;</p><p>  component choice is</p><p>  port(clk:std_logic;</p><p>  f1,f2,f3,f4:in std_logic_vector(3 downto 0);</p>

42、<p>  o1:out std_logic_vector(1 downto 0); 位選</p><p>  o2:out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component view is</p><p&g

43、t;  port(screen:in std_logic;</p><p>  f1:in std_logic_vector(1 downto 0);</p><p>  f2,able:in std_logic_vector(3 downto 0); 顯示輸出</p><p>  segout:out std_logic_vector(7 down

44、to 0);</p><p>  selout:out std_logic_vector(2 downto 0));</p><p>  end component;</p><p>  signal b,c,d,e,f,g,h,i,j:std_logic_vector(3 downto 0);</p><p>  signal a,k:st

45、d_logic;</p><p>  signal q:std_logic_vector(1 downto 0);</p><p>  signal p:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  u1: fenpin port map

46、(clk=>clk1,outclk=>a,screen=>k);</p><p>  u2: first port map (clk=>clk2,res=>rest,test=>testt,able=>move,</p><p>  o1=>b,o2=>c,o3=>d,o4=>e,o5=>j);</p>

47、<p>  u3:jianjishu port map (clks=>a,start=>startt,res=>rest,test=>testt,in1=>b,in2=>c,</p><p>  in3=>d,in4=>e,light=>lighto,out1=>f,out2=>g,out3=>h,out4=>i);<

48、/p><p>  u4:choice port map (clk=>clk1,f1=>f,f2=>g,f3=>h,f4=>i,o1=>q,o2=>p);</p><p>  u5:view port map (able=>j,screen=>k,f1=>q,f2=>p,segout=>seg,selout=>

49、sel);</p><p><b>  end;</b></p><p>  ————————————————————————————————————</p><p>  第二部分:FENPIN(時(shí)鐘分頻)</p><p>  library ieee;</p><p>  use ieee.st

50、d_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity fenpin is</p><p>  port(clk:in std_logic;</p><p>  outclk,screen:out std_logic);</p>

51、<p><b>  end;</b></p><p>  architecture first of fenpin is</p><p>  signal Q1,Q2:std_logic;</p><p><b>  begin</b></p><p>  one:process(clk)

52、</p><p>  variable count1:integer range 0 to 1002;</p><p><b>  begin</b></p><p><b>  Q1<='0';</b></p><p>  if count1>1000 then Q1&

53、lt;='1';count1:=0;</p><p>  elsif clk'event and clk='1' then count1:=count1+1; 分出1秒信號</p><p><b>  end if;</b></p><p>  end process;</p>

54、<p>  two:process(clk)</p><p>  variable count2:integer range 0 to 500;</p><p><b>  begin</b></p><p>  if clk'event and clk='1' then </p><p&

55、gt;  if count2<250 then Q2<='1';count2:=count2+1;</p><p>  else Q2<='0';count2:=count2+1; 閃爍信號</p><p><b>  end if;</b></p><p><

56、;b>  end if;</b></p><p>  if count2>499 then count2:=0;</p><p><b>  end if;</b></p><p>  end process;</p><p>  outclk<=Q1;</p><p&g

57、t;  screen<=Q2;</p><p><b>  end; </b></p><p>  第三部分:FIRST(數(shù)據(jù)初始化)</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use

58、 ieee.std_logic_unsigned.all;</p><p>  entity first is</p><p>  port(clk,able,res,test:in std_logic;</p><p>  o1,o2,o3,o4,o5:out std_logic_vector(3 downto 0));</p><p>&

59、lt;b>  end;</b></p><p>  architecture two of first is</p><p>  signal q1,q2,q3,q4,q5:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  p

60、rocess(able)</p><p><b>  begin</b></p><p>  if able'event and able='1' then </p><p>  if q5<4 then q5<=q5+1; 位選信號,選擇相應(yīng)的位進(jìn)行初始</p><p&g

61、t;  else q5<="0000"; 化,其中“0000”為空位。</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process; </p><p>  p

62、rocess(clk,res,test,q4)</p><p><b>  begin</b></p><p>  if res='0' then q1<="0000";q2<="0000";q3<="0000";q4<="0000"; --復(fù)位

63、鍵</p><p>  elsif test='0' then q1<="1000";q2<="1000";q3<="1000";q4<="1000"; --測試鍵</p><p>  elsif clk'event and clk='1' th

64、en </p><p>  case q5 is</p><p>  when "0001"=> if q1<9 then q1<=q1+1;</p><p>  else q1<="0000"; 秒位加數(shù)</p><p><b>  end if;&

65、lt;/b></p><p>  when "0010"=> if q2<5 then q2<=q2+1;</p><p>  else q2<="0000"; 十秒位加數(shù)</p><p><b>  end if;</b></p><p&

66、gt;  when "0011"=> if q3<9 then q3<=q3+1;</p><p>  else q3<="0000"; 分位加數(shù)</p><p><b>  end if;</b></p><p>  when "0100"=&

67、gt; if q4<5 then q4<=q4+1;</p><p>  else q4<="0000"; 十分位加數(shù)</p><p><b>  end if;</b></p><p>  when others=>null;</p><p><b>

68、;  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  o1<=q1;</b></p><p><b>  o2<=q2;</b></p>

69、<p><b>  o3<=q3;</b></p><p><b>  o4<=q4;</b></p><p>  o5<=q5; --在VIEW模塊中選擇閃爍位</p><p><b>  end;</b>

70、;</p><p>  ————————————————————————————————————</p><p>  第四部分:JIANJISHU(數(shù)據(jù)按秒倒計(jì)時(shí))</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use

71、ieee.std_logic_unsigned.all;</p><p>  entity jianjishu is</p><p>  port(clks,start,res,test:in std_logic;</p><p>  in1,in2,in3,in4:in std_logic_vector(3 downto 0);</p><p&

72、gt;  light:out std_logic;</p><p>  out1,out2,out3,out4:out std_logic_vector(3 downto 0));</p><p><b>  end;</b></p><p>  architecture one of jianjishu is</p><p

73、>  signal q1,q2,q3,q4:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  process(start,clks,res,test,q4)</p><p>  variable a:std_logic_vector(1 downto 0);

74、</p><p><b>  begin</b></p><p>  if res='0' or test='0' then q1<="0000";q2<="0000";q3<="0000";q4<="0000";</p&

75、gt;<p>  --對信號都清零設(shè)置</p><p>  elsif q4=(in4-15) or start='0' then a:="00";light<='0'; </p><p>  --當(dāng)q4=15或start=0時(shí)不進(jìn)行減計(jì)數(shù),同時(shí)LED不亮</p><p>  elsif

76、start='1' then a:="11";light<='1';</p><p>  --當(dāng)start=1時(shí)LED點(diǎn)亮同時(shí)開始倒計(jì)時(shí)</p><p><b>  case a is</b></p><p>  when "11"=>if clks'e

77、vent and clks='1' then</p><p>  if (in1-q1)=0 then q1<=(in1-9);q2<=q2+1;</p><p>  else q1<=q1+1;</p><p><b>  end if;</b></p><p>  --q1開始為0,

78、當(dāng)q1=in1時(shí),對q1賦值為(in1-9),為負(fù)數(shù),</p><p>  同時(shí)對q2進(jìn)行加1,那么(in2-q2)就可以視線減1,若不是那么q1<=q1+1,可以實(shí)現(xiàn)</p><p> ?。╥n1-q1)從9開始的倒計(jì)數(shù)</p><p>  if (in2-q2)=0 and (in1-q1)=0 then </p><p>  q3

79、<=q3+1;q2<=(in2-5);q1<=(in1-9);</p><p><b>  end if;</b></p><p>  --當(dāng)輸出out1=0和out2=0時(shí)進(jìn)位減1,同時(shí)out1=9,out2=5;</p><p>  if (in3-q3)=0 and (in2-q2)=0 and (in1-q1)=0 t

80、hen</p><p>  q4<=q4+1;q3<=(in3-9);q2<=(in2-5);q1<=(in1-9);</p><p><b>  end if;</b></p><p>  if (in4-q4)=0 and (in3-q3)=0 and (in2-q2)=0 and (in1-q1)=0 </p

81、><p>  thenq4<=(in4-15);q3<=(in3-14);q2<=(in2-13);q1<=(in1-12);</p><p><b>  end if;</b></p><p>  --當(dāng)所有計(jì)數(shù)完畢(都為0)時(shí),實(shí)現(xiàn)輸出FEDC;</p><p><b>  end i

82、f;</b></p><p>  when others=>null;</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  out1&l

83、t;=(in1-q1);</p><p>  out2<=(in2-q2);</p><p>  out3<=(in3-q3);</p><p>  out4<=(in4-q4);</p><p><b>  end;</b></p><p>  ————————————————

84、————————————————————</p><p>  第五部分:CHOICE(數(shù)據(jù)選擇模塊)</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><

85、p>  entity choice is</p><p>  port(clk:std_logic;</p><p>  f1,f2,f3,f4:in std_logic_vector(3 downto 0);</p><p>  o1:out std_logic_vector(1 downto 0);</p><p>  o2:out

86、 std_logic_vector(3 downto 0));</p><p><b>  end;</b></p><p>  architecture one of choice is</p><p>  signal q:std_logic_vector(1 downto 0);</p><p><b>

87、  begin</b></p><p>  process(clk)</p><p><b>  begin</b></p><p>  if clk'event and clk='1' then q<=q+1;</p><p><b>  end if;</b&

88、gt;</p><p><b>  case q is</b></p><p>  when "00" => o2<=f1; </p><p>  when "01" => o2<=f2;</p><p>  when "10" =&g

89、t; o2<=f3; 選擇輸出數(shù)據(jù)</p><p>  when "11" => o2<=f4; </p><p>  when others=> null;</p><p><b>  end case;</b></p><p>  end process

90、;</p><p>  o1<=q; --位選信號</p><p><b>  end;</b></p><p>  ————————————————————————————————————</p><p>  第六部分:VIEW(顯示模塊)</p><p&

91、gt;  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity view is</p><p>  port(screen:in std_logic;</p>

92、<p>  f1:in std_logic_vector(1 downto 0);</p><p>  f2,able:in std_logic_vector(3 downto 0);</p><p>  segout:out std_logic_vector(7 downto 0);</p><p>  selout:out std_logic_vec

93、tor(2 downto 0));</p><p><b>  end;</b></p><p>  architecture one of view is</p><p>  signal seg:std_logic_vector(6 downto 0);</p><p>  signal sel:std_logic

94、_vector(2 downto 0);</p><p><b>  begin</b></p><p>  selout<=sel;</p><p>  segout(6 downto 0)<=seg;</p><p>  sel<="000" when f1=0 else<

95、/p><p>  "001" when f1=1 else</p><p>  "010" when f1=2 else 相應(yīng)的數(shù)據(jù)選擇對應(yīng)的位進(jìn)行輸出</p><p>  "011" when f1=3 else</p><p><b>  "000&quo

96、t;;</b></p><p>  segout(7)<='1' when f1=2 else '0'; --在第三個(gè)數(shù)碼管輸出小數(shù)點(diǎn)</p><p>  process(f2,able,sel)</p><p><b>  begin</b></p><p>

97、;  if (able="0001" and sel="000") or (able="0010" and sel="001") or </p><p>  (able="0011" and sel="010") or (able="0100" and sel="0

98、11") then</p><p>  if screen='1' then seg<="0000000"; --無輸出</p><p><b>  else</b></p><p>  case f2 is</p><p>  when "0000&qu

99、ot; => seg<="0111111";</p><p>  when "0001" => seg<="0000110";</p><p>  when "0010" => seg<="1011011";</p><p>  w

100、hen "0011" => seg<="1001111";</p><p>  when "0100" => seg<="1100110";</p><p>  when "0101" => seg<="1101101";</p&

101、gt;<p>  when "0110" => seg<="1111101";</p><p>  when "0111" => seg<="0000111";</p><p>  when "1000" => seg<="1111

102、111";</p><p>  when "1001" => seg<="1101111";</p><p>  when "1010" => seg<="1110111";</p><p>  when "1011" => s

103、eg<="1111100";</p><p>  when "1100" => seg<="0111001";</p><p>  when "1101" => seg<="1011110";</p><p>  when "1

104、110" => seg<="1111001";</p><p>  when "1111" => seg<="1110001";</p><p>  when others=>null;</p><p>  end case; --有

105、輸出</p><p>  end if; --實(shí)現(xiàn)閃爍</p><p><b>  else</b></p><p>  case f2 is</p><p>  when "0000" => seg<="0111111";<

106、/p><p>  when "0001" => seg<="0000110";</p><p>  when "0010" => seg<="1011011";</p><p>  when "0011" => seg<="1

107、001111";</p><p>  when "0100" => seg<="1100110";</p><p>  when "0101" => seg<="1101101";</p><p>  when "0110" =>

108、; seg<="1111101";</p><p>  when "0111" => seg<="0000111";</p><p>  when "1000" => seg<="1111111";</p><p>  when &quo

109、t;1001" => seg<="1101111";</p><p>  when "1010" => seg<="1110111";</p><p>  when "1011" => seg<="1111100";</p><

110、;p>  when "1100" => seg<="0111001";</p><p>  when "1101" => seg<="1011110";</p><p>  when "1110" => seg<="1111001"

111、;;</p><p>  when "1111" => seg<="1110001";</p><p>  when others=>null;</p><p>  end case; --在沒選中的位正常輸出</p><p><b>  end if;</b>

溫馨提示

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

評論

0/150

提交評論