洗衣機實驗報告_第1頁
洗衣機實驗報告_第2頁
洗衣機實驗報告_第3頁
洗衣機實驗報告_第4頁
洗衣機實驗報告_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數字電路與邏輯設計綜合實驗實驗報告實驗名稱:基于CPLD的簡易洗衣機控制器的設計與實現指導老師:班級:學號:班內序號:姓名:2015.11.9一設計課題的任務要求 題目:基于CPLD的簡易洗衣機控制器的設計與實現基本要求:1、洗衣機的工作步驟為洗滌、漂洗和脫水三個過程,工作時間分別為:洗滌30秒(進水5秒,洗衣15秒,排水5秒,甩干5秒),漂洗25秒(進水5秒,漂洗10秒,排水5秒,甩干5秒),脫水15秒(排水5秒,甩干10秒);2、用一個按鍵實現洗衣程序的手動選擇:A、單洗滌;B、單漂洗;C、單脫水;D、漂洗和脫水;E、洗滌、漂洗和脫水全過程;3、用發(fā)光二極管顯示洗衣機的工作狀態(tài)(洗衣、漂洗

2、和脫水),并倒計時顯示每個狀態(tài)的工作時間,全部過程結束后,應有聲音提示使用者,并保持在停止狀態(tài),直至再次開始;4、用點陣動畫顯示洗衣機工作過程中進水、波輪或滾筒轉動、排水和甩干等的工作情況,四種工作情況的動畫顯示要有區(qū)別且盡可能的形;5、用一個按鍵實現暫停洗衣和繼續(xù)洗衣的控制,暫停后繼續(xù)洗衣應回到暫停之前保留的狀態(tài)。提高要求:1、三個過程的時間有多個選項供使用者選擇;2、可以預約洗衣時間;3、自擬其它功能;二、系統設計設計思路:從系統總體要求出發(fā),將設計任務分解為5類不同的功能模式,3種工作類型。基本功能描述洗衣機控制器可工作于五種模式下:單洗滌、單漂洗、單脫水、漂洗十脫水、洗滌十漂洗+脫水,

3、由按鍵控制洗衣機控制器工作在任意一種模式,并顯示出洗衣機的工作狀態(tài)和剩余工作時間,在剩余時間結束后有報警聲提示使用者,并且可實現暫停洗衣和繼續(xù)的功能。3種工作類型:洗滌、漂洗、脫水。由此分析可將洗衣機控制器分為分頻器模塊、控制模塊、倒計時模塊、點陣模塊、初始模式選擇模塊、報警模塊、數碼管顯示模塊等??傮w框圖:分塊設計:分頻器模塊:利用分頻模塊將頻率分頻為500HZ、100HZ以及1HZ,分別用于不同模塊。500HZ用于:數碼管顯示、掃描模塊;100HZ用于:暫停按鍵、模式選擇按鍵、開始按鍵;1HZ用于:蜂鳴器模塊、點陣模塊。倒計時模塊:進行時間的倒計時,將減計數得到的剩余時間送給顯示模塊進行顯

4、示。點陣模塊:通過不同的狀態(tài)配合倒計時顯示不同的點陣動畫,使洗衣機使用者能一目了然的知道現在洗衣工作進行到哪一步驟。初始模式選擇模塊:洗衣機使用者通過對模塊選擇按鍵的控制,選擇指定模式,再通過開始及暫停鍵,控制洗衣機的工作與暫停。報警模塊:當狀態(tài)轉移模塊送出結束信號時,控制蜂鳴器響5秒鐘。數碼管顯示模塊:此模塊的作用是洗衣模式顯示以及該模式下的剩余時間顯示。三、仿真波形及波形分析點陣:防抖:(6個時鐘脈沖內,按下按鍵,只能產生一次按鍵脈沖信號)分頻:模式選擇:數碼管顯示:四、源程序頂層文件:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.ST

5、D_LOGIC_UNSIGNED.ALL;ENTITY washing ISPORT(clk:IN STD_LOGIC;clear:IN STD_LOGIC;up,down,mode,sure,choice,pause,start:IN STD_LOGIC;-DISP:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);beep:OUT STD_LOGIC;LED1:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);LED2:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

6、row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);colg:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);colr:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END washing;ARCHITECTURE behave OF washing IS-clk_500,clk_1,clk_100分別對應500HZ信號,1HZ信號,100HZ信號-sure_tmp:數字鐘模式下的標志信號,1表示數字鐘開始,0表示暫停-pause_tmp:開始暫停的標志信號,1開始0暫停-choose_tmp:對應當前被選中的數碼管-h_1,h_2,

