全自动洗衣机单片机课程设计Document number【980KGB-6898YT-769T8CB-246UT-18GG08】一、设计目标1、全自动洗衣机用51系列单片机89C51控制全自动洗衣机的运行,使其能自动地完成进水、洗涤、漂洗、脱水等功能。
不同的衣物,洗涤、漂洗、脱水和洗衣电机正反转所用的时间不同,要求设计能够实现过程选择,并在LED显示屏上显示过程代码。
在运行的时候能显示完成整个过程的剩余时间。
2、洗衣机主要功能:进水、洗涤、脱水、排水具体功能有浸泡、强力洗、轻柔洗、标准洗、快速洗、单独洗、单独脱水、漂洗脱水二、设计过程洗衣机要实现衣服的洗涤、漂洗和脱水,离不开进水、电机正转、电机反转和排水这四个动作。
上述四个动作,是通过单片机的P0端口,做输出端口,去控制双向可控硅通断来实现的,如下图所示。
同时加上输入开关的按钮、数码管显示器、蜂鸣按警器和欠压检测保护电路等,就可以形成完整的单片机控制系统。
通过软件编程达到对整个洗衣过程进行控制、检测以及与用户交互。
三、设计结果(1)硬件部分1、电路图2、PCB版图(2)、汇编语言洗衣机的一次洗衣过程控制过程主要为顺序控制,如先进水、洗涤(电机正转反转)、再排水脱水。
将把脱水、洗涤、进水单独编为一个子程序,由主程序根据过程选择,不断调用,可以减少源程序的长度,不同的洗衣过程,三大动作的时间不同,这可以通过建立数据表格,通过查表的方式获得每个洗衣过程所需时间。
此外,还需编出显示子程序,延时子程序供主程序不断调用。
1、流程图(1)、洗衣机控制系统主程序流程图(2)洗涤动作子程序流程图(3)脱水子程序流程图2、程序ORG 0000HLJMP MAINORG 0030H;延迟10ms程序;使用R0, R1DELAY10MS:MOV R0, #100D;DELAY10MS02:MOV R1, #23DDELAY10MS01:DJNZ R1, DELAY10MS01DJNZ R0, DELAY10MS02RET;显示子程序;闪烁标志位:=0不闪烁,=1在1s 内亮灭一次;程序开始标志:=1开始, =0选择;显示缓冲:50H;经过的时间:53H,52H,51H=分钟,秒,20ms的次数;总时间:TOTALTIME=40HTOTALTIME EQU 40H DISPLAY:PUSH ACCPUSH PSWSETB RS0JNB , DISPLAY01MOV A, 50H ;高位是否为零CJNE A, #0AH, DISPLAY05 DISPLAY05:JNC DISPLAY06XRL A, #0F0H ;高位为零不显示MOV 50H, ADISPLAY06:JNB , DISPLAY01 ;是否需闪烁MOV A, 51HCJNE A, #25D, DISPLAY02; DISPLAY02:JC DISPLAY01MOV 50H, #0FFH ;暗显示(不亮)DISPLAY01:MOV A, 50H ;显示低位ANL A, #0FH;MOV DPTR, #DISPLAYTAB;MOVC A, @A+DPTR;MOV P2, A;SETBCLRLCALL DELAY10MSMOV A, 50H ;显示高位SWAP AANL A, #0FH;MOV DPTR, #DISPLAYTAB;MOVC A, @A+DPTR;MOV P2, A;CLRSETBLCALL DELAY10MSINC 51H ;累计时间MOV A, #50D ;XRL A, 51H ;JNZ DISPLAY03;50次的20ms未到MOV 51H, A ;INC 52H;1sMOV A, #60D;XRL A, 52H ;JNZ DISPLAY03MOV 52H, A ;INC 53H;1minDISPLAY03:JNB , DISPLAY04;MOV A, TOTALTIME ;计算剩余时间CLR CSUBB A, 53H ;MOV B, #10D;16进制转换到10进制DIV ABSWAP AXRL A, B ;MOV 50H, A ; DISPLAY04:POP PSWPOP ACCRETDISPLAYTAB: ;共阳数码管反向编码DB 03H, 9FH, 25H, 0DH, 99H;01234DB 49H, 41H, 1FH, 01H, 09H;56789DB 11H, 0C1H, 63H, 85H, 61H ;ABCDEDB 0FFH ;暗;重算时间;入口数据:A=总时间(分)CALUTIME:MOV TOTALTIME, ACLR AMOV 52H, A ;秒MOV 53H, A ;经过的分钟RET;鸣叫一下, 时长120msPLAY:SETBMOV R0, #12D;PLAY1:LCALL DISPLAYDJNZ R0, PLAY1CLRRET;鸣叫六下, 时长240ms*12 ALARM:SETBMOV R1, #11D;ALARM2:MOV R0, #12D;ALARM3:LCALL DISPLAYDJNZ R0, ALARM3CPLDJNZ R1, ALARM2RET;;;;;洗涤用子程序;洗涤时暂停按键XDPAUSE:JB , XDPS01LCALL DISPLAYJB , XDPS01PUSH 52HPUSH 53HCLR ;不闪烁MOV A, P1PUSH ACCMOV P1, #00HLCALL PLAYXDPS02:LCALL DISPLAYJNB , XDPS02 ;等待按键释放XDPS03:LCALL DISPLAYJB , XDPS03LCALL DISPLAYJB , XDPS03LCALL PLAYXDPS04:LCALL DISPLAYJNB , XDPS04 ;等待按键释放POP ACCMOV P1, ACCSETBPOP 53HPOP 52HXDPS01:RET;洗涤时延迟DELAY320MS:MOV R2, #14D;SJMP XDELAY01;洗涤时延迟XDELAY560MS:MOV R2, #28DSJMP XDELAY01;洗涤时延迟1sXDELAY1S:MOV R2, #50DSJMP XDELAY01;洗涤时延迟DELAY1600MS:MOV R2, #80DXDELAY01:LCALL DISPLAYLCALL XDPAUSE ;暂停按键LCALL IFINWATER ;水位开关DJNZ R2, XDELAY01RET;洗涤前进水子程序INWATER:JNB , PI1;SETBMOV A, 53H;ADD A, #20D;MOV 59H, A;PI3:MOV A, 53H;XRL A, 59H;JNZ PI2LCALL ERRORE4SJMP INWATERPI2:JNB , PI4;LCALL DISPLAYLCALL XDPAUSESJMP PI3PI4:CLRPI1:RET;洗涤时是否再进水IFINWATER:JNB , IF1;MOV A, P1;PUSH ACCMOV P1, #00H;LCALL INWATER ;进水POP ACCMOV P1, A;IF1:RET;不能进水报警ERRORE4:PUSH 52HPUSH 53HCLRMOV A, P1;PUSH ACCMOV P1, #00H;MOV 50H, #0E4HLCALL ALARME4PK2:LCALL DISPLAYJNB , E4PK2;LCALL DISPLAYJNB , E4PK2E4PK3:LCALL DISPLAYJB , E4PK3LCALL DISPLAYJB , E4PK3SETBPOP ACCMOV P1, ACC;POP 53HPOP 52HRET;排水时延迟1s DELAY1000MS:MOV R2, #50D;DLY51:LCALL DISPLAYLCALL XDPAUSE ;暂停按键DJNZ R2, DLY51;RET;排水子程序OUTWATER:CLR ASETBJB , OUTW1MOV R7, #60DOUTW2:LCALL DELAY1000MSJB , OUTW4DJNZ R7, OUTW2LCALL ERRORE1SJMP OUTWATEROUTW4:CLR CMOV A, #60DSUBB A, R7OUTW1:ADD A, #60DMOV R7, AOUTW3:LCALL DELAY1000MSDJNZ R7, OUTW3RET;不能排水报警ERRORE1:PUSH 52HPUSH 53HCLRMOV A, P1;PUSH ACCMOV P1, #00H;MOV 50H, #0E1HLCALL ALARME1PK2:LCALL DISPLAYJNB , E1PK2;LCALL DISPLAYJNB , E1PK2E1PK3:LCALL DISPLAYJB , E1PK3LCALL DISPLAYJB , E1PK3SETBPOP ACCMOV P1, ACC;POP 53HPOP 52HRET;脱水时暂停按键TPKEY:JB , TPK1;LCALL DISPLAYJB , TPK1;PUSH 52HPUSH 53HCLRLCALL PLAYMOV A, P1;PUSH ACCJNB , TPK6CLRMOV R0, #250 ;延迟5秒TPK5:LCALL DISPLAYDJNZ R0, TPK5TPK6:MOV P1, #00H;TPK2:LCALL DISPLAYJNB , TPK2;TPK3:LCALL DISPLAYJB , TPK3LCALL DISPLAYJB , TPK3LCALL PLAYSETBSETBMOV R0, #250 ;延迟5秒TPK4:LCALL DISPLAYDJNZ R0, TPK4POP ACCMOV P1, ACC;POP 53HPOP 52HTPK1:RET;脱水时开盖, 脱水时安全报警IFOPEN:ERRORE2:JNB , TTPK1;LCALL DISPLAYJNB , TTPK1;PUSH 52HPUSH 53HCLRMOV A, P1;PUSH ACC; LCALL ALARMJNB , TTPK6CLRMOV R0, #250 ;延迟5秒TTPK5:LCALL DISPLAYDJNZ R0, TTPK5TTPK6:MOV P1, #00H;MOV 50H, #0E2HTTPK2:LCALL DISPLAYJB , TTPK2;TTPK3:LCALL DISPLAYJB , TTPK2LCALL DISPLAY; JB , TTPK3SETBSETBMOV R0, #250 ;延迟5秒TTPK4:LCALL DISPLAYDJNZ R0, TPK4POP ACCMOV P1, ACC;POP 53HPOP 52HTTPK1:RET;脱水时延迟4sDELAY4S:MOV R2, #200D;DLY431:LCALL DISPLAYLCALL TPKEY ;暂停按键LCALL IFOPEN ;安全开关DJNZ R2, DLY431;RET;脱水时延迟3sDELAY3S:MOV R2, #150D;DLY321:LCALL DISPLAYLCALL TPKEY ;暂停按键LCALL IFOPEN ;安全开关DJNZ R2, DLY321;RET;主程序开始;选择程序:30H, 程序开始=1 MAIN:MOV SP, #60H;CLRCLRMOV A, #00H;MOV P1, A;MOV 50H, A;MOV 51H, A;MOV 52H, A;MOV 53H, A;MOV 30H, A;LP1: ;有无按键LCALL DISPLAYJB , LP1;LCALL DISPLAY ;按键去抖动JB , LP1;LP3:INC 30HMOV A, #0AH ;共有九种可选择XRL A, 30H;JNZ LP2MOV 30H, #01H;LP2:LCALL PLAYMOV 50H, 30H;LP4:LCALL DISPLAYJNB , LP4 ;等待按键释放CLR AMOV 52H, A;LP5:LCALL DISPLAYMOV A, 52H;XRL A, #03H ;3秒延迟到否JZ START ;开始洗衣JB , LP5;SJMP LP3 ;重选洗衣程序START:LCALL ALARMSETBCLR AMOV 52H, A;MOV A, 30H;DEC AMOV B, #03H;MUL ABMOV DPTR, #PROCTAB;JMP @A+DPTRPROCTAB:LJMP PROC1 ;洗衣程序1LJMP PROC2 ;洗衣程序2LJMP PROC3 ;洗衣程序3LJMP PROC4 ;洗衣程序4LJMP PROC5 ;洗衣程序5LJMP PROC6 ;洗衣程序6LJMP PROC7 ;洗衣程序7LJMP PROC8 ;洗衣程序8LJMP PROC9 ;洗衣程序9PROC1:MOV A, #59DLCALL CALUTIMESETBLCALL INWATER ;进水MOV A, #57DLCALL CALUTIME;洗涤3分钟MOV R7, #42D;XIDI0:SETBLCALL DELAY1600MSCLRLCALL XDELAY560MSSETBLCALL DELAY1600MSCLRLCALL XDELAY560MSDJNZ R7, XIDI0MOV R6, #01D ;共4次*3分钟=12分钟MOV R7, #30D ;停2分钟XIDI01:LCALL XDELAY1SDJNZ R7, XIDI01MOV R7, #14D ;洗涤1分钟XIDI03:SETBLCALL DELAY1600MSCLRLCALL XDELAY560MSSETBLCALL DELAY1600MSCLRLCALL XDELAY560MSDJNZ R7, XIDI03DJNZ R6, XIDI02MOV R7, #30D ;停2分钟XIDI04:LCALL XDELAY1SDJNZ R7, XIDI04LJMP PROC3 ;以下同过程3PROC2:;(待完成)LJMP overPROC3:MOV A, #42DLCALL CALUTIMESETBLCALL INWATER ;进水MOV A, #40DLCALL CALUTIME;洗涤15分钟MOV R7, #8D; XIDI:SETBLCALL DELAY1600MSCLRLCALL XDELAY560MSSETBLCALL DELAY1600MSCLRLCALL XDELAY560MSDJNZ R7, XIDI;快速洗涤15秒MOV R7, #11DQXIDI:SETBLCALL DELAY320MSCLRLCALL DELAY320MSSETBLCALL DELAY320MSCLRLCALL DELAY320MSDJNZ R7, QXIDIMOV A, #25DLCALL CALUTIME;排水LCALL OUTWATERMOV A, #23DLCALL CALUTIME;第一次脱水MOV R7, #04D ;间隙脱水30秒TS1:SETBLCALL DELAY4SCLRLCALL DELAY3SDJNZ R7, TS1SETB ;长脱水90秒MOV R7, #10D ; TS2:LCALL DELAY4SDJNZ R7, TS2CLRMOV R7, #250 ;延迟5秒TS25:LCALL DISPLAYDJNZ R7, TS25CLRMOV A, #20DLCALL CALUTIME;第一次漂洗LCALL INWATERMOV A, #18DLCALL CALUTIME;洗涤2分钟MOV R7, #08D;XIDI1:SETBLCALL DELAY1600MSCLRLCALL XDELAY560MSSETBLCALL DELAY1600MSCLRLCALL XDELAY560MSDJNZ R7, XIDI1;快速洗涤15秒MOV R7, #11D QXIDI1:SETBLCALL DELAY320MSCLRLCALL DELAY320MSSETBLCALL DELAY320MSCLRLCALL DELAY320MSDJNZ R7, QXIDI1MOV A, #16DLCALL CALUTIME;排水LCALL OUTWATERMOV A, #14DLCALL CALUTIME;第二次脱水MOV R7, #04DTS21:SETBLCALL DELAY4SCLRLCALL DELAY3SDJNZ R7, TS21SETBMOV R7, #10D; TS22:LCALL DELAY4SDJNZ R7, TS22CLRMOV R7, #250 ;延迟5秒TS26:LCALL DISPLAYDJNZ R7, TS26CLRMOV A, #12DLCALL CALUTIME;第二次漂洗LCALL INWATERMOV A, #10DLCALL CALUTIME;洗涤2分钟MOV R7, #08D ; XIDI2:SETBLCALL DELAY1600MSCLRLCALL XDELAY560MSSETBLCALL DELAY1600MSCLRLCALL XDELAY560MSDJNZ R7, XIDI2;快速洗涤15秒MOV R7, #11DQXIDI2:SETBLCALL DELAY320MSCLRLCALL DELAY320MSSETBLCALL DELAY320MSCLRLCALL DELAY320MSDJNZ R7, QXIDI2PROC8:SETB ;过程8需要闪烁MOV A, #08DLCALL CALUTIME;排水LCALL OUTWATERMOV A, #06DLCALL CALUTIME;最后脱水MOV R7, #04D ;间隙脱水30秒TS31:SETBLCALL DELAY4SCLRLCALL DELAY3SDJNZ R7, TS31SETB ;长脱水5分钟MOV R7, #05DTS32:LCALL DELAY4SDJNZ R7, TS32CLRMOV R6, #06TS28:MOV R7, #250 ;延迟5秒*6=30秒TS29:LCALL DISPLAYDJNZ R7, TS29DJNZ R6, TS28CLRLJMP OVEROVER:LCALL ALARMSETBCLRMOV P2, #03HSJMP $END四、设计体会通过此次对全自动洗衣机的课程设计,对单片机的知识进一步掌握,也巩固了之前学习到的知识。