版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、題目: 基于quartus制作的電風(fēng)扇 姓 名 高英達 學(xué) 院 信息與通信工程 專 業(yè) 通信工程 班 級 2013211106 學(xué) 號 2013210158 班內(nèi)序號 07 目錄基于Quartus的電風(fēng)扇制作 1一、設(shè)計任務(wù)要求4二、系統(tǒng)設(shè)計12.1 設(shè)計思路42.2 總體框圖 12.2.1 總體結(jié)構(gòu)框圖42.2.2 邏輯劃分框圖52.2.3 模塊劃分圖 52.2.4 程序流程圖 52.2.5 MDS圖 5三、仿真波形及分析1四、源程序4 4.1 程序代碼4 4.2 程序分析4五、功能說明5六、元器件清單及資源利用情況6七、故障及問題分析1八、總結(jié)和結(jié)論4一、設(shè)計任務(wù)要求基本要求 :1、 用
2、8×8 點陣模擬風(fēng)扇轉(zhuǎn)動,并采用雙色點陣顯示。2、 風(fēng)扇轉(zhuǎn)動方式如圖 1 所示,包括四個點陣顯示狀態(tài)并按順序循環(huán)顯示。風(fēng)扇轉(zhuǎn)動速度根據(jù)環(huán)境溫度分為 4 檔,其中 1 檔的四個顯示狀態(tài)之間的切換時間為 2 秒,2 檔為 1 秒,3 檔為 0.5 秒,4 檔為靜止不動。3、 環(huán)境溫度通過 2 個 BTN 按鍵設(shè)置,一個用來增加,一個用來減少,溫度可設(shè)置范圍為 1040,溫度精度為 1,并用兩個數(shù)碼管進行溫度顯示。風(fēng)扇根據(jù)不同的溫度自動采用不同的轉(zhuǎn)動速度,其中 2024對應(yīng) 1 檔,2529對應(yīng) 2 檔,3040對應(yīng) 3 檔,1019對應(yīng) 4 檔,用一個數(shù)碼管顯示檔位。4、 定時模式:在風(fēng)
3、扇不同轉(zhuǎn)動速度下,可以通過按鍵切換進入定時模式。定時時間可設(shè)置范圍為 2059 秒,采用兩個數(shù)碼管進行倒計時顯示,當(dāng)?shù)褂嫊r結(jié)束后,風(fēng)扇狀態(tài)保持靜止不動。5、 設(shè)置開關(guān)鍵。風(fēng)扇開機初始狀態(tài)為 20、1 檔,并有不小于 5 秒的開機音樂。關(guān)機狀態(tài)為點陣全滅。提高要求 :1、 設(shè)計 LED 風(fēng)扇的其他工作模式。2、 利用實驗板上的溫度傳感器代替按鍵直接獲取溫度數(shù)據(jù), 實現(xiàn)對 LED 風(fēng)扇四檔轉(zhuǎn)速的自動控制。3、 用數(shù)碼管實時顯示溫度傳感器的溫度數(shù)據(jù),精度為 0.1。4、 自擬其他功能。二、系統(tǒng)設(shè)計2.1設(shè)計思路采用分模塊的設(shè)計思想,將整個程序主要分為三個模塊:分頻模塊、控制模塊以及顯示模塊。其中:1
4、. 分頻模塊的作用是產(chǎn)生程序所需要的時鐘頻率。包括時鐘及點陣的掃描頻率2000Hz、鍵盤掃描頻率500Hz、控制數(shù)碼管倒計時的頻率1Hz、不同檔位風(fēng)扇轉(zhuǎn)速對應(yīng)的頻率:20Hz、10Hz、5Hz。本實驗采用了兩種計時方式,分別是計數(shù)分頻和時鐘反轉(zhuǎn)分頻。2. 控制模塊主要由BTN按鍵和撥檔按鍵組成。BTN按鍵用來控制溫度及時間的增減,撥檔按鍵用來實現(xiàn)開關(guān)機功能以及倒計時開關(guān)功能。其中,”start“ 按鍵置一實現(xiàn)倒計時功能,同時BTN按鍵仍可控制時間加減。3. 顯示模塊包括數(shù)碼管顯示和點陣顯示。點陣顯示通過高頻率逐次掃描然后利用視覺暫留效應(yīng)產(chǎn)生靜態(tài)顯示;數(shù)碼管利用片選信號每次選通一個數(shù)碼管,然后根
5、據(jù)輸出控制單個七段數(shù)碼管顯示狀態(tài)的信號實現(xiàn)數(shù)碼管的顯示。點陣顯示風(fēng)扇圖形,數(shù)碼管顯示風(fēng)扇檔位、倒計時時間以及當(dāng)前溫度。2.2 總體框圖2.2.1 總體結(jié)構(gòu)框圖數(shù)碼管8×8點陣控制器復(fù)位按鍵時鐘按鈕輸入2.2.2邏輯設(shè)計框圖8×8檔位顯示控制器按鍵輸入及復(fù)位鍵溫度到檔位分頻器時鐘數(shù)碼管顯示計時器2.2.3 程序流程圖開始點陣旋轉(zhuǎn)×3檔溫度<10°?結(jié)束點陣旋轉(zhuǎn)停止×4檔開始倒計時時間減少?點陣旋轉(zhuǎn)×2檔溫度下降?溫度>24°?溫度>30°?溫度上升?溫度控制鍵是否按下時間控制鍵是否按下start鍵是
6、否按下點陣旋轉(zhuǎn)×1檔數(shù)碼管顯示溫度20度顯示時間30s否否否是是否是是否否是是否是是是否start=12.2.4 MDS圖計時狀態(tài)Time=0Temp4×4檔 運行狀態(tài)Temp3Temp4Temp1Clear=1Clear=0×3檔×1檔關(guān)閉狀態(tài)開啟狀態(tài)Temp2Temp1×2檔Temp3Temp210°Temp124°25°Temp229°30°Temp340°Temp410°三、仿真波形及分析初始化:由這兩個波形圖可以看出數(shù)碼管的初始值。Cat是數(shù)碼管片選信號,代表導(dǎo)通的
7、數(shù)碼管dec是八段控制的數(shù)字,從圖中看出,六個數(shù)碼管從右到左依次顯示為:3×3030,代表3檔30攝氏度30秒。證明初始化正確。溫度按鍵:從這三個波形圖可以看出,當(dāng)up_tem置1而其他置0,即只有升溫按鍵一直按下的時候,在仿真358us左右,數(shù)碼管最右邊一位,即溫度的個位顯示從0變1,在774us左右,該處數(shù)值變成2。證明升溫按鍵正常工作,溫度降低按鍵檢測原理同上。時間按鍵:從這兩個波形圖可以看出,當(dāng)low_time置1而其他置0,即只有減時按鍵一直按下的時候,在294us左右,數(shù)碼管右邊第三位,即時間的個位顯示由0跳變至9,在777us左右,該處數(shù)碼管顯示8。證明減時按鍵正常工作
8、,加時按鍵檢測同理。四、源程序4.1程序代碼library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fan is port(clk_50M:in std_logic;clear:in std_logic;start:in std_logic;up_tem,low_tem,up_time,low_time:in std_logic;-調(diào)節(jié)溫度btn red:out std_logic_vector(0 to 7);-點陣 紅 green:out std_logic_vector(0 to 7)
9、;-點陣 綠 row:out std_logic_vector(0 to 7);-點陣 行cat:out std_logic_vector(5 downto 0);-數(shù)碼管 位數(shù)dec:out std_logic_vector(6 downto 0);t1,t2,t3,t4:in std_logic;spks: out std_logic );end fan;architecture arc of fan issignal clk_r,clk_s:std_logic;signal clk_temp1,clk_temps,clk_temp2,clk_temp3,clk_temp4,clk_tem
10、p5,clk_temp6,clk_temp7:std_logic;signal temp1:integer range 0 to 499999;signal temps:integer range 0 to 99999999;signal temp2,temp3,temp4,temp5:integer range 0 to 999;signal a:integer range 0 to 7;-點陣 行掃描signal c:integer range 0 to 3;-點陣 圖案signal gear:std_logic_vector(1 downto 0);-檔位signal gear_dec:
11、std_logic_vector(3 downto 0);signal d:integer range 0 to 5;-數(shù)碼管掃描signal d_temp:std_logic_vector(3 downto 0);signal tem_h:std_logic_vector(3 downto 0);-溫度signal tem_l:std_logic_vector(3 downto 0);signal tem_f:std_logic_vector(7 downto 0);-溫度signal time_h:std_logic_vector(3 downto 0);-timesignal time_
12、l:std_logic_vector(3 downto 0);signal time_f:std_logic_vector(7 downto 0);signal clk_075M, fullspks:std_logic; signal count0:integer range 0 to 63;-change signal clk2:std_logic; signal tone0:integer range 0 to 2047;signal index:std_logic_vector(15 downto 0); beginp1:process(clk_50M) -分頻beginif clk_5
13、0M'event and clk_50M='1' thenif temp1=24999 thentemp1<=0;clk_temp1<=NOT clk_temp1;-2000hzelsetemp1<=temp1+1;end if;end if;end process p1;clk_r<=clk_temp1;p111:process(clk_50M) -分頻variable counts:integer:=0;beginif clear = '0' thencounts := 0;elseif clk_50M'event a
14、nd clk_50M='1' thencounts := counts + 1;if counts <= 45000000 then clk_temps <='0'elsif counts < 50000000 then clk_temps <='1'else counts := 0;end if;end if;end if;end process p111;p11:process(clk_temp1)beginif clk_temp1'event and clk_temp1='1' thenif
15、temp2=24 thentemp2<=0;clk_temp2<=not clk_temp2;-80hzelsetemp2<=temp2+1;end if;end if;end process p11;p12:process(clk_temp2)beginif clk_temp2'event and clk_temp2='1' thenif temp3=1 thentemp3<=0;clk_temp3<=not clk_temp3;-40hzelsetemp3<=temp3+1;end if;end if;end process p1
16、2;p13:process(clk_temp3)beginif clk_temp3'event and clk_temp3='1' thenif temp4=1 thentemp4<=0;clk_temp4<=not clk_temp4;-20hzelsetemp4<=temp4+1;end if;end if;end process p13;p14:process(clk_temp1)beginif clk_temp1'event and clk_temp1='1' thenif temp5=24 thentemp5<=
17、0;clk_temp6<=not clk_temp6;clk_temp7<=not clk_temp7;-500分頻elsetemp5<=temp5+1;end if;end if;end process p14;p2:process(up_tem,low_tem,clear,clk_temp6)-按鍵調(diào)節(jié)溫度beginif clear='0' thentem_h<="0011"tem_l<="0000"elsif clk_temp6'event and clk_temp6='1' a
18、nd up_tem='1' thenif tem_h="0100" thentem_h<="0100"tem_l<="0000"elsif tem_l="1001" thentem_h<=tem_h+'1'tem_l<="0000"else tem_l<=tem_l+'1'end if;elsif clk_temp6'event and clk_temp6='1' and low_tem=
19、9;1'thenif tem_l="0000" thenif tem_h="0001" thentem_h<="0001"tem_l<="0000"elsetem_h<=tem_h-'1'tem_l<="1001"end if;else tem_l<=tem_l-'1'end if;end if;end process p2;tem_f<=tem_h&tem_l;p22:process(up_time,low_t
20、ime,clear,clk_temp7,start,clk_temps)-button control timebeginif clear='0' thentime_h<="0011"time_l<="0000"elsif clk_temp7'event and clk_temp7='1' and up_time='1'thenif time_h="0110" thentime_h<="0110"time_l<="0000&q
21、uot;elsif time_l="1001" thentime_h<=time_h+1;time_l<="0000"else time_l<=time_l+1; end if;elsif clk_temp7'event and clk_temp7='1' thenif low_time='1' or (start = '1' and clk_temps ='1') thenif time_l="0000" thenif time_h="
22、;0000" thentime_h<="0000"time_l<="0000"elsetime_h<=time_h-'1'time_l<="1001"end if;else time_l<=time_l-'1'end if;end if;end if;end process p22;time_f<=time_h&time_l;p3:process(tem_f)-wendu dao dangweibeginif time_f="0000000
23、0" thengear<="00"elsif tem_f="00010000" thengear<="00"elseif tem_f<"00100101" thengear<="01"elseif tem_f<"00110000" thengear<="10"else gear<="11"end if;end if;end if;end process p3;p4:process(ge
24、ar)-檔位調(diào)節(jié)轉(zhuǎn)速begincase gear iswhen "00"=>clk_temp5<='0'gear_dec<="0100"when "01"=>clk_temp5<=clk_temp4;gear_dec<="0001"when "10"=>clk_temp5<=clk_temp3;gear_dec<="0010"when "11"=>clk_temp5<=clk
25、_temp2;gear_dec<="0011"end case;end process p4;clk_s<=clk_temp5;-數(shù)碼管顯示相關(guān)p5:process(clk_r)beginif clk_r'event and clk_r='1'then d<=d+1; if d=5 thend<=0;end if;end if;end process p5;p:process(d,tem_l,tem_h)beginif clear='0' thencat<="111111"elseca
26、se d iswhen 0=>d_temp<=tem_l;cat<="111110"when 1=>d_temp<=tem_h;cat<="111101"when 2=>d_temp<=time_l;cat<="111011"when 3=>d_temp<=time_h;cat<="110111"when 4=>d_temp<="1111"cat<="101111"when 5=>
27、d_temp<=gear_dec;cat<="011111"end case;end if;end process p;p6:process(d_temp)begincase d_temp iswhen "0000"=>dec<="1111110"when "0001"=>dec<="0110000"when "0010"=>dec<="1101101"when "0011"=>de
28、c<="1111001"when "0100"=>dec<="0110011"when "0101"=>dec<="1011011"when "0110"=>dec<="1011111"when "0111"=>dec<="1110000"when "1000"=>dec<="1111111"when "
29、;1001"=>dec<="1111011"when others=>dec<="0000000"end case;end process p6;-雙色點陣相關(guān)p7:process(clk_r)beginif clk_r'event and clk_r='1'then a<=a+1; if a=7 thena<=0;end if;end if;end process p7;p8:process(clk_s) beginif clk_s'event and clk_s='
30、1'thenc<=c+1;if c=3 thenc<=0;end if;end if;end process p8;p9:process(a,c,clear) -雙色點陣顯示 beginif clear='0' thenrow<="11111111"elseif(c=0)thencase a iswhen 0=>red<="10000000"green<="00000011"row<="01111111"when 1=>red<=&quo
31、t;11000000"green<="00000110"row<="10111111"when 2=>red<="01100000"green<="00001100"row<="11011111"when 3=>red<="00110000"green<="00001000"row<="11101111"when 4=>red<="0000110
32、0"green<="00010000"row<="11110111"when 5=>red<="00000110"green<="00110000"row<="11111011"when 6=>red<="00000011"green<="01100000"row<="11111101"when 7=>red<="00000001"gr
33、een<="11000000"row<="11111110"when others=>null;end case;elsif(c=1)thencase a iswhen 0=>red<="00110000"green<="00000000"row<="01111111"when 1=>red<="00110000"green<="00000000"row<="10111111&qu
34、ot;when 2=>red<="00110000"green<="00000111"row<="11011111"when 3=>red<="00010000"green<="00001111"row<="11101111"when 4=>red<="00001000"green<="11110000"row<="11110111"when 5
35、=>red<="00001100"green<="11100000"row<="11111011"when 6=>red<="00001100"green<="00000000"row<="11111101"when 7=>red<="00001100"green<="00000000"row<="11111110"when others=>
36、;null;end case;elsif(c=2)thencase a iswhen 0=>red<="00000011"green<="10000000"row<="01111111"when 1=>red<="00000110"green<="11000000"row<="10111111"when 2=>red<="00001100"green<="01100000"
37、;row<="11011111"when 3=>red<="00001000"green<="00110000"row<="11101111"when 4=>red<="00010000"green<="00001100"row<="11110111"when 5=>red<="00110000"green<="00000110"row<=
38、"11111011"when 6=>red<="01100000"green<="00000011"row<="11111101"when 7=>red<="11000000"green<="00000001"row<="11111110"when others=>null;end case;elsecase a iswhen 0=>red<="00000000"gree
39、n<="00110000"row<="01111111"when 1=>red<="00000000"green<="00110000"row<="10111111"when 2=>red<="00000111"green<="00110000"row<="11011111"when 3=>red<="00001111"green<=&qu
40、ot;00010000"row<="11101111"when 4=>red<="11110000"green<="00001000"row<="11110111"when 5=>red<="11100000"green<="00001100"row<="11111011"when 6=>red<="00000000"green<="000011
41、00"row<="11111101"when 7=>red<="00000000"green<="00001100"row<="11111110"when others=>null;end case;end if; end if; end process p9;end;4.2關(guān)鍵程序分析1.溫度控制:process(up_tem,low_tem,clear,clk_temp6)beginif clear='0' thentem_h<="0
42、010"tem_l<="0000"elsif clk_temp6'event and clk_temp6='1' and up_tem='1' thenif tem_h="0100" thentem_h<="0100"tem_l<="0000"elsif tem_l="1001" thentem_h<=tem_h+'1'tem_l<="0000"else tem_l<=tem
43、_l+'1'end if;elsif clk_temp6'event and clk_temp6='1' and low_tem='1'thenif tem_l="0000" thenif tem_h="0001" thentem_h<="0001"tem_l<="0000"elsetem_h<=tem_h-'1'tem_l<="1001"end if;else tem_l<=tem_l-
44、9;1'end if;end if;end process p2;tem_f<=tem_h&tem_l;分析:CLK_TEMP6是500分頻,掃描溫度按鍵。Up_tem、low_tem分別控制溫度上升和下降。Tem_h、tem_l分別代表數(shù)碼管顯示溫度的高位和低位。開機溫度是20°,當(dāng)檢測到Up_tem=1時,溫度上升;檢測到low_tem=1時,溫度下降。最后把溫度復(fù)制給tem_f,用于之后溫度對檔位的控制。2.時間控制及倒計時:p22:process(up_time,low_time,clear,clk_temp7,start,clk_temps)-butt
45、on control timebeginif clear='0' thentime_h<="0011"time_l<="0000"elsif clk_temp7'event and clk_temp7='1' and up_time='1'thenif time_h="0110" thentime_h<="0110"time_l<="0000"elsif time_l="1001" thentim
46、e_h<=time_h+1;time_l<="0000"else time_l<=time_l+1; end if;elsif clk_temp7'event and clk_temp7='1' thenif low_time='1' or (start = '1' and clk_temps ='1') thenif time_l="0000" thenif time_h="0000" thentime_h<="0000&quo
47、t;time_l<="0000"elsetime_h<=time_h-'1'time_l<="1001"end if;else time_l<=time_l-'1'end if;end if;end if;end process p22;time_f<=time_h&time_l;分析: clk_temp7是500分頻,用于掃描時間控制按鍵的時鐘; clk_temps是用于計時的時鐘。up_time、low_time分別用于控制增時間、減時間;time_h、time_l分別表示數(shù)碼管時
48、間顯示的高低位。Start是倒計時開啟開關(guān),當(dāng)start=1的時候開始倒計時。最后把時間復(fù)值給time_f,用于之后時間對檔位的控制。4.時間及溫度控制風(fēng)扇旋轉(zhuǎn)速度p3:process(tem_f)beginif time_f="00000000" thengear<="00"elsif tem_f="00010000" thengear<="00"elseif tem_f<"00100101" thengear<="01"elseif tem_f&l
49、t;"00110000" thengear<="10"else gear<="11"end if;end if;end if;end process p3;分析:當(dāng)?shù)褂嫊r結(jié)束時間為零時,gear<="00"風(fēng)扇調(diào)至4檔;如果倒計時時間不為零,溫度小于10°,gear<="00"風(fēng)扇調(diào)至4檔;溫度大于10°小于25°,gear<="01"風(fēng)扇調(diào)至1檔;溫度大于24°小于30°,gear<=&q
50、uot;10"風(fēng)扇調(diào)至2檔;溫度大于30°小于40°,gear<="11"風(fēng)扇調(diào)至3檔。5.檔位調(diào)節(jié)轉(zhuǎn)速p4:process(gear)-檔位調(diào)節(jié)轉(zhuǎn)速begincase gear iswhen "00"=>clk_temp5<='0'gear_dec<="0100"when "01"=>clk_temp5<=clk_temp4;gear_dec<="0001"when "10"=>c
51、lk_temp5<=clk_temp3;gear_dec<="0010"when "11"=>clk_temp5<=clk_temp2;gear_dec<="0011"end case;end process p4;clk_s<=clk_temp5;分析:當(dāng)gear=”00“時,clk_temp5<='0',風(fēng)扇停止旋轉(zhuǎn)。當(dāng)gear=”01“時,clk_temp5<= clk_temp4,風(fēng)扇以20Hz的轉(zhuǎn)速旋轉(zhuǎn)。當(dāng)gear=”10“時,clk_temp5<= clk_temp3,風(fēng)扇以40Hz的轉(zhuǎn)速旋轉(zhuǎn)。當(dāng)gear=”11“時,clk_temp5<= clk_temp2,風(fēng)扇以80Hz的轉(zhuǎn)速旋轉(zhuǎn)。五、功能說明1.點陣顯示風(fēng)扇的四個狀態(tài),對點陣行列的控制,選擇一列紅色、二列綠色。通過時鐘的掃描實現(xiàn)風(fēng)扇的旋轉(zhuǎn)。2.數(shù)碼管從左到右分別顯示風(fēng)扇所在檔位、倒計時和溫度。3.BTN3和BTN2分別控制時間增加和時間
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人健身教練合同:2024版專業(yè)輔導(dǎo)合同書版B版
- 2025年食堂節(jié)能環(huán)保設(shè)施改造承包協(xié)議9篇
- 2025年高新技術(shù)產(chǎn)業(yè)園區(qū)土地購置合同范本3篇
- 2025年度跨境電商供應(yīng)鏈融資擔(dān)保合同4篇
- 2025版企業(yè)綠化項目施工合同范本匯編4篇
- 二零二五版環(huán)保檢測技術(shù)服務(wù)合同標(biāo)準(zhǔn)范本3篇
- 2024年藥品研發(fā)與藥師合作契約3篇
- 個人投資合同及投資款支付借條(2024版)3篇
- 2025年度智慧安防系統(tǒng)承包意向書4篇
- 東莞市規(guī)范離婚合同書2024版樣本版
- 檢驗員績效考核
- 農(nóng)藥合成研發(fā)項目流程
- 機電安裝工程安全管理
- 2024年上海市第二十七屆初中物理競賽初賽試題及答案
- 信息技術(shù)部年終述職報告總結(jié)
- 理光投影機pj k360功能介紹
- 六年級數(shù)學(xué)上冊100道口算題(全冊完整版)
- 八年級數(shù)學(xué)下冊《第十九章 一次函數(shù)》單元檢測卷帶答案-人教版
- 帕薩特B5維修手冊及帕薩特B5全車電路圖
- 小學(xué)五年級解方程應(yīng)用題6
- 年月江西省南昌市某綜合樓工程造價指標(biāo)及
評論
0/150
提交評論