7、m_1,m_2,s_1,s_2:用來保存在數字鐘模式下的時分秒-hx_1,hx_2,mx_1,mx_2,sx_1,sx_2:用來保存在洗衣漂洗脫水等模式下的時間-H1,H2,M1,M2,S1,S2:對應從左到右6位數碼管的每一位-model_tmp:對應當前模式-beep_flag:蜂鳴器是否響了5秒的標志信號-cl_beeper:cl_beeper的0、1決定beep_flag的1、0-SIGNAL clk_500,clk_1,clk_100,sure_tmp:STD_LOGIC;SIGNAL pause_tmp:STD_LOGIC:=1;-SIGNAL choice_tmp:INTEGER

8、 RANGE 0 TO 2;SIGNAL h_1:INTEGER RANGE 0 TO 3;SIGNAL m_1,s_1:INTEGER RANGE 0 TO 6;SIGNAL h_2,m_2,s_2:INTEGER RANGE 0 TO 9;SIGNAL H1,H2:INTEGER RANGE 0 TO 9;SIGNAL M1,S1,M2,S2:INTEGER RANGE 0 TO 9;SIGNAL mode_tmp:INTEGER RANGE 0 TO 5;SIGNAL mode_m:INTEGER RANGE 0 TO 5;SIGNAL beep_flag:STD_LOGIC;SIGNA

9、L cl_beeper:STD_LOGIC;SIGNAL state:INTEGER RANGE 0 TO 3;-指示洗衣過程SIGNAL arr_mode:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL num1:INTEGER RANGE 0 TO 50:=30;-SHUZIKONGZHISIGNAL num2:INTEGER RANGE 0 TO 50:=25;SIGNAL num3:INTEGER RANGE 0 TO 50:=15;SIGNAL de1:INTEGER RANGE 0 TO 30:=15;-洗滌時洗衣時間SIGNAL de2:INTEGER R

10、ANGE 0 TO 30:=10;-漂洗時洗衣時間SIGNAL de3:INTEGER RANGE 0 TO 30:=10;-甩干時脫水時間SIGNAL flag:INTEGER RANGE 0 TO 1;SIGNAL start_tmp:INTEGER RANGE 0 TO 1;-開始標志COMPONENT CLOCKPORT(clear:IN STD_LOGIC;clk_1,up,down,sure_tmp,mode:IN STD_LOGIC;mode_tmp:IN INTEGER RANGE 0 TO 5;h_1:OUT INTEGER RANGE 0 TO 9;h_2:OUT INTE

11、GER RANGE 0 TO 9;m_1,s_1:OUT INTEGER RANGE 0 TO 9;m_2,s_2:OUT INTEGER RANGE 0 TO 9;flag:OUT INTEGER RANGE 0 TO 1;-倒計時結束標志choice_tmp:IN INTEGER RANGE 0 TO 2);END COMPONENT;COMPONENT set_sure PORT(sure,clk_100:IN STD_LOGIC;-sure是數字鐘模式下的確認按鈕sure_tmp:OUT STD_LOGIC);END COMPONENT;COMPONENT clk_divPORT(cl

12、ear,clk:IN STD_LOGIC;clk_500,clk_1,clk_100:OUT STD_LOGIC);END COMPONENT;COMPONENT SHOWPORT(clk_500:IN STD_LOGIC;clear:IN STD_LOGIC;H1:IN INTEGER RANGE 0 TO 9;H2:IN INTEGER RANGE 0 TO 9;M1,S1:IN INTEGER RANGE 0 TO 9;M2,S2:IN INTEGER RANGE 0 TO 9;CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);DISP:OUT STD_LOGIC

13、_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT set_pausePORT(clear,pause,clk_100:IN STD_LOGIC;pause_tmp:OUT STD_LOGIC);END COMPONENT;COMPONENT set_modePORT(mode,clear,clk_100:IN STD_LOGIC;choice:IN STD_LOGIC;mode_tmp:OUT INTEGER RANGE 0 TO 5;LED1:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);flag:IN INTEGER RANGE 0

