资源描述
东北石油大学
课 程 设 计
课 程 单片机课程设计
题 目 洗衣机控制系统设计
院 系 电气信息工程学院
专业班级 测控14-1班
学生姓名 孔锡达
学生学号 140601240115
指导教师 路敬祎(副教授)赵志华(副教授)
2017年7 月 28日
7
任务书
课程 单片机课程设计
题目 洗衣机控制系统设计
专业 测控14-1班 姓名 孔锡达 学号 140601240115
主要内容:
本课题针对洗衣机控制系统的发展现状以及当今社会发展对于产品智能化的要求,设计一种基于单片机微处理器的控制系统。要求具有较高的可靠性和实用性,实现智能化控制。本文以单片机为控制器核心设计控制系统,使洗衣机可处于自动模式依次进行进水、洗涤、排水、脱水四个过程;也可处于手动模式通过按键进行洗涤、排水、脱水三个过程的选择,并且处于何种模式,何种过程能够通过指示灯显示。
基本要求:
1、分析洗衣机控制系统设计各种方案的优缺点,说明本设计方案选用原则;
2、阐述本设计方案的基本工作原理、分析并注明元器件选取参数;
3、绘制并分析洗衣机控制系统硬件设计原理图及电路图;
4、设计完整的程序框图和程序清单;
参考文献:
[1]余永权.单片机在控制系统中的应用[M].北京电子工业出版社,2003:23-78.
[2]冯先成.单片机应用系统设计[M].北京航空航天大学出版社,2009:56-98.
[3]元增民.模拟电子技术[M].北京:中国电力出版社,2009:35-97.
[4]万光毅,严义,邢春香.单片机实验与实践教程[M].北京:北京航空航天大学,2006:23-110.
完成期限 2017.7.17—2017.7.28
指导教师
专业负责人
2017年 7 月 16日
单片机课程设计
摘要
随着经济社会的快速发展,智能化,自动化以成为当代社会的主旋律。因此,设计了基于单片机的全自动洗衣机控制系统。本系统实现了对洗衣机整个过程的控制,包括进水、洗涤、排水、脱水四个阶段.控制系统主要由电源电路,单片机控制系统和外部硬件三大模块组成。通过单片机的控制,外部硬件随着用户参数的输入,洗衣机按照用户的选择要求进行运作。本设计实现了自动和手动模式自选,能够满足现代家庭的基本洗涤要求,具有一定的实用性、可靠性,能够实现自动化、智能化。
关键词:手动模式;自动模式;洗衣机;单片机;控制系统
目录
1设计要求 1
1.1功能与用途 1
1.2课题研究的意义 1
1.3国内外发展现状 1
2设计方案 4
2.1方案说明 4
2.2方案论证 5
3硬件设计 5
3.1硬件电路 5
3.2参数计算 8
3.3器件选择 9
3.4元器件清单 9
4软件设计 10
4.1软件介绍 10
4.2程序介绍 11
5系统仿真 20
5.1系统仿真 20
5.2问题及解决 20
6总结 21
参考文献 22
1设计要求
1.1功能与用途
设计一个基于单片机的洗衣机控制系统,洗衣机的工作流程由进水、洗衣、排水和脱水四个过程组成,并且能达到“自动模式”和“手动模式”两种控制模式要求:
(1)按下启动按钮,开始进水直到水满(即水位达到高水位)时停止进水开始洗涤。
(2)洗涤时,正转30秒,停2秒;然后反转30秒,停2秒,如此循环5次,总共320秒开始排水。
(3)水位下降到低水位时开始脱水并继续排水,脱水30秒。
(4)开始清洗,重复(1)—(4),清洗三遍。
(5)若按下洗涤按钮,可实现手动洗涤。
(6)若按下排水按钮,可实现手动排水。
(7)若按下脱水按钮,可实现手动脱水。
1.2课题研究的意义
目前中国洗衣机市场正进入更新换代期,市场潜力巨大,人们对于洗衣机的要求也越来越高,目前的洗衣机主要有强弱洗涤功能、进排水系统故障自动诊断功能、暂停等几大功能,在许多方面还不能达到人们的需求。这就要求设计者们有更高的专业和技术水平,能够提出更多好的建议和新的课题,将人们的需要变成现实,设计出更节能、功能更全面、更人性化的全自动洗衣机。目前的洗衣机都没有实现全方面的兼容,打多洗衣的厂家都注重格子品牌的洗衣机的特长,突出一两个与别的洗衣机不同的个性化的功能,洗衣机的各项功能是由单片机控制实现的,单片机的体积小,控制功能灵活,因此,设计出给予单片机控制系统就具有很强的实用性。而本次设计的洗衣机控制器也是为了满足某些用户的不同需要。同时也将单片机控制技术用到了实际生活中,最重要的是将所学的东西运用化。
1.3国内外发展现状
当今世界是技术、知识打爆炸的年代,只要人们有需要,就有可能生产出某种产品来满足人们的需要。洗衣机的发展正是这样,人们在生活中发现了它的某些不便,就会在实际中不断地改进和完善它,新型的洗衣机正是在这种情况下诞生的。
1.3.1国外情况
1、 超声波洗衣机超声振动产生空穴现象,在洗涤中通过边生产气泡边消失的运动,产生强水压,再加入小量洗衣剂,振动纤维,超声乳化去污,水中气泡上升,产生了洗涤桶中央向外侧翻动的水流,便衣服之间相互摩擦,并与洗涤剂充分接触产生很有效的洗涤作用。这种洗衣机洗涤桶小,桶内无运动部件,无机械电气故障,修理方便。词典均匀性好,不缠绕,不伤布料,洗涤效果好,省水,省电。
2、电磁洗衣机这种洗衣机洗涤桶内有4个洗涤头,上面各有个夹子,把衣物伸展夹住,每个洗涤头上有个电磁线圈,接通电源发生2500次/秒的微击振动,使衣物在洗涤液中洗涤。因不用电机驱动,无噪声,省水50%,省电75%。
3、高温泡沫洗衣机日本大阪大研制的一种不用高温泡沫来洗涤衣物的洗机。洗涤剂灌于洗衣机低部,放衣物后拨动开关,开始鼓风,将空气送入罐中产生泡沫,由加热到701马君:基于单片机的全自动洗衣机控制系统设计摄氏度高温泡沫洗净衣物,然后进入洗衣桶旁边的消泡装置,一般洗5-10分钟/5次,21L/1kg干衣。
4、真空洗衣机原苏联研制的一种不用洗衣粉或洗涤剂的洗衣机,真空泵将洗衣桶内吸成真空状态,桶中水运动产生气泡爆破并去污。洗净度高,不损衣、无噪声、造价高。实际上是采用冷沸腾洗涤原理,在几秒钟内从洗涤桶的上部那空气抽出。稀薄空气与水如沸腾状,衣物在泡沫漩涡中搅动,1.5-2分钟就能洗净衣物,一般洗衣服7-10分钟即可完成全过程。
5、喷射式洗衣机意大利扎努西公司研制一种将洗涤剂不断喷射向衣物的洗衣机,似乎无水,可以省水20%,省洗涤剂30%,省能35%,省时间10%。这种洗衣机完全不同于前装式滚筒洗衣机,安装在喷淋系统内的喷射装置持续不断地将水和洗涤剂喷淋在衣物上进行洗涤,并在不锈钢桶内搅动衣物。衣物在液体中不停地搅动,就像桶内根本没有水一样。然而水却渗透过衣物流入位于滚筒底部的一个储水槽中。在槽中,水被从新加热再次循环喷射到衣物上去,洗涤桶做周期性脱水,以排去水和污物,随后漂洗3次,最后脱水洗完。
1.3.2国内现状
由于我国洗衣机厂起步晚,加上技术方面的一些问题,不可避免的在现有的机型中出现一些弊病。主要弊病有:噪声大,漏电和漏水,进水不畅或进水不止或排水不畅,工作周期不平稳、振动大,损伤洗涤物,洗涤效果不佳,脱水插自动性不佳,脱水不良,重量大,容量不合理。具体来说,洗衣机的问题存在于结构、质量、原材料和模具及管理方面。
1、 结构类型。方面我国洗衣机多属波轮式。今后波轮式任然是主要形式。为了适应国外市场的不同需求,要适当地生产些新型式的滚筒式和搅拌洗衣机,进而生产具有波轮式、搅拌式两种洗衣机优点的新机型。为了使波轮式洗衣机洗涤更合理,应努力将全自动洗衣机提高到电脑型的水平。双桶洗衣机再提高漂洗的条件下,以重点生产全自动型喷淋式洗衣机为宜。同时要注意避免新水流洗衣机一味地提高波轮式的转数及其转动时间或增高波轮筋高的倾向,以免损伤衣率和缠绕率回升增高,降低了新水流洗衣机的优越性。
2、 质量方面。我国洗衣机的质量问题,具体反映再功能、外观和可靠性三方面,与国外存在较大的差距。把国内外洗衣机放在一起,从功能、电源插头、面板装饰、旋钮结合,塑料件的光整度(光洁、毛刺和变形),外箱和螺丝钉的成形及防锈,皮带的耐磨及噪音进排水阀和水位开关阀质量,电脑控制各种功能的能力,电脑的康电压波动、抗干扰防静电的能力,以及传感器的灵敏度等方面,很容易看出那几台是国产货,再加上装配工艺较落后,致使我国洗衣机的质量稳定性差,出口有一定的困难。目前我国洗衣机无故障运行水平为250-500小时,而国外同类产品达1500-2000小时,即十年不需修理。我国的洗衣机出口,切不可立足于搞好售后服务,否则将来带来很多麻烦。因此提高洗衣机的质量要从提高零部件的质量入手。关键电器件和传动件应组织专业分工,制定标准,组织攻关,进行认证,在改进功能方面、外观质量和可靠性三方面,进行全面整理,提高水平。
3、 原材料和模具方面。洗衣机的原材料主要是塑料盒薄钢板,目前均供不应求,需进口。一旦进口受阻,生产便要停滞下来。质量好的原材料生产的塑料件注塑工艺和塑料模具的质量问题。另外,塑料的各种规格来源也不足,靠进口,成本就降不下来,以每台洗衣机10公斤台粗计,年产1000万台每年需薄钢板6万吨,目前50%还供应不上。我国洗衣机要维持生产,大型模具的设计、制造和使用寿命,应组织攻关解决。
4、 管理方面。各洗衣机厂从国外引进的设备和技术的消化吸收还没有落在实处,有的厂家只是计划一下,软件技术既没有消化,也没有吸收,照老办法生产,甚至买来就一直锁在柜子里。现在出口洗衣机和前几年引进类似,盲目自我竞争,各自为政,因此在出口管理方面,应协调一致,出口业务进行,统一对外。
2设计方案
2.1方案说明
方案一、基于51单片机的全自动洗衣机控制系统设计
控制系统的主要组成器件是AT89S52单片机、指示灯、电机、按键、继电器,主要组成电路有单片机最小系统、进排水电路、电机控制电路、按键电路、指示电路。通过按键输入来确定洗衣机工作的模式状态即自动模式或者手动模式。设计总原理图如图2-1。
电机控制电路
单
片
机
主
控
系
统
晶振电路
进排水电路
电源电路
指示电路
复位电路
按键电路
图2-1设计总原理图
方案二、基于DSP的变频洗衣机控制系统设计
本洗衣机系统主要实现的功能包括:进水、洗涤、排水、脱水、四个过程根据变频洗衣机的原理和负载特性。本课题的洗衣机工作模式可分为自动和手动两种洗衣模式。自动方式由洗衣机自动检测、预备各项参数进行洗衣,手动方式需要用户设置各部分的工作参数,包括洗涤设置、排水设置、脱水设置、电机转速等。接下来,进水阀打开通过水位传感器判断水量是否达到要求。开始浸泡,最后根据用户手动设置的参数进行浸泡(自动式默认时间为零),然后获取检测或设置的工作参数完成洗衣程序中的洗涤,排水和脱水等操作。
方案三、PLC控制的全自动洗衣机课程设计
洗衣机的工作原理:洗衣机的进水、排水分别由进水电磁阀和排水电磁阀执行。洗涤正转、反转由洗涤电动机驱动波盘正、反转来实现。脱水时,由脱水电磁离合器合上、排水电磁阀吸合,洗涤电动机正转进行甩干。洗涤完成由蜂鸣器报警。
2.2方案论证
方案一 利用单片机实现,大部分的功能可以用单片机来实现,这样可以使整个电路比较简单,而且成本也比较低,(使用单片机的外围电路比较简单),而且在时间计数计算上精度大,扩展功能很方便。但如果系统设计的不好,则系统不是很稳定,这样就为系统设计提出了挑战。
方案二设计可行性很高,而且电路简单,可以用软件仿真,但实现困难,要经过变频、计算等方式来实现,实现起来对设计者的要求很高。软件要求高。
方案三PLC由于采用现代大规模集成电路技术,采用严格的生产工艺制造,内部电路采取了先进的抗干扰技术,具有很高的可靠性。但PLC设计要设计出梯形图,设计图没有一同固定的方法和步骤,具有很大的试探性和随意行,比较难掌控,分析起来复杂且困难,并且很容易遗漏一些应该考虑的问题。
综合上述几种方案,出于对笨设计的安全性和实现简单、方便,且51单片机中的典型,有高速率、高性能、低功耗的有点,且结构先进、功能强大。因此我选择了第一方案,基于51单片机的全自动洗衣机控制系统设计。
3硬件设计
3.1硬件电路
1. 电源电路
单片机正常工作的工作电压是5V,如图3-1所示为一个5V电压的稳定指示USB接口电路,由于采用的是仿真的方式所以这里采用的是已经经过降压处理后再稳压的接口电路。
图3-1电源电路
2.复位电路
复位是单片机的初始化操作,只需给AT89S52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使AT89S52复位。除了进入系统的正常初始化之外,当程序运行出错(如程序“跑飞”)或操作错误使系统处于“死锁”状态时,也需按复位键即RST脚为高电平,使AT89S52摆脱“跑飞”或“死锁”状态而重新启动程序。复位电路如图3-2所示。
图3-2复位电路
3. 晶振电路
AT89S52内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,如图3-3所示为晶振电路。
图3-3晶振电路
4.电机控制电路
如图3-4所示为洗衣机洗涤过程的电机控制电路。通过继电器RL1来控制电机运行,通过继电器RL2来控制电机的正反转。并且通过两个PNP型三极管来放大电机运行和电机正反转的控制信号,来实现单片机的弱电控制电机运行的强电,并且继电器还起到“隔离”的作用。
图3-4电机控制电路
5. 进排水电路
如图3-5所示为洗衣机进水和排水的控制电路,图中用继电器控制电机转动来代替电磁阀。同样是用两个PNP型三极管来放大来自单片机内部的控制信号来实现打开和关闭电磁阀进水和排水的功能。
图3-5进排水电路
6. 指示电路
出于方便人机交互的考虑,对于洗衣机处于何种工作模式正在执行何种工作状态给以显示以便于洗衣者观察是很有必要的,所以如图3-6所示就用LED小灯来作为工作状态指示灯。
图3-6指示电路
7. 按键电路
如图3-7所示,用户可进行模式选择,也可进行状态选择。按下P1.0按钮进入自动洗衣模式依次进行进水,洗涤,排水,脱水四个过程操作。也可按下下面三个手动按钮分别是洗涤按钮、排水按钮、脱水按钮然后以外部中断的方式进入单片机的中断处理程序以提高其实时性和准确性。
图3-7按键电路
3.2参数计算
1. 典型电路的参数确定
典型的复位电路的参数值其中电容为10uF,电阻值为2K欧姆。典型的晶振电路使用的是值为30pF的微调电容。
2. 其他电路的参数确定
分析继电器的工作原理可以得到继电器的启动电压是5V,直接用单片机的端口不能输出,所以需要用三极管来起到放大作用,根据所选的PNP型三极管的型号:2N4126,其放大倍数为100-200倍,在探针的帮助下可以很容易的确定三极管基极电阻应该选择1K欧姆,电机回路的串联保护电阻的阻值应该选择5.6欧姆。在指示电路中所用到的发光二极管的额定工作电压为2.4V,额定工作电流为10mA,所以使用探针可以方便的得到和发光二极管串联的保护电阻的阻值应该选择为510欧姆。
3.3器件选择
根据典型电路和仿真过程的具体分析以及元器件的标称值可以选择的元器件是:AT89S52单片机,12MHz晶振,继电器选择T73S5D15-5V,发光二极管选择LED-GREEN,三输入与门型号74LS11,PNP型三极管型号为2N4126,轻触按键,电容分为30pF、10uF,电阻按照阻值分:2K、1K、510、5.6,排阻,4-16译码器74HC154。
3.4元器件清单
表1 元器件清单
序号
元器件类型
元器件规格
数量
备注
1
AT89S52单片机
40引脚
1
区分引脚
2
晶振
12MHz
1
无极性
3
轻触按键
4引脚
4
区分引脚
4
发光二极管
3毫米绿色
8
区分引脚
5
三极管
PNP型
4
区分引脚
6
瓷片电容
30pF
3
无极性
7
电阻
2K
1
无极性
8
继电器
5V4引脚
4
区分引脚
9
排阻
9引脚472
1
区分引脚
10
瓷片电容
10uF
2
无极性
11
电阻
510和1K通用
12
无极性
12
电阻
5.6
3
无极性
13
4-16译码器
74HC154
1
区分引脚
14
电机
直流
3
无极性
15
自锁开关
6引脚
1
区分引脚
4软件设计
4.1软件介绍
Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(Vision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件)即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。
C51工具包的整体结构,其中mVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中,使用流程如下:
1、 启动Keil C软件:双击桌面上的图标;
2、 新建工程:Project→New →uVision Project.输入工程名字,不加后缀,保存;
3、 选择单片机型号:左侧选项卡中的“Atmel” →“AT89C52”,然后点击“确定”;
4、 新建文件: File →New, 输入程序内容,保存**.C;
5、 添加文件到工程:左侧Project Workspace→Target 1→Source Group 1→鼠标右键点击Source Group 1 →选择选项卡中Add Files to Group ‘Source Group 1;
6、 编译:Project→Rebuild all target files;
7、 Hex文件的输出:Project→Options for Target ‘Target 1’ → Output,
8、 将“Creat Hex Files”前面对话框内选择“√”,点击“确定”;
4.2程序介绍
根据硬件设计电路图的要求相应的软件主程序流程图如图4-1所示。当检测到自动按键按下之后自动进入洗衣的四个过程进水、洗涤、排水、脱水,当检测到洗涤按钮,排水按钮,脱水按钮被按下后立即进入中断子程序执行相应的操作,如图4-2所示。
开始
初始化
按键扫描
N
自动键是否被按下
Y
洗衣过程
是否3次
N
Y
结束
图4-1主程序流程图
中断入口
中断保护
按键扫描
赋予键值
松手检测
中断返回
图4-2中断处理流程图
洗衣机控制系统程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define true 1
#define false 0
sbit auto_led=P0^4; //自动按键指示灯
sbit wash_led=P0^5; //洗涤手动指示灯
sbit drain_led=P0^6; //排水手动指示灯
sbit dewater_led=P0^7; //脱水手动指示灯
sbit auto_key=P1^0; //自动按键
sbit wash_key=P1^1; //洗涤手动按键
sbit drain_key=P1^2; //排水手动按键
sbit dewater_key=P1^3; //脱水手动按键
sbit inflow_relay=P2^0; //进水电磁阀
sbit dewater_relay=P2^1; //脱水继电器
sbit wash_relay=P2^2; //洗涤继电器
sbit drain_relay=P2^3; //排水电磁阀
sbit high_water=P2^4; //高水位
sbit low_water=P2^5; //低水位
void delay(uint xms); //延时子函数声明
void auto_function(); //自动子函数声明
void inflow_function(bit inflow); //进水子函数声明
void wash_function(bit wash); //洗涤子函数声明
void drain_function(bit drain); //排水子函数声明
void dewater_function(bit dewater); //脱水子函数声明
bit inflow,wash,drain,dewater,autok; //进水,洗涤,排水,脱水,自动全局变量
bit wash_key_value,drain_key_value,dewater_key_value;//洗涤键值,排水键值,脱水键值全局变量
uchar i,key; //洗衣四个过程循环次数以及洗涤,排水,脱水手动按键识别全局变量
void main()
{
EA=1; //初始化
EX0=1;
IT0=1;
inflow=false;
wash=false;
drain=false;
dewater=false;
autok=false;
wash_key_value=1;
drain_key_value=1;
dewater_key_value=1;
while(1)
{if(autok) //如果自动按键被按下,自动变量置true
{autok=false; //自动变量软件复位
for(i=0;i<3;i++) //洗衣过程for循环
{inflow_function(inflow);
wash_function(wash);
if(key==1) //洗涤手动按键执行一次退出
{
wash=false ;
drain=false;
break;
}
drain_function(drain);
if(key==2) //排水手动按键执行一次退出
{
drain=false ;
dewater=false;
break;
}
dewater_function(dewater);
if(key==3) //脱水手动按键执行一次退出
{
dewater=false;
break;
}
}
inflow=false; //洗衣循环结束后软件复位
P0=0XFF;
key=0;
}
else
auto_function(); //判断自动按键是否被按下
}
}
/***********************************************
名称:检测自动按键子函数
功能:检测自动按键是否按下,若按下则相应
指示灯点亮,自动标志位,进水标志位置true
************************************************/
void auto_function()
{uchar temp;
auto_key=1;
temp=auto_key;
if(temp==0)
{
delay(10); //按键去抖
temp=auto_key;
if(temp==0)
{
auto_led=0; //点亮自动按键指示灯
autok=true; //自动按键变量置true
inflow=true; //进水变量置true
}
while(temp==0) //松手检测
{
temp=auto_key;
}
}
}
/************************************************
名称:进水子函数
功能:点亮相应指示灯,将洗涤标志位置true,
进水标志位置false启动进水电磁阀直至到达
高水位关闭电磁阀。
************************************************/
void inflow_function(bit inflow)
{bit high_water_value;
if(inflow)
{P0=0Xe1; //点亮进水指示灯
inflow_relay=0; //打开进水电磁阀
high_water=1; //判断是否达到高水位
high_water_value=high_water;
while(high_water_value)
{
high_water=1;
high_water_value=high_water;
}
inflow_relay=1; //达到高水位关闭进水电磁阀
inflow=false; //进水变量软件复位
wash=true; //洗涤变量置true
}
}
/************************************************
名称:洗涤子函数
功能:点亮相应指示灯,将排水标志位置true
洗涤标志位置false 启动电机正反转开始洗涤
*************************************************/
void wash_function(bit wash)
{uchar m ;
if(wash)
{
wash=false; //洗涤变量软件复位
P0=0xe2; //洗涤指示灯点亮
if(key==1) //若是手动模式则点亮手动洗涤指示灯关闭自动模式指示灯
{
auto_led=1;
wash_led=0;
}
dewater_relay=0; //打开洗涤开关1
for(m=0;m<5;m++) //正反转5次
{
delay(3000);
wash_relay=0; //洗涤正转
delay(3000);
wash_relay=1; //洗涤反转
}
dewater_relay=1; //关闭洗涤开关1
drain=true; //排水变量置true
}
}
/*************************************************
名称:排水子函数
功能:相应指示灯点亮脱水标志位置true,
排水标志位置false,打开排水电磁阀。
**************************************************/
void drain_function(bit drain)
{ bit low_water_value;
if(drain)
{drain=false; //排水变量软件复位
P0=0xe3; //点亮排水指示灯
if(key==2) //若为手动模式则点亮手动指示灯关闭自动指示灯
{
auto_led=1;
drain_led=0;
}
drain_relay=0; //打开排水电磁阀
low_water=1; //判断是否到达低水位
low_water_value=low_water;
while(low_water_value)
{
low_water=1;
low_water_value=low_water;
}
drain_relay=1; //到达低水位后关闭排水电磁阀
dewater=true; //脱水变量置true
}
}
/**************************************************
名称:脱水子函数
功能:相应指示灯点亮进水标志位置true,脱水
标志位置false,电机高速正转直至结束关闭电磁阀
***************************************************/
void dewater_function(bit dewater)
{
if(dewater)
{dewater=false; //脱水变量软件复位
P0=0xe4; //脱水指示灯点亮
if(key==3) //若为手动模式,则点亮手动指示灯关闭自动指示灯
{
auto_led=1;
dewater_led=0;
}
drain_relay=0; //打开排水电磁阀
dewater_relay=0; //打开脱水开关
delay(30000);
dewater_relay=1; //关闭脱水开关
drain_relay=1; //关闭排水电磁阀
inflow=true; //进水变量置true
}
}
/**************************************************
延时子函数
**************************************************/
void delay(uint xms) //延迟xms
{
long int k,j;
for(k=xms;k>0;k--)
for(j=112;j>0;j--);
}
/*************************************************
名称;手动模式中断服务子函数
功能:洗涤,排水,脱水三个过程的手动模式识别
*************************************************/
void int0()interrupt 0
{
EX0=0; //暂时关闭中断,消除抖动
delay(10); //判断是否是误操作
wash_key=1;
wash_key_value=wash_key;
drain_key=1;
drain_key_value=drain_key;
dewater_key=1;
dewater_key_value=dewater_key;
if(wash_key_value==0) //若是洗涤键按下,key值为1
key=1;
else if(drain_key_value==0)
key=2; //若是排水键按下,key值为2
else if(dewater_key_value==0)
key=3; //若是脱水键按下,key值
展开阅读全文