數(shù)字電路課程設(shè)計(jì):基于FPGA和VHDL語(yǔ)言的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)
《數(shù)字電路課程設(shè)計(jì):基于FPGA和VHDL語(yǔ)言的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)字電路課程設(shè)計(jì):基于FPGA和VHDL語(yǔ)言的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)(16頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 08電氣8班 吳俊 學(xué)號(hào):20080711121數(shù)字電路課程設(shè)計(jì)題目:基于FPGA和VHDL語(yǔ)言的洗衣機(jī)控制系統(tǒng)設(shè)計(jì) 報(bào)告員:吳俊 20080711121 組員:彭亮,劉靖,鄭淑芳 日期:2010年12月 20日課題:洗衣機(jī)定時(shí)系統(tǒng)功能:1按內(nèi)定標(biāo)準(zhǔn)洗滌時(shí)間洗滌,脫水時(shí)間脫水; 2有預(yù)約洗衣功能,如:你預(yù)約1小時(shí),則系統(tǒng)會(huì)在1小時(shí)后自動(dòng)進(jìn)入洗滌狀態(tài); 3顯示屏上能實(shí)時(shí)顯示該機(jī)正處于何種狀態(tài)和該狀態(tài)下的時(shí)間; 4為該機(jī)設(shè)置了報(bào)警提示,及報(bào)警鈴聲控制時(shí)間; 5可以自己設(shè)定洗滌及脫水的時(shí)間; 6可以用于直接脫水; 7報(bào)警顯示;模塊分析:根據(jù)系統(tǒng)的設(shè)計(jì)要求,整個(gè)系統(tǒng)可分為鍵盤(pán)轉(zhuǎn)按鍵,洗衣機(jī)主控制器,
2、LCD三個(gè)模塊。各個(gè)模塊的作用如下: 1鍵盤(pán)轉(zhuǎn)按鍵:將板上鍵盤(pán)變?yōu)?6個(gè)按鍵,從左上到右下,按鍵按下時(shí),對(duì)應(yīng)輸出為1,松開(kāi)為0 ,它用于洗衣機(jī)外端口的輸入; 2洗衣機(jī)主控制器:它是整個(gè)系統(tǒng)正常有序工作的核心,按設(shè)計(jì)要求產(chǎn)生相應(yīng)的控制邏輯,以控制其他各部分的協(xié)調(diào)工作; 3LCD:在LCD上按格式顯示4組兩位數(shù)碼 D0D3 從左至右,它用于顯示功能中要顯示的信息;設(shè)計(jì)要求1.分析設(shè)計(jì)任務(wù),擬定多種設(shè)計(jì)方案,根據(jù)當(dāng)時(shí)的制作條件,選定適合的方案繪制框圖和設(shè)計(jì)流程。2.設(shè)計(jì)各部分單元電路或編寫(xiě)VHDL描述程序。3.對(duì)制作的電路進(jìn)行功能測(cè)試,分析各項(xiàng)技術(shù)指標(biāo);或?qū)υO(shè)計(jì)的電路進(jìn)行功能仿真,分析仿真波形。4.
3、總結(jié)設(shè)計(jì)資料,但因包括原理電路、VHDL描述、仿真波形的設(shè)計(jì)報(bào)告,校驗(yàn)并演示電路裝置。設(shè)計(jì)過(guò)程: 根據(jù)上述功能及要顯示的信息,我們分析得出10個(gè)狀態(tài),分別為s0(復(fù)位即等待命令,輸入),s1(輸入命令),s2(注水),s3(洗滌),s4(排水),s5(漂洗),s6(脫水),s7(報(bào)警響鈴計(jì)時(shí)),s8(預(yù)約計(jì)時(shí)),s9(結(jié)束,播放提示音計(jì)時(shí))。相關(guān)模塊的程序:1主控系統(tǒng):LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity xiyiji is port (CPIN,R : IN STD_LO
4、GIC; bgxh:IN STD_LOGIC; X_add_time: IN STD_LOGIC; X_minus_time:IN STD_LOGIC; start_1 : IN STD_LOGIC; start_2 : IN STD_LOGIC; T_MINUS_TIME: IN STD_LOGIC; T_ADD_TIME : IN STD_LOGIC; yuy_z_TIME : IN STD_LOGIC; xl_out: OUT STD_LOGIC; cp1_out: OUT STD_LOGIC; light: OUT STD_LOGIC; xi_yi_out: OUT STD_LOGIC
5、_VECTOR(7 DOWNTO 0 ); liucsj_out: OUT STD_LOGIC_VECTOR(7 DOWNTO 0 ); zt_2_out: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); zt_1_out: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);end entity ;architecture JGT of xiyiji is TYPE STATES IS (S0,S1,S2,S3,S4,s5,s6,s7,s8,s9); SIGNAL s: STATES; SIGNAL xidi: STD_LOGIC_VECTOR(7 DOWN
6、TO 0) ; SIGNAL TUOSHUI: STD_LOGIC_VECTOR(7 DOWNTO 0) ; SIGNAL PIAOXI: STD_LOGIC_VECTOR(7 DOWNTO 0) ; SIGNAL zhushui: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL PAISHUI:STD_LOGIC_VECTOR(7 DOWNTO 0); signal yuyue:std_logic_vector(7 downto 0); SIGNAL xlsj:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL xiyi:STD_LOGIC_V
7、ECTOR(7 DOWNTO 0); SIGNAL bgsj:STD_LOGIC_VECTOR(7 DOWNTO 0); signal zt1: std_logic_vector(7 downto 0); signal zt2: std_logic_vector(7 downto 0); signal liucsj: std_logic_vector(7 downto 0); SIGNAL xl: STD_LOGIC; SIGNAL cishu:integer range 0 to 5; signal cp:std_logic;beginPROCESS(CPIN,R)BEGINIF R=1 T
8、HEN S=S0; xidi=00000100;tuoshui=00000011;piaoxi=00000100;zhushui=00000011; PAISHUI=00000011;bgsj=00000010;xlsj=00000010; xl=0;cishu=2; yuyue=00000000; light=1; zt1=00010011; -輸入-s zt2=00010010; -rELSIF CPIN=1 AND CPINEVENT THEN if s=s0 or s=s1 then xiyi=00000000; else xiyiS if bgxh=1 then zt1=000000
9、10; -報(bào)警-b zt2=00001010; -j s= s7; elsif x_add_time=1then zt1=00011000; -洗滌加時(shí)-x zt2=00011010; -z xidi=xidi+1; if xidi=00011110 then xidi=00011110; end if; elsif x_minus_time=1then zt1=00011000; -洗滌減 -x zt2=00001010; -j xidi=xidi-1; if xidi=00000000 then xidi=00000000; end if; elsif T_add_time=1then z
10、t1=00010100; -脫水加 -t zt2=00011010; tuoshui=tuoshui+1; if tuoshui=00011001 then tuoshui=00011001; end if; elsif T_minus_time=1then zt1=00010100; -脫水減 zt2=00001010; tuoshui=tuoshui-1; if tuoshui=00000000 then tuoshui=00000000; end if; elsif yuy_z_time=1then zt1=00011001; -預(yù)約加 zt2=00011010; yuyue=yuyue
11、+1; if yuyue=00011001 then yuyue=00011001; end if; elsif start_1=1then if yuyue=00000000 then zt1=00011010;-注水 zt2=00010011; s=s2; Else zt1=00000100; -倒計(jì)時(shí) zt2=00001010; s=s8; end if; elsif start_2=1then zt1=00010100; -脫水 zt2=00010011; s=s6;xidi=00000000;piaoxi=00000000;zhushui=00000000; PAISHUI if b
12、gxh=1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; else IF zhushui=00000001 THEN zt1=00011000;-洗滌 zt2=00000100; S=S3; zhushui=00000000; else zhushui if bgxh=1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; else IF xidi=00000001 THEN zt1=00010000;-排水 zt2=00010011; s=s4; xidi=00000000; else xidiif bgxh=
13、1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; else IF paishui=00000001 THEN zt1=00010000;-漂洗 zt2=00011000; s=s5; paishui=00000000; else paishui if bgxh=1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; elsIF piaoxi=00000001 THEN zt1=00010100; -脫水 zt2=00010011; s=s6; piaoxi=00000000; else piaoxi if bgx
14、h=1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; elsIF tuoshui=00000001 THEN zt1=00001010; -洗完 zt2=00010011; S=s9; tuoshui=00000000; else tuoshui if bgsj=00000000 then xl=0;s=s0; else bgsj=bgsj-1; xl if bgxh=1 then zt1=00000010; -報(bào)警-b zt2=00001010; s=s7; elsIF yuyue=00000001 then zt1=00011010;-注水 zt
15、2=00010011; yuyue=00000000; s=s2; else yuyue=yuyue-1; zt1=00000100; -倒計(jì)時(shí) zt2 if cishu=0 then zt1=00010011; -輸入-s zt2=00010010; -r s=s1; elsif xlsj=00000000 then xlsj=00000001; xl=0;cishu=cishu-1; else xlsj=xlsj-1; xl s=s1; end case;end if;end process; process (xiyi,tuoshui,xl,zhushui,zt1,zt2,yuyue,x
16、idi,piaoxi,paishui,liucsj,CPIN) begin if x_add_time=1or x_minus_time=1then liucsj=xidi; elsif T_add_time=1 or T_minus_time=1then liucsj=tuoshui; elsif yuy_z_time=1then liucsj00000000then liucsj00000000 then liucsj00000000then liucsj00000000 then liucsj00000000then liucsj00000000 then liucsj= tuoshui
17、; elsif zhushui=00000000 and yuyue=00000000and xidi=00000000and paishui=00000000 and piaoxi=00000000 and tuoshui=00000000 then liucsj=00000000; end if; if xiyi 10 then xi_yi_out= xiyi; elsif xiyi20 then xi_yi_out=xiyi+6; elsif xiyi30 then xi_yi_out= xiyi+12; elsif xiyi40 then xi_yi_out=xiyi+18; elsi
18、f xiyi50 then xi_yi_out=xiyi+24; elsif xiyi60 then xi_yi_out=xiyi+30; elsif xiyi70 then xi_yi_out=xiyi+36; end if; if liucsj 10 then liucsj_out= liucsj; elsif liucsj20then liucsj_out =liucsj+6; elsif liucsj30 then liucsj_out =liucsj+12; elsif liucsj40 then liucsj_out = liucsj+18; elsif liucsj50 then
19、 liucsj_out = liucsj+24; elsif liucsj60 then liucsj_out = liucsj+30; elsif liucsj70 then liucsj_out = liucsj+36; end if; if xl=1 then xl_out=xl;cp1_out=CPIN; else xl_out=0;cp1_out=0; end if; zt_1_out=zt1; zt_2_out=zt2;end process ;end architecture jgt;-主控程序2鍵盤(pán)轉(zhuǎn)按鍵程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_11
20、64.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity PADTOKEY is port (CPIN,R :IN STD_LOGIC; Y: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); ICOL : IN STD_LOGIC_VECTOR(3 DOWNTO 0); OROW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END ENTITY;architecture JGT of PADTOKEY is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES;
21、 SIGNAL SROW : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CPCT : INTEGER RANGE 0 TO 255; SIGNAL CTDELAY: INTEGER RANGE 0 TO 511; SIGNAL CP:STD_LOGIC; BEGIN PROCESS(CPIN) BEGIN IF CPIN=1 AND CPIN EVENT THEN IF CPCT=255 THEN CPCT=0;CP= NOT CP; ELSE CPCT=CPCT+1; END IF; END IF; END PROCESS; PROCESS(CP,R) VAR
22、IABLE N:INTEGER RANGE 0 TO 12; BEGIN IF R=1 THEN S=S0;Y=0000000000000000;SROWSOROW=SROW;SSY(3 DOWNTO 0)Y(7 DOWNTO 4)Y(11 DOWNTO 8)Y(15 DOWNTO 12)NULL; END CASE; WHEN S3=IF N=12 THEN N:=0;S=S4;CTDELAY=0;SROW=1110; ELSE N:=N+4;S=S1;SROWIF CTDELAY=511 THEN S=S1;CTDELAY=0; ELSE CTDELAY=CTDELAY+1; END IF
23、; END CASE;END IF;END PROCESS;END JGT;3LCD模塊程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity GENLCD8 is port (CPIN,R,BUSY :IN STD_LOGIC; xlxh :IN STD_LOGIC; xy_sj,lc_sj,zhuangt_1,zhuangt_2 :IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DAT
24、A : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end entity ;architecture JGT of GENLCD8 is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL LCDPT : INTEGER RANGE 0 TO 20; SIGNAL CPCT: INTEGER RANGE 0 TO 65535; SIGNAL CP: STD_LOGIC; SIGNAL D3: STD_LOGIC_VECTOR(7
25、 DOWNTO 0);beginPROCESS(CPIN,R)BEGINCLK=CPIN;IF R=1 THEN CPCT=65535;ELSIF CPIN=1 AND CPIN EVENT THEN IF CPCT=0 THEN CPCT=65535;CP=NOT CP;-分頻為500US周期 ELSE CPCT=CPCT-1; END IF;END IF;END PROCESS;PROCESS(CP,R)-主進(jìn)程:擬采用500us時(shí)鐘,即在500us后完成狀態(tài)轉(zhuǎn)換,修改LCDPT指針BEGINIF R=1 THEN -S0:初始狀態(tài),在R=1時(shí),處于S0狀態(tài),LCDPT=0 S=S0;LC
26、DPT=0;RST S=S1;LCDPT=0;RST RST=0;STROBE=0;-輸出RST=0; IF BUSY=0 THEN-判斷BUSY=0? LCDPT=LCDPT+1;-:Y: LCDPT+1 IF LCDPT=7 THEN-LCDPT到固定最后? S=S3;-:Y: 轉(zhuǎn)S3 ELSe S S=S1;STROBE STROBE=0; IF BUSY=0 THEN-BUSY=0? IF LCDPT=14 THEN LCDPT=7; ELSe LCDPT=LCDPT+1; END IF; S STROBE=1;S NULL;- END CASE;END IF; END PROCESS
27、;PROCESS(LCDPT,xlxh)-選擇輸出進(jìn)程(LCDPT)BEGINif xlxh=1 then D3=00010001; else D3 NULL;WHEN 1=DATA=00011000;ADDR=0010;OUTLINEDATA=00011001;ADDR=0001;OUTLINEDATA=00001100;ADDR=0110;OUTLINEDATA=00000011;ADDR=0101;OUTLINEDATA=00011010;ADDR=1010;OUTLINEDATA=00010100;ADDR=1001;OUTLINEDATA=0011&xy_sj(7 DOWNTO 4)
28、;ADDR=0011;OUTLINEDATA=0011&xy_sj(3 DOWNTO 0);ADDR=0010;OUTLINEDATA=0011&lc_sj(7 DOWNTO 4);ADDR=0110;OUTLINEDATA=0011&lc_sj(3 DOWNTO 0);ADDR=0101;OUTLINEDATA=zhuangt_1;ADDR=1010;OUTLINEDATA=zhuangt_2;ADDR=1001;OUTLINEDATA=0000&D3(7 DOWNTO 4);ADDR=1110;OUTLINEDATA=0000&D3(3 DOWNTO 0);ADDR=1101;OUTLIN
29、E NULL;END CASE;END PROCESS;ENDJGT;下板后具體模擬演示過(guò)程:-接通電源,按下復(fù)位鍵1,LCD上顯示如下: 報(bào)警狀態(tài)流程洗衣00ZTLCXY00SR0000-再按下5號(hào)鍵(x_add_time 代表洗衣時(shí)間在標(biāo)準(zhǔn)定值基礎(chǔ)上加一個(gè)單位時(shí)間,為實(shí)驗(yàn)以觀察一個(gè)單位時(shí)間在這兒都是取值1個(gè)脈沖),則LC兩格下依次顯示05(表示洗衣時(shí)間在標(biāo)準(zhǔn)的基礎(chǔ)上加了一個(gè)單位時(shí)間);-再按下7號(hào)鍵(T_minus_time代表脫水時(shí)間在標(biāo)準(zhǔn)基礎(chǔ)上減一個(gè)單位時(shí)間),則LC兩格下依次03;-再按下6號(hào)鍵(yuy_z_time表示預(yù)約時(shí)間為一個(gè)單位時(shí)間),LC兩格下依次顯示01;-再按下3號(hào)鍵
30、(start_1表示開(kāi)始進(jìn)入洗衣?tīng)顟B(tài));LC顯示預(yù)約時(shí)間倒計(jì)時(shí)01;ZT顯示DJ(倒計(jì)時(shí));XY顯示18(整個(gè)洗衣過(guò)程的用時(shí)); 接著LCD上顯示的就是狀態(tài)之間的變化等.如下:ZTLCXY00ZSO31700XD051400PS030900PX030600TS030300JS020000RS0000當(dāng)ZT顯示JS時(shí)表示洗衣結(jié)束,LC顯示的是結(jié)束提示音的時(shí)間,洗衣時(shí)間XY顯示為00;當(dāng)提示音為00時(shí)狀態(tài)又轉(zhuǎn)到復(fù)位狀態(tài)即輸入(等待命令);與此操作類似的仿真圖如下:原理圖如下心得體會(huì) 在為期兩周的數(shù)字課程設(shè)計(jì)的時(shí)間里,我初步掌握了altium designer在硬件開(kāi)發(fā)方面的應(yīng)用,并且學(xué)會(huì)了用VHD
31、L語(yǔ)言進(jìn)行簡(jiǎn)單的硬件程序描述,不僅開(kāi)拓了自己的視野而且讓自己的邏輯思維更加敏捷與嚴(yán)謹(jǐn)。大家都清楚這個(gè)課程設(shè)計(jì)中老師管得較為寬松,而且老師讓我們自己設(shè)計(jì)的主要就是主控程序這一塊,所以一開(kāi)始我們小組都不待見(jiàn)它,感覺(jué)應(yīng)該蠻容易就能完成了?;谶@一點(diǎn)我們小組的課題拖了很久才定下來(lái)。雖然當(dāng)我來(lái)寫(xiě)主控程序時(shí)感覺(jué)和C語(yǔ)言的有很多類似的地方,所以給我的錯(cuò)覺(jué)是不是很難,可是當(dāng)我去機(jī)房仿真時(shí)發(fā)現(xiàn)了一些邏輯上的問(wèn)題,這時(shí)我發(fā)現(xiàn)它與C語(yǔ)言還是有區(qū)別的。還有就是LCD,它是很實(shí)際性的器件,我自己仿真成功了,可就是下板子老是出來(lái)了信息。后來(lái)才知道對(duì)于LCD只有單獨(dú)下板子成功了才能表示LCD程序無(wú)誤,看其仿真波形無(wú)法判斷的。當(dāng)自己的作品順利顯示在FPGA開(kāi)發(fā)板上的時(shí)候,才明白我們平時(shí)缺乏的是實(shí)踐能力,以至于在邏輯上還停留在理論上,唯有多加實(shí)踐,才能讓我們更加穩(wěn)固的掌握一門(mén)學(xué)科和技術(shù)。 16
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版必修五《林教頭風(fēng)雪山神廟》ppt課件
- 人教版《分?jǐn)?shù)的意義和性質(zhì)》(完美版)課件
- 正比例函數(shù)及性質(zhì)
- 企業(yè)戰(zhàn)略環(huán)境分析
- 前列腺增生3課件
- 煉鐵基礎(chǔ)非高爐煉鐵課件
- 小兒腹瀉小講課分析課件
- 職業(yè)經(jīng)理人的壓力管理課件
- 街道改造PPT方案展示-項(xiàng)目概況案例分析現(xiàn)存建筑質(zhì)量設(shè)計(jì)理念課件
- 2022年北師大版小學(xué)數(shù)學(xué)《小數(shù)目物品平均分》課件
- 作文指導(dǎo)--場(chǎng)面描寫(xiě)-PPT
- 肺癌診斷和治療的幾個(gè)問(wèn)題
- 一下《王二小》
- 第八章專題八(教育精品)
- 六年級(jí)數(shù)學(xué)下冊(cè) 正負(fù)數(shù) 2課件 人教新課標(biāo)