14、 TO 1;choice_tmp:OUT INTEGER RANGE 0 TO 2);END COMPONENT;COMPONENT set_beep-SET_BEEPPORT(clk_1,clk_100:IN STD_LOGIC; mode:IN STD_LOGIC; clk_500:IN STD_LOGIC; beep_flag:IN STD_LOGIC; cl_beep:OUT STD_LOGIC; beep:OUT STD_LOGIC);END COMPONENT;COMPONENT set_led PORT(clear,clk_1:IN STD_LOGIC;state:IN INTE

15、GER RANGE 0 TO 3;led_out:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END COMPONENT;COMPONENT set_arrayPORT(clear,clk_1,clk_500:IN STD_LOGIC;arr_mode:IN STD_LOGIC_VECTOR(2 DOWNTO 0);-四種狀態(tài)row:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);colg:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);colr:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONEN

16、T;COMPONENT set_startPORT(start,clk_100,mode:IN STD_LOGIC;flag:IN INTEGER RANGE 0 TO 1;start_tmp:OUT INTEGER RANGE 0 TO 1);END COMPONENT;-PORT MAP-BEGIN u1:CLOCK PORT MAP(clear=clear,clk_1=clk_1,up=up,down=down,sure_tmp=sure_tmp,mode=mode,mode_tmp=mode_tmp,h_1=h_1,h_2=h_2,m_1=m_1,m_2=m_2,s_1=s_1,s_2

17、=s_2,choice_tmp=choice_tmp,flag=flag);-u2:set_sure PORT MAP(clk_100=clk_100,sure=sure,sure_tmp=sure_tmp);u3:clk_div PORT MAP(clear=clear,clk=clk,clk_500=clk_500,clk_1=clk_1,clk_100=clk_100);u4:SHOW PORT MAP(clk_500=clk_500,clear=clear,H1=H1,H2=H2,M1=M1,M2=M2,S1=S1,S2=S2,CAT=CAT,DISP=DISP);u5:set_pau

18、se PORT MAP(clk_100=clk_100,clear=clear,pause=pause,pause_tmp=pause_tmp);u6:set_mode PORT MAP(clk_100=clk_100,mode=mode,clear=clear,choice=choice,LED1=LED1, flag=flag,choice_tmp=choice_tmp,mode_tmp=mode_tmp);u7:set_beep PORT MAP(beep_flag=beep_flag,clk_1=clk_1,clk_100=clk_100,mode=mode,clk_500=clk_5

19、00,cl_beep=cl_beeper,beep=beep);-u8:set_led PORT MAP(clk_1=clk_1,clear=clear,state=state,led_out=LED2);u9:set_array PORT MAP(clear=clear,clk_1=clk_1,clk_500=clk_500, arr_mode=arr_mode,row=row,colr=colr,colg=colg);u10:set_start PORT MAP(start=start,clk_100=clk_100,mode=mode,start_tmp=start_tmp,flag=f

20、lag);倒計時:PROCESS(clear,clk,up,down,clk_1)BEGINIF clear=1 THENH1=0;H2=0;M1=0;M2=0;S1=0;S2=0;num1=30;num2=25;num3=15;state=3;arr_mode=000;de1=15;de2=10;de3=10;ELSIF(mode=1)THENnum1=30;num2=25;num3=15;state=3;arr_modeH1=h_1;H2=h_2;M1=m_1;M2=m_2;S1=s_1;S2H1=num1/10;H2=(num1)mod(10);IF(start_tmp=1)THENIF

21、 pause_tmp=0 THENstate=0;-xiyiarr_mode=001;IF(num1=10+de1)THEN -arr_mode=010; IF(num1=10)THENarr_mode=011;IF(num1=5)THENarr_mode=100;END IF;END IF;END IF;IF(num1=0)THENstate=3;-結束arr_modebeep_flagbeep_flag=1;END CASE;ELSEnum1=num1-1;END IF;END IF;ELSIF up=1 THENnum1=num1+1;de1=de1+1;ELSIF down=1THEN

22、-暫停洗衣,down高電平調時,實現減1-IF(num1/=0)THENnum1=num1-1;de1H1=0;H2=0;M1=num2/10;M2=(num2)mod(10);IF(start_tmp=1)THENIF pause_tmp=0 THEN-開始漂洗,倒計時-state=1;arr_mode=001;-piaoxiIF(num2=10+de2)THENarr_mode=010;IF(num2=10)THENarr_mode=011;IF(num2=5)THENarr_mode=100;END IF;END IF;END IF;IF(num2=0)THENstate=3;-結束ar

