基于98C51单片机的汇编语言的全自动洗衣机系统设计课程设计Word格式文档下载.docx
《基于98C51单片机的汇编语言的全自动洗衣机系统设计课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于98C51单片机的汇编语言的全自动洗衣机系统设计课程设计Word格式文档下载.docx(53页珍藏版)》请在冰点文库上搜索。
(2)洗衣容量5kg
(3)电力供应:
220VAC
3.设计要求
(1)实现3种模式选择:
标准、轻柔和快洗,被选中的模式用LED显示器表明。
(2)实现不同模式下的洗衣过程,根据衣物多少允许用户设置4种的水位,被选中的水位用LED显示器表明。
当洗衣机启动后,上水电磁阀打开注水,当水到达设定的限位时,上水电磁阀断电,注水过程停止,启动电机全自动控制洗衣操作,整个过程的进行按时间控制,时间自定
(3)液位检测和控制:
使水位限定在某一个给定的液位范围内,当水位越限时打开下水电磁阀放水,不启动洗衣过程,待满足要求后,投入运行。
(4)当投入洗衣量大于洗衣机额定容量时,控制系统应报警,不启动洗衣过程。
待满足要求后,投入运行。
(5)显示工作模式、状态和剩余时间,每个动作完成时,通过声光报警提示。
(6)测量并显示水的温度。
4.扩充功能
(1)PWM调节电机转速
(2)同一模式下,不同水位的选择。
前言
单片机又称微控制器,或称嵌入式控制器。
由于家用电器体积小,故要求其控制器体积更小以便能嵌入其结构之中。
而家用电器品种多,功能差异也大,所以又要求其控制器有灵活的控制功能。
单片机以微小的体积和编程的灵活性而产生多种控制功能,完全可以满足家用电器的需求。
波轮式全自动洗衣机是家用电器领域的重要一员,在全自动洗衣机市场中占有很大的比例,其中绝大多数品是用单片机来实现的。
AT89C51单片机是ATMEL公司8位单片机系列产品之一,是一种20引脚双列直插式芯片。
它内含4KB可反复烧录的FLASH存储器,RAM字节也有128个,15个I/O口,5个中断,2个定时,已经可以满足程序的需要,指令也和51系列兼容,基于上述特点,选择它来设计一台智能洗衣机,完全可以达到以下的功能:
1、洗衣程序功能:
手动模式:
用户可以选择单独的单洗,漂洗,长脱水;
自动模式:
用户可以根据需求通过键盘选择以下模式:
即标准洗衣程序、轻柔洗衣、快洗每种模式下又可以选择四种水位;
再上电后如果不进行任何操作一段时间后洗衣机便进入默认模式进行洗衣。
2·
显示功能:
显示选择的模式,水位,正在进行的洗衣操作(状态),水温,完成洗衣过程的剩余时间。
3、特殊功能:
超水位报警并自动放水,达到要求后结束报警开始洗衣;
超容量报警,待用户排除后结束报警开始洗衣。
设计分析与方案论证
本设计用98C51单片机实现洗衣机的控制,通过对拨码开关和键盘的操作实现手动自动模式的选择,以及水位得选择,也可以进行任何操作进入默认模式。
当选择好模式后进入该模式设置该模式下的参数,然后再次扫描键盘,去选择水位,选定水位后,进入该水位模式设置水位参数。
在P1.4为低电平是进入手动模式,手动模式下若P1.5为低电平则进入单洗过程,单洗完成声光报警提示用户此过程完成;
若P1.5为高电平检查P1.6若为低电平进去漂洗程序进行漂洗,漂洗完成声光报警提示用户漂洗结束。
柔P1.6为高电平则检查P1.7若为低电平就进入长脱水程序,进行长脱水,长脱水结束声光报警提示用户操作完成;
若P1.7为高电平则从P1.5重新检查直到检查到低电平为止。
在P1.4为高电平时不是手动模式,则去扫描键盘,第一次扫描键盘为选择标准,轻柔,快洗模式,待选择好模式设定好参数后,再次扫描键盘选择水位,选择好水位后设置参数,然后进入洗衣过程。
如果15秒内没有扫描到模式的按键,则进入默认模式。
单洗衣程序包括单洗、漂洗、长脱水三个过程。
自动模式下的三个模式都包括单洗、漂洗、长脱水三个过程,只是在不同模式和水位下的参数不同罢了;
洗衣过程:
进入洗衣程序开定时器开始倒计时,根据选择的水位进水,进水完成后,在没有超出要求水位的情况下,进入单洗过程,电动机开始正反转过程根据所选模式中设置的正反转次数以及不同模式下正反转的时间自动洗衣;
待单洗完成就进入排水过程,排水时间由水位模式设置,排水结束后进入漂洗过程。
漂洗过程:
先进行段脱水,脱水结束再进水,进水完成再进行短洗,短洗时间为四分钟,短洗完成在排水,然后重复上述过程一次即完成漂洗过程,漂洗完成进入长脱水过程,长脱水时间为四分钟,电机高速旋转,长脱水结束,整个洗衣过称也结束,此时声光报警提示用户洗衣完成。
标准模式下的单洗过程,电机正反转36次,每次正转十八秒,停两秒,再反转十八秒,停两秒;
轻柔模式下单洗过程,电机正反转36次,每次正传是三秒停两秒,再反转是三秒,停两秒;
快洗模式下但系过程,电机正反转24次,每次正转十八秒,停两秒,再反转十八秒,停两秒;
三种模式下的漂洗过程相同见下面漂洗过程分析;
每个模式下的长脱水都是相同的,都是电机正传四分钟。
进排水由时间控制,每个水位下设置好了进排水的时间,进水时P3.4置一,表示开进水阀,进水完成时P3.4置0表示关进水阀;
排水是P3.5置1表示开排水阀,排水完成是P3.5置0表示管排水阀。
在显示时开始考虑的是通过按键实现交替显示,但是这样就必须时刻扫描键盘,这使程序进入了扫描键盘的死循环,无法进行其他的工能,在多次考虑后发现在进排水,电机动作时没有其他的要求,可以利用这段时间去驱动数码管显示模式,水位,状态,温度,以及剩余时间等,剩余时间单独显示,其他的一起显示,这样就只需要显示两次,每次十秒,交替显示,单洗是短洗时电机正传是显示十秒的模式,水位,状态,温度,然后数码管熄灭十秒或五秒,电机反转时显示十秒的剩余时间,再熄灭十秒或五秒,这样循环进行;
在脱水或进排水时两种显示一十秒每次交替显示,这样在整个过程中多有显示,很好地解决了显示与洗衣同时进行的问题了。
电机的正反转实现方式:
当P3.6为1,P3.7为0时电机正转,当P3.6和P3.7都为0时电机停转,当P3.6为0,P3.7为1时电机反转。
电机正反转用LED灯模拟,红灯亮表示正传,绿灯亮表示反转,两灯都熄灭表示电机停转。
自动模式下,数码管右边第一为表示模式,b表示标准模式,q表示轻柔模式,3表示快洗模式,第二位表示水位分别用1、2、3、4表示四种水位;
中间两位表示正在进行的动作即状态,7H表示进水,dH表示短脱水,dd表示短洗,CH表示长脱水PH表示排水;
左边两位显示的是水的温度。
在显示模式2下用四个数码管显示剩余时间。
在手动模式下的单洗,漂洗,长脱水需要单独设置参数,具体设置见附录的程序中;
单洗时,模式水位显示位显示的是d7表示手动下的单洗;
漂洗是显示P7表示漂洗,长脱水时显示CH表示长脱水;
手动下单洗为28分钟,漂洗为18分钟,长脱水为4分钟。
默认模式下调用的是标准模式下水位2的洗衣程序,显示也完全相同;
另外每一个动作完成时都有一秒钟的蜂鸣提示。
软件程序的设计:
汇编语言程序设计并不很难,但要编出质量高,可读性好且执行速度快的优秀程序并不容易,欲达此目的,除应娴熟掌握所依托的指令系统外,还应掌握程序设计的基本方法和技巧,熟悉汇编语言源程序的分类方法和特点。
洗衣机的一次洗衣过程控制过程比较简单,主要为顺序控制,如先进水、洗涤(电机正转反转)、再排水脱水,难点在于过程选择,如不同的衣物所用的洗涤、漂洗、电机正转反转时间不同,如果为每个过程单独编一套指令,则指令系统变得很庞大,效率低,为此,把脱水、洗涤、排水、短洗、漂洗、进水单独编为一个子程序,由主程序根据过程选择,不断调用,由些减少源程序的长度,不同的洗衣过程,三大动作的时间不同,这可以通过建立数据表格,通过查表的方式获得每个洗衣过程所需时间。
此外,还需编出显示子程序,延时子程序供主程序不断调用,而且在每一个模式和水位下设置了不同参数,这样通过对子程序的调用,就实现了同一模式下不同水位的选择这一扩展功能,仅仅在自动模式下就有3*4=12种小模式了。
水位1每一次进排水时间都为130秒,水位2为120秒,水位3为110秒
水位4为100秒
自动模式下各个小模式的总时间如下:
标准模式水位一:
55分钟
标准模式水位二:
54分钟
标准模式水位三:
53分钟
标注模式水位三:
52分钟
轻柔模式水位一:
49分钟
轻柔模式水位二:
48分钟
轻柔模式水位三:
47分钟
46分钟
快洗模式水位一:
43分钟
快洗模式水位二:
42分钟
快洗模式水位三:
41分钟
快洗模式水位四:
40分钟
各个流程的框图如下:
N
Y
N
Y
主程序框图
手动模式框图
自动模式下模式水位的选择
洗衣流程单洗流程
长脱水流程
漂洗流程
进水流程排水流程
NY
YY
电机正反转流程
超水位报警并自动排水流程
调试:
先在软件中仿真再在板子上演示
1.选择手动模式将拨码开关1号键拨至左侧即选择的是手动模式,2号键拨过去选择单洗,此时仿真图以及实际图如下:
手动的单洗进水仿真图:
d7表示手动的单洗,7H表示进水,29是温度
手动单洗实际图:
右边的d7表示手动下的单洗,中间的d7表示状态为单洗23表示温度
2.选择手动模式将拨码开关1号键拨至左侧即选择的是手动模式,3键拨过去选择漂洗,此时仿真图以及实际图如下:
手动模式下漂洗的单洗的仿真截图:
P7表示手动的漂洗,dd表示短洗,29表示温度是29度
手动漂洗仿真图:
P7代表漂洗,dH代表短脱水,27表示温度
3.选择手动模式将拨码开关1号键拨至左侧即选择的是手动模式,4键拨过去选择长脱水,此时仿真图以及实际图如下:
手动长脱水仿真截图:
右边的CH表示手动的长脱水,中间的CH表示当前状态是
手动长脱水实图:
右边的CH手动的长脱水,中间的CH状态是长脱水,23表示温度
4.选择标准模式,将拨码开关1号键拨至右侧,等待15秒按下键盘的一号键即选择好标准模式,再按下4号键即选择水位一,然后进入标准模式的水位一开始工作,此时仿真图以及实际图如下:
仿真截图:
标准水位2的单洗状态,最右边的b表示标准模式,2表示水位2,d7表示单洗,29是温度
标准模式实图:
b表示标准模式,2表示水位2,d7表示单洗状态,22表示温度
标准水位2的长脱水状态,最右边的b表示标准模式,2表示水位2,CH表示长脱水,29是温度
5.选择轻柔模式,将拨码开关1号键拨至右侧,等待15秒按下键盘的2号键即选择好轻柔模式,再按下5号键即选择水位二,然后进入标准模式的水位一开始工作,此时仿真图以及实际图如下:
轻柔水位2的进水,q表示轻柔模式,2表示水位2,7H表示进水,29是温度
轻柔水位4实图:
q表示模式是轻柔,4表示水位4,dd表示状态是短洗,27表示温度
轻柔水位2的排水,q表示轻柔模式,2表示水位2,PH表示排水,29是温度
6.选择快洗模式,将拨码开关1号键拨至右侧,等待15秒按下键盘的3号键即选择好标准模式,再按下6号键即选择水位三,然后进入标准模式的水位一开始工作,此时仿真图以及实际图如下:
快洗模式水位3的截图,最右边的3表示快洗,第二个3表示水位,dH表示单洗
快洗水位2实图:
右边的3表示模式是快洗,7H表示状态是进水,30表示温度
7.超水位与超超容量的中断调试,进入中断后数码管完全熄灭,并有声光报警提示,其中超水位报警为两秒的蜂鸣,一秒的绿灯如此循环直到中断解除;
超容量报警为一直的蜂鸣报警,直到中断解除;
超水位
为高优先级,调试时遇到的问题是进入高优先级在还回时低优先级的报警没有进行了,在多次测试并检测程序后发现是高优先级中没有保护低优先级的状态,修改程序后这一问题得到解决。
8.显示时间的调试时发现时间不准确,经过仔细阅读程序发现没有把每个动作完成时的两秒的提示时间计算进去,使时间不准确,修改参数后这一问题得到解决
表示剩余时间为3分36秒
表示剩余时间是3分56秒
总结
在本次设计中遇到了很多问题,但是最终还是完成了基本的要求实现了标准、轻柔、快洗三种模式,四种水位的选择,显示所选择的模式、水位、洗衣机的状态、水温、以及剩余时间的显示。
实现了水位的检测和控制:
使水位限定在某一个给定的液位范围内,当水位越限时声光报警并打开下水电磁阀放水,不启动洗衣过程,待满足要求后,投入运行,实现了超容量的报警,待满足要求后投入运行,实现了每个动作完成的声光提示。
完成了同一模式下不同水位的选择这一扩展功能。
本设计还存在诸多不足,比如由于时间有限没有用PWM技术实现电机的调速。
实现这一要求还得使用继电器,双向晶闸管,二极管等部件,利用脉宽调制技术实现电机的调速。
能够顺利完成本次设计还得感谢段晨东老师的指导,以及李朝、乔红磊、肖世涛,薛周舟等同学的帮助。
参考文献:
1.段晨东单片机原理即接口技术清华大学出版社北京2008
2.张毅刚单片机应用设计哈尔滨工业大学出版社哈尔滨2002
3.周润景基于PROTEUS的电路与单片机设计与仿真北京航空航天大学出版社北京2010
4.李宇μVision2单片机应用程序开发指南科学出版社北京2005
附录:
1.洗衣机系统的汇编程序
FLAGEQU45H;
DS18B20是否存在标志
DQEQUP1.3;
DQ引脚由P2.5控制
ORG0000H
LJMPSTART
ORG0003H
LJMPPINT0
ORG0013H
LJMPPINT1
ORG001BH
LJMPP_T1
ORG0030H
START:
MOVSP,#60H
CLRP3.4;
关进水阀
CLRP3.5;
关排水阀
CLRP3.6;
电机不转动
CLRP3.7;
MOVIP,#01H;
INTI为高优先级
SETBEA;
CPU允许中断
SETBIT0;
跳变触发方式
SETBIT1;
跳变触发方式
MOVTH1,#3CH
MOVTL1,#0B0H
MOV40H,#20;
1S定时
MOVTMOD,#10H
SETBEX1;
允许INT1中断
SETBEX0;
允许INT0中断
SETBET1;
允许定时器T1中断
MOV4DH,#05;
等待5秒,供用户选择手动还是
DENDAI:
LCALLDL1S;
自动,若选择手动并设置自动模式下的哪种
DJNZ4DH,DENDAI;
工作方式,单洗,单漂,长脱水
MOVP1,#0F6H
LCALLDL1S
MOVP1,#0FFH
MOV4FH,#250
BACK:
JBP1.4,KSSM1;
P1.4为1即使自动模式,转到扫描键盘
JNBP1.5,TODANXI;
P1.5为0即为选择单洗,转到单洗
JNBP1.6,TOPX;
P1.6为0即为选择漂洗,转到漂洗
JNBP1.7,TOCTS;
P1.7为0即为选择长脱水,转到长脱水
JMPBACK;
没有检测到手动选择的是什么,换回重新检测
;
******手动单洗程序********
TODANXI:
SETBTR1
MOV30H,#07;
状态显示参数,显示7
MOV31H,#13;
状态显示参数,显示d,d7代表单洗
MOV2AH,#18H;
电机动作24分钟
MOV2CH,#05H;
进排水4分钟
MOV25H,#36;
设正反转次数
MOV26H,#08;
转动8+10s
MOV27H,#02;
停2秒
MOV28H,#40;
进排水2分钟,40+20x4
LCALLDJSCZ
LCALLDANXI
JNBP1.6,TOPX
LJMPTHEND
****手动漂洗程序******
TOPX:
SETBTR1
MOV30H,#07;
MOV31H,#18;
状态显示参数,显示P,P7代表漂洗
MOV2AH,#0EH;
电机动作14分钟
LCALLPX
JNBP1.7,TOCTS
LJMPTHEND
****手动长脱水******
TOCTS:
MOV30H,#16;
状态显示参数,显示H
MOV31H,#12;
状态显示参数,显示C,CH代表长脱水
MOV2AH,#04H;
脱水4分钟
MOV2CH,#00H
LCALLCTS
LJMPTHEND
;
****键盘扫描1******
KSSM1:
MOVP2,#0F0H;
置P2.0~P2.3为输出,P2.4~P2.6为输入
MOVA,P2
ANLA,#0F0H
XRLA,#0F0H
JZNO_KEY1;
A为0则无按键
LCALLDL20MS;
延时消抖
ANLA,#0F0H;
重读键盘
MOVR2,#11110111B;
列扫描初值
LSM1:
MOVA,R2
MOVP2,A
ANLA,#11110000B
MOVR3,A
CJNEA,#0F0H,KEY1;
有键按下则跳转
MOVA,R2
RRA
MOVR2,A
XRLA,#01111111B
JNZLSM1
NO_KEY1:
LJMPNEXT3
KEY1:
ANLA,#0FH
ORLA,R3
MOVR4,A
SHIFANG1:
MOVA,P2
JNZSHIFANG1
LCALLDL20MS
MOVA,R4
CJNEA,#0D7H,NEXT1
LJMPFANGSHI1
NEXT1:
CJNEA,#0DBH,NEXT2
LJMPFANGSHI2
NEXT2:
CJNEA,#0DDH,NEXT3
LJMPFANGSHI3
NEXT3:
DJNZ4FH,KSSM1
LJMPMORENMOSHI;
跳到默认模式
****实际键盘扫描2*****
KSSM2:
JZNO_KEY2;
LSM2:
CJNEA,#0F0H,KEY2;
JNZLS