数电课程设计报告自动洗衣机.docx
- 文档编号:10624345
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:28
- 大小:296.38KB
数电课程设计报告自动洗衣机.docx
《数电课程设计报告自动洗衣机.docx》由会员分享,可在线阅读,更多相关《数电课程设计报告自动洗衣机.docx(28页珍藏版)》请在冰豆网上搜索。
数电课程设计报告自动洗衣机
数电课程设计
报告
课题:
全自动洗衣机
报告人:
XX
学号:
XXXXXXX
班级:
XXX
设计时间:
XXXX-XXXX
目录
一、全自动洗衣机的功能2
1、功能说明2
2、状态机状态2
3、按键2
二、程序清单2
1、主控制程序2
2、设置时间模块8
3、键盘转按键10
4、LCD显示模块12
5、LED模块15
6、蜂鸣器模块16
三、模拟演示17
四、仿真波形17
五、原理图18
六、心得体会19
一、全自动洗衣机的功能:
1、功能说明:
1)复位,设定洗涤时间,注水,开始洗涤,放水,甩干,结束。
2)复位后,直接拨拨码开关3,即可跳过洗涤过程直接进行甩干。
3)故障模拟时,能够自动结束运行并鸣响提醒,直到故障信号结束。
4)正常运行流程结束时,有1秒的鸣响。
5)在洗涤过程中,实现正转3秒,暂停1秒,反转2秒的循环工作模拟。
注:
由于实际的洗衣机中,放水结束和报警是由感应设备感应的,在设计中,我们用拨码开关开关代替。
2、状态机状态:
S0:
初始化S1:
等待S2:
时间设定S3:
注水
S4:
洗涤S5:
放水S6:
甩干S7:
结束
S8:
报警S9:
空状态S10:
时间设定的延时
3、按键:
拨码开关:
1:
复位(R)
2:
开始(START)
3:
开始甩干(START_SG)
4:
时间设定(SET-TIME)
5:
注水结束(IN_END)
6:
放水结束(OUT_END)
7:
无
8:
故障(GZ)
键盘:
1:
SL+12:
SH+1
3:
ML+1C:
MH+1
二、程序清单
1、主控制程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYCONTROLLERis
PORT(CPIN,R,START,START_SHUAIGAN,SET_TIME,IN_END,OUT_END,GUZHANG:
INSTD_LOGIC;
MH:
INSTD_LOGIC_VECTOR(3DOWNTO0);--分十位
ML:
INSTD_LOGIC_VECTOR(3DOWNTO0);--分个位
SH:
INSTD_LOGIC_VECTOR(3DOWNTO0);--秒十位
SL:
INSTD_LOGIC_VECTOR(3DOWNTO0);--秒个位
MHQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--分十位
MLQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--分个位
SHQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--秒十位
SLQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--秒个位
SPEAKER,ERROR_LIGHT,DONE:
OUTSTD_LOGIC;
MODEL:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
MOTOR:
OUTSTD_LOGIC_VECTOR(1DOWNTO0)
);
ENDENTITY;
ARCHITECTUREXYJOFCONTROLLERIS
SIGNALCPCT:
INTEGERRANGE0TO999999;
SIGNALCP,SPEAK:
STD_LOGIC;
SIGNALZT_N:
INTEGERRANGE0TO99;
SIGNALCNT:
INTEGERRANGE0TO99;
SIGNALTMP1,TMP2,SGTime,RING_Time,ZTime,TMPTime:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALMODEL_S:
STD_LOGIC_VECTOR(3DOWNTO0);
TYPESTATESIS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9);
TYPES4STATESIS(P0,P1,P2,P3);
SIGNALS:
STATES;
SIGNALP:
S4STATES;
SIGNALMHT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALMLT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSHT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSLT:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CPIN,R)
BEGIN
IFR='1'THEN
CPCT<=249999;
ELSIFCPIN='1'ANDCPIN'EVENTTHEN
IFCPCT=0THEN
CPCT<=249999;CP<=NOTCP;
ELSE
CPCT<=CPCT-1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CP,R)
BEGIN
IFR='1'THEN
S<=S0;TMP1<=X"1E";TMP2<=X"3C";SGTime<=X"28";RING_Time<=X"28";TMPTime<=X"08";
ERROR_LIGHT<='0';MODEL_S<="0000";SPEAK<='0';DONE<='0';
CNT<=20;
MHT<="0000";
MLT<="0000";
SHT<="0000";
SLT<="0000";
ELSIFCP='1'ANDCP'EVENTTHEN
CASESIS
WHENS0=>MODEL_S<="0000";S<=S1;TMP1<=X"1E";TMP2<=X"3C";ERROR_LIGHT<='0';CNT<=20;
SGTime<=X"28";RING_Time<=X"28";TMPTime<=X"08";SPEAK<='0';DONE<='0';
MHT<="0011";
MLT<="0011";
SHT<="0000";
SLT<="0000";
WHENS1=>MODEL_S<="0001";
IFSET_TIME='1'THEN
S<=S2;
ELSIFSTART='1'THEN
S<=S3;
ELSIFSTART_SHUAIGAN='1'THEN
S<=S6;
MHT<="0000";
MLT<="0000";
SHT<="0000";
SLT<="0000";
ENDIF;
WHENS2=>MODEL_S<="0010";
IFGUZHANG='1'THEN
S<=S8;
ELSIFSTART='1'THEN
S<=S3;
ELSE
MHT<=MH;
MLT<=ML;
SHT<=SH;
SLT<=SL;
ENDIF;-----------------------------------------时间设定
WHENS3=>MODEL_S<="0011";
IFGUZHANG='1'THEN
S<=S8;
ELSE
IFIN_END='1'THEN
S<=S4;
ENDIF;
ENDIF;----------------------------------------------注水
WHENS4=>MODEL_S<="0100";
IFGUZHANG='1'THEN
S<=S8;
ELSIFMHT="0000"ANDMLT="0000"ANDSHT="0000"ANDSLT="0000"THEN
S<=S5;
ELSIFSLT="0000"ANDSHT="0000"ANDMLT="0000"THEN
IFCNT=0THEN
MLT<="1001";SHT<="0101";SLT<="1001";MHT<=MHT-1;CNT<=20;
ELSE
CNT<=CNT-1;
ENDIF;
ELSIFSLT="0000"ANDSHT="0000"THEN
IFCNT=0THEN
SLT<="1001";SHT<="0101";MLT<=MLT-1;CNT<=20;
ELSE
CNT<=CNT-1;
ENDIF;
ELSIFSLT="0000"THEN
IFCNT=0THEN
SLT<="1001";SHT<=SHT-1;CNT<=20;
ELSE
CNT<=CNT-1;
ENDIF;
ELSE
IFCNT=0THEN
SLT<=SLT-1;CNT<=20;
ELSE
CNT<=CNT-1;
ENDIF;
ENDIF;---------------------------------------------洗涤
WHENS5=>MODEL_S<="0101";
IFGUZHANG='1'THEN
S<=S8;
ELSE
IFOUT_END='1'THEN
S<=S6;
ENDIF;
ENDIF;----------------------------------------------放水
WHENS6=>MODEL_S<="0110";
IFGUZHANG='1'THEN
S<=S8;
ELSE
IFSGTime>X"00"THEN
SGTime<=SGTime-1;
ELSE
SGTime<=X"28";
S<=S7;
ENDIF;
ENDIF;---------------------------------------------甩干
WHENS7=>MODEL_S<="0111";
IFRING_Time>X"00"THEN
SPEAK<='1';RING_Time<=RING_Time-1;DONE<='1';
ELSE
S<=S9;SPEAK<='0';MODEL_S<="0000";
ENDIF;-----------------------结束,蜂鸣器响两秒,转入状态S9
WHENS8=>MODEL_S<="1000";
IFGUZHANG='1'THEN
SPEAK<='1';ERROR_LIGHT<='1';--报警,蜂鸣器持续响
ELSE
S<=S9;SPEAK<='0';MODEL_S<="0000";--故障排除,转入状态S9
ERROR_LIGHT<='0';
ENDIF;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(MODEL_S)
BEGIN
MODEL<=MODEL_S;
ENDPROCESS;
PROCESS(SPEAK)
BEGIN
SPEAKER<=SPEAK;
ENDPROCESS;
PROCESS(CP,R,MHT,MLT,SHT,SLT)
BEGIN
IFR='1'THEN
P<=P0;ZTime<=X"14";MOTOR<="00";ZT_N<=03;
ELSIFCP='1'ANDCP'EVENTTHEN
IFS=S4THEN
CASEPIS
WHENP0=>P<=P1;ZTime<=X"14";MOTOR<="00";ZT_N<=03;
WHENP1=>MOTOR<="01";
IFZT_N>0THEN
IFZTime>0THEN
ZTime<=ZTime-1;
ELSE
ZT_N<=ZT_N-1;
ZTime<=X"14";
ENDIF;
ELSE
P<=P2;ZTime<=X"14";ZT_N<=01;
ENDIF;
WHENP2=>MOTOR<="10";
IFZT_N>0THEN
IFZTime>0THEN
ZTime<=ZTime-1;
ELSE
ZT_N<=ZT_N-1;
ZTime<=X"14";
ENDIF;
ELSE
P<=P3;ZTime<=X"14";ZT_N<=02;
ENDIF;
WHENP3=>MOTOR<="11";
IFZT_N>0THEN
IFZTime>0THEN
ZTime<=ZTime-1;
ELSE
ZT_N<=ZT_N-1;
ZTime<=X"14";
ENDIF;
ELSE
P<=P1;ZTime<=X"14";ZT_N<=03;
ENDIF;
WHENOTHERS=>NULL;
ENDCASE;
ELSE
MOTOR<="00";
ENDIF;---------------执行左转3s,暂停1s,再右转2s
ENDIF;
ENDPROCESS;
PROCESS(MHT,MLT,SHT,SLT)
BEGIN
MHQ<=MHT;
MLQ<=MLT;
SHQ<=SHT;
SLQ<=SLT;
ENDPROCESS;
ENDXYJ;
2、设置时间模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdecoderIS
PORT(RESET:
INSTD_LOGIC;
START:
INSTD_LOGIC;
SET_TIME:
INSTD_LOGIC;
KEY:
INSTD_LOGIC_VECTOR(3DOWNTO0);--KEY[3..0]分十分个秒十秒个
MH:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--分十位
ML:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--分个位
SH:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--秒十位
SL:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)--秒个位
);
END;
ARCHITECTUREmOFdecoderIS
SIGNALMHT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALMLT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSHT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSLT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALEDIT:
STD_LOGIC;
BEGIN
PROCESS(START,RESET)--电路可输入状态设置
BEGIN
IFRESET='1'THEN
EDIT<='1';
ELSIFSTART'EVENTANDSTART='1'THEN--如果start按下将edit置0
EDIT<='0';
ENDIF;
ENDPROCESS;
PROCESS(RESET,KEY,EDIT)--手动设置时间
BEGIN
IFRESET='1'THEN
MHT<="0000";
MLT<="0000";
SHT<="0000";
SLT<="0000";
ELSIFEDIT='1'ANDSET_TIME='1'THEN
IFKEY(3)'EVENTANDKEY(3)='1'THEN--设置分的十位
IFMHT="0101"THEN
MHT<="0000";
ELSE
MHT<=MHT+1;
ENDIF;
ENDIF;
IFKEY
(2)'EVENTANDKEY
(2)='1'THEN--设置分的个位
IFMLT="1001"THEN
MLT<="0000";
ELSE
MLT<=MLT+1;
ENDIF;
ENDIF;
IFKEY
(1)'EVENTANDKEY
(1)='1'THEN--设置秒的十位
IFSHT="0101"THEN
SHT<="0000";
ELSE
SHT<=SHT+1;
ENDIF;
ENDIF;
IFKEY(0)'EVENTANDKEY(0)='1'THEN--设置秒的个位
IFSLT="1001"THEN
SLT<="0000";
ELSE
SLT<=SLT+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(MHT,MLT,SHT,SLT)
BEGIN
MH<=MHT;
ML<=MLT;
SH<=SHT;
SL<=SLT;
ENDPROCESS;
endm;
3、键盘转按键:
--CPIN时钟脉冲输入按10MHz设计;复位R
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
entityPADTOKEYis
port(
CPIN,R,VALIDKEY:
INSTD_LOGIC;
KEY:
INSTD_LOGIC_VECTOR(3DOWNTO0);
KEYOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0);
CLK_1MHZ,RST:
OUTSTD_LOGIC
);
endentity;
architectureJGTofPADTOKEYis
SIGNALCTCP:
INTEGERRANGE0TO5;
SIGNALCPO:
STD_LOGIC;
SIGNALCTCPO:
INTEGERRANGE0TO4999;
TYPESTATESIS(S0,S1,S2);
SIGNALS:
STATES;
begin
PROCESS(CPIN)
BEGIN
IFCPIN='1'ANDCPIN'EVENTTHEN
IFCTCP=5THEN
CPO<=NOTCPO;CTCP<=0;
ELSE
CTCP<=CTCP+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CPO,R)
BEGIN
CLK_1MHZ<=CPO;
IFR='1'THEN
RST<='0';S<=S0;CTCPO<=0;KEYOUT<="0000000000000000";
ELSIFCPO='1'ANDCPO'EVENTTHEN
IFCTCPO/=4999THEN
CTCPO<=CTCPO+1;
ELSE
CTCPO<=0;
CASESIS
WHENS0=>RST<='0';
IFVALIDKEY='1'THEN
S<=S1;
CASEKEYIS
WHEN"0000"=>KEYOUT<="0000000000000001";
WHEN"0001"=>KEYOUT<="0000000000000010";
WHEN"0010"=>KEYOUT<="0000000000000100";
WHEN"0011"=>KEYOUT<="0000000000001000";
WHEN"0100"=>KEYOUT<="0000000000010000";
WHEN"0101"=>KEYOUT<="0000000000100000";
WHEN"0110"=>KEYOUT<="0000000001000000";
WHEN"0111"=>KEYOUT<="0000000010000000";
WHEN"1000"=>KEYOUT<="0000000100000000";
WHEN"1001"=>KEYOUT<="0000001000000000";
WHEN"1010"=>KEYOUT<="0000010000000000";
WHEN"1011"=>KEYOUT<="0000100000000000";
WHEN"1100"=>KEYOUT<="0001000000000000";
WHEN"1101"=>KEYOUT<="0010000000000000";
WHEN"1110"=>KEYOUT<="0100000000000000";
WHEN"1111"=>KEYOUT<="1000000000000000";
WHENOTHERS=>NULL;
ENDCASE;
ELSE
S<=S0;KEYOUT<="0000000000000000";
ENDIF;
WHENS1=>RST<='1';S<=S2;
WHENS2=>RST<='0';S<=S0;
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESS;
endarchitectureJGT;
4、LCD显示模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityLCDis
port(CPIN,RESET,BUSY:
INSTD_LOGIC;
MH,ML,SH,SL:
INSTD_LOGIC_VECTOR(3DOWNTO0);
MODL:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CLK,RST,STROBE,OUTLINE:
OUTSTD_LOGIC;
DATA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
ADDR:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
endentity;
architectureJGTofLCDis
TYPESTATESIS(S0,S1,S2,S3,S4);
SIGNALS:
STATES;
SIGNALLCDPT:
INTEGERRA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 自动 洗衣机