23、r_modebeep_flagbeep_flag=1;END CASE;ELSEnum2=num2-1;END IF;END IF;ELSIF up=1THEN-暫停漂洗,up高電平調時,實現加1-num2=num2+1;de2=de2+1;ELSIF down=1THEN-暫停漂洗,down高電平調時,實現減1-IF(num2/=0)THENnum2=num2-1;de2S1=num3/10;S2=(num3)mod(10);H1=0;H2=0;M1=0;M2=0; -sx_1=1;sx_2=5;IF(start_tmp=1)THENIF pause_tmp=0 THEN-開始脫水,倒計時-

24、state=2;arr_mode=011;IF(num3=de3)THENarr_mode=100;END IF;IF(num3=0)THENstate=3;-結束arr_modebeep_flagbeep_flag=1;END CASE;ELSEnum3=num3-1;END IF;END IF;ELSIF up=1THEN-暫停脫水,up高電平調時,實現加1-num3=num3+1;de3=de3+1;ELSIF down=1THEN-暫停脫水,down高電平調時,實現減1-IF(num3/=0) THENnum3=num3-1;de3H1=0;H2=0;M1=num2/10;M2=(nu

25、m2)mod(10);S1=num3/10;S2=(num3)mod(10); IF(start_tmp=1)THENIF pause_tmp=0 THEN-開始漂洗脫水,先漂洗后脫水,倒計時- -先漂洗state=1;arr_mode=001;IF(num2=10+de2)THENarr_mode=010;IF(num2=10)THENarr_mode=011;IF(num2=5)THENarr_mode=100;END IF;END IF;END IF;IF(num2=0) THEN state=2;-后脫水arr_mode=011;IF(num3=de3)THENarr_mode=100

26、;END IF;IF(num3=0) THEN state=3;-結束arr_mode beep_flag beep_flag=1;END CASE;ELSE num3=num3-1;END IF;ELSE num2=num2-1;END IF;END IF;ELSIF up=1THEN-暫停,up高電平調時,實現加1-IF(choice_tmp=0) THEN -根據choice_tmp選擇加1操作的數碼管-num2=num2+1;de2=de2+1;ELSEnum3=num3+1;de3=de3+1;END IF;ELSIF down=1THEN-暫停,down高電平調時,實現減1-IF(

27、choice_tmp=0) THEN -根據choice_tmp選擇減1操作的數碼管-IF(num2/=0)THENnum2=num2-1;de2=de2-1;END IF;ELSEIF(num3/=0)THENnum3=num3-1;de3 H1=num1/10;H2=(num1)mod(10);M1=num2/10;M2=(num2)mod(10);S1=num3/10;S2=(num3)mod(10);IF(start_tmp=1)THENIF pause_tmp=0 THEN-開始洗衣漂洗脫水,先洗衣后漂洗后脫水,倒計時-開始洗衣state=0;arr_mode=001;IF(num1

28、=10+de1)THEN arr_mode=010;IF(num1=10)THENarr_mode=011;IF(num1=5)THENarr_mode=100;END IF;END IF;END IF;IF(num1=0) THEN state=1; -后漂洗arr_mode=001;IF(num2=10+de2)THENarr_mode=010;IF(num2=10)THENarr_mode=011;IF(num2=5)THENarr_mode=100;END IF;END IF;END IF;IF(num2=0)THENstate=2; -后脫水arr_mode=011;IF(num3=

29、de3)THENarr_mode=100;END IF;IF(num3=0) THEN state=3;-結束 arr_mode beep_flag beep_flag=1; END CASE;ELSE num3=num3-1;END IF;ELSE num2=num2-1;END IF;ELSE num1=num1-1;END IF;END IF;ELSIF up=1THEN-暫停,up高電平調時,實現加1-IF(choice_tmp=0) THEN -根據choice_tmp選擇加1操作的數碼管-num1=num1+1;de1=de1+1;ELSIF(choice_tmp=1) THENn

30、um2=num2+1;de2=de2+1;ELSEnum3=num3+1;de3=de3+1;END IF;ELSIF down=1THEN-暫停,down高電平調時,實現減1-IF(choice_tmp=0) THEN -根據choice_tmp選擇減1操作的數碼管-IF(num1/=0)THEN num1=num1-1;de1=de1-1;END IF;ELSIF(choice_tmp=1) THENIF(num2/=0)THEN num2=num2-1;de2=de2-1;END IF;ELSEIF(num3/=0)THEN num3=num3-1;de3NULL; END CASE;E

31、ND IF;END PROCESS;END behave;分頻:-div-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div ISPORT( clear,clk:IN STD_LOGIC; clk_500,clk_1,clk_100:BUFFER STD_LOGIC);-構造體內部可再用END clk_div;ARCHITECTURE behave OF clk_div IS CONSTANT DIV1:INTEGER:=50000;-分出500HZ用到的計數器模值-CO

32、NSTANT DIV2:INTEGER:=500;-500HZ分出1HZ用到的計數器模值-CONSTANT DIV3:INTEGER:=5;-500HZ分出100HZ用到的計數器模值-SIGNAL tmp1:INTEGER RANGE 0 TO DIV1;SIGNAL tmp2:INTEGER RANGE 0 TO DIV2;SIGNAL tmp3:INTEGER RANGE 0 TO DIV3;SIGNAL clktmp1:STD_LOGIC;SIGNAL clktmp2:STD_LOGIC;SIGNAL clktmp3:STD_LOGIC; BEGINp1:PROCESS(clear,cl

33、k)BEGIN IF clear=1THENtmp1=0;ELSIF(clkEVENT AND clk=1) THENIF (tmp1=DIV1/2) THENtmp1=0;clktmp1=NOT clktmp1; ELSEtmp1=tmp1+1; END IF;END IF;END PROCESS p1;clk_500=clktmp1;p2:PROCESS(clk_500,clear) BEGIN IF clear=1THENtmp2=0;ELSIF(clk_500EVENT AND clk_500=1) THENIF (tmp2=DIV2/2) THENtmp2=0;clktmp2=NOT

34、 clktmp2; ELSEtmp2=tmp2+1; END IF;END IF;END PROCESS p2;clk_1=clktmp2;p3:PROCESS(clk_500,clear) BEGIN IF clear=1THENtmp3=0;ELSIF(clk_500EVENT AND clk_500=1) THENIF (tmp3=DIV3/2) THENtmp3=0;clktmp3=NOT clktmp3; ELSEtmp3=tmp3+1; END IF;END IF;END PROCESS p3;clk_100=clktmp3; END behave;數碼管顯示模塊:LIBRARY

35、IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SHOW ISPORT(clk_500:IN STD_LOGIC;-500HZ信號,用于掃描數碼管-clear:IN STD_LOGIC; -復位信號-H1,H2,M1,M2,S1,S2:IN INTEGER RANGE 0 TO 9;-對應從左到右6位數碼管的每一位-CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-數碼管選通信號DISP:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-控制數碼管顯示的數

36、字的信號-END SHOW;ARCHITECTURE behave OF SHOW ISSIGNAL count:INTEGER RANGE 0 TO 5;-模值為5的計數器-SIGNAL disp_tmp:INTEGER RANGE 0 TO 9;-從0到9,顯示在數碼管上的數字-BEGINp1:PROCESS(clk_500,clear) -500HZ掃描信號控制計數器當前值-BEGIN IF clear=1 THENcount=0;ELSIF clk_500event AND clk_500=1 THENIF(count=5) THEN count=0;ELSE countdisp_tm

37、p=H1;CATdisp_tmp=H2;CATdisp_tmp=M1;CATdisp_tmp=M2;CATdisp_tmp=S1;CATdisp_tmp=S2;CATdisp_tmp=0;CAT DISP DISP DISP DISP DISP DISP DISP DISP DISP DISP DISP=00111111;-0END CASE;END PROCESS p3;END behave;防抖模塊:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fangdou is PORT(

38、 clk_100,d_in:IN STD_LOGIC;-clk_x為100HZ信號,d_in輸入的要防抖的信號- d_out:OUT STD_LOGIC);-d_out輸出防抖后的信號-END fangdou;ARCHITECTURE behave OF fangdou ISSIGNAL r,s,qr,qs,d1,d2,q1,q2,d3,d4,q3,q4,cp:STD_LOGIC;BEGINPROCESS(clk_100,r,s,qr,qs,d1,d2,q1,q2,d3,d4,q3,q4,cp)BEGINIF(clk_100event AND clk_100=1 ) THEN d1=d_in; d2=d1; q2=d2; d3=qr; d4=d3; q4=d4; END IF; r=(not d2)and (not

溫馨提示

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

評論

0/150

提交評論