基于单片机的洗衣机的控制系统设计
摘要
根据洗衣机的控制要求,从功能要求、硬件设计、软件设计三个方面描述了一个以51单片机为核心的洗衣机控制系统。硬件线路及控制程序的设计是该系统的重要组成部分。硬件线路设计主要包括电源、功能及控制系统、洗衣机状态显示、输出控制电路的设计。控制程序设计主要包括主程序、内部定时中断服务程序、外部中断服务程序的设计。
关键字:STC51单片机;洗衣机控制系统;硬件;控制程序
Abstract
A control system with the SCMC as the core about
washing machine
Abstract
According to the washing machine control requirements, a control system with the STC—5 1 SCMC as the core about washing machines were described in the following three aspects of functional requirements, hardware design,software
design.The hardware circuit diagram and related control flow chart of the program were given.Hardware circuit design, including power, function and control system, washing machine status display, output control circuit. Control program design
includes the main program, the internal timer interrupt service routine, the design of the external interrupt service routine.
Key words:STC一5 1 SCMC;Washing machine control system;Hardware;Control program
前言
前言
目前中国洗衣机市场正进入更新换代期,市场潜力巨大,人们对于洗衣机的要求也越来越高,目前的洗衣机主要有强弱洗涤功能、进排水系统故障自动诊断功能、暂停等七大功能,在许多方面还不能达到人们的需求。这就要求设计者们有更高的专业和技术水平,能够提出更多好的建议和新的课题,将人们的需要变成现实,设计出更节能、功能更全面、更人性化的全自动洗衣机。目前的洗衣机都没有实现全方面的兼容,大多洗衣的厂家都注重各自品牌的洗衣机的特长,突出一两个与别的洗衣机不同的个性化的功能,洗衣机的各项功能是由单片机控制实现的,单片机的体积小,控制功能灵活,因此,设计出基于单片机的全自动洗衣机控制电路系统具有很强的实用性。本设计采用STC C2051为控制核心,为保证洗衣机及人身安全,设计了蜂鸣报警电路.因本设计输入按键较少,所以采用直接输入方式,使电路简单化。为方便理解与熟悉本,本文还介绍了与全自动洗衣机有关的一些常见的电子元器件的基本功能。本设计只设计了全自动洗衣机的基本功能,其他的一些功能可在原有的基础上扩展升级,使全自动洗衣机能更加智能化,更加完善。
第一章 洗衣机的功能及设计
1.1洗衣机功能要求
洗衣机的主要工作程序是:洗涤——脱水——漂洗——脱水——漂洗——脱水。上述工作程序中,包含三个过程,洗涤过程、漂洗过程、脱水过程。 (1)洗涤过程:放好待洗物,启动开关,进水阀通电,向洗衣机供水,当供水达到预定水位时,水位开关接通,进水阀断电关闭,停止供水。洗涤电动机接通电源,带动波轮(或桶)旋转,产生各种形式的水流搅动衣物进行洗涤。通过电动不停的正转、停、反转、反复循环,形成洗涤水对洗涤物产生强烈的翻滚作用。同时,衣物之间、衣物与四周桶壁之间产生互相摩擦和撞击力,以次达到洗涤衣物的目的。
(2)漂洗过程:漂洗的目的在于清除衣物上的洗涤液,因此,漂洗过程与洗涤过程的电器动作是完全相同的。
(3)脱水过程:洗涤或漂洗后,需要对衣物进行脱水以便晾干,节省水资源,
洗衣机的功能及设计
所以脱水是洗衣过程中必不可少的环节。洗涤或漂洗过程结束后,电动机停止转动,排水阀通电,打开排水阀门排水。当水位低到一定程度时,满足安全条件,脱水电动机接通,电机带动脱水桶高速旋转,利用离心力把衣服上的水从桶壁的小眼里甩出。全部洗衣工作完成后,由蜂鸣器发出音响,表示衣物已洗干净。
1.2洗衣机硬件电路设计 1.2.1 洗衣机总体设计框图
椭圆型表示指示灯:从上到下依次为强洗、弱洗、洗涤次数、洗衣定时、脱水定时、洗衣剩余时间、脱水剩余时间。
电动机正转为强洗,正反交替转动设定为弱洗,初始设定的状态为强洗,若要选择弱洗模式需按下增加按键,再次按下选择按键,则表示洗涤次数的指示灯被点亮,选择增加或减少按键对时间进行加减。然后对脱水时间设定,最后按下启动键,洗衣机开始工作。
正转 反转 数码管1电动机 51单片机 (显示时间) 蜂鸣38数码管2(显示时间) 译码器开始/暂停 进水 选择 增加 减少 启动 出水
图一 总体设计框图
1.2.2元器件介绍
(1)STC51单片机
STCC51系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,是MCS-51系列单片机的派生产品;它们在指令系统中、硬件系统和片
洗衣机的功能及设计
内资源与标准的8052单片机完全兼容,DIP-40封装系列与8051为pin-to-pin兼容,指令代码是与8051完全兼容的单片机。STCC51单片机具有增强型12时钟/机器周期、6时钟机器/周期任意选择,工作电压为5.5V-3.4V(5V单片机)/3.8V-2.0V(5V单片机);工作频率范围:0-40MHZ,相当于普通8051的0-80MHZ。实际频率可达48MHZ。用户应用程序空间为4K/8K/13K/16K/20K/32K/K字节 ;片上集成1280字节/512字节RAM;有32/36个通用I/O口,P1/P2/P3/P4是准双向口;集成ISP(在系统可编程)/IPA(在应用可编程),无需专用的编程器/仿真器,可通过串行口(P3.0/P3.1)直接下载用户程序,8K程序3秒就可以完成一片,具备EEPROM功能,工作温度范围在0-750,共有3个16位定时器/计数器,其中定时器T0还可以当成2个8位定时器使用;封装形式有DIP-40,PLCC-44,PQFP-44等。本文选取的是DIP-40引脚的。 (2)74LS38
74LS138 为3 线-8 线译码器,共有 54/74S138和 54/74LS138 两种线路结构型式,其中74LS138工作原理:当一个选通端为高电平,另两个选通端和为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
表一74LS138真值表
输 入 S1 S2 S3 0 × × × 1 × × × 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 A2 A1 A0 × × × × × × × × × 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 输 出 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 (3)晶振
晶振全称为晶体振荡器,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。以声卡为例,要实现对模拟信号44.1kHz或48kHz的采样,频率发生器就必须提供一个44.1kHz或48kHz的时钟频率。如果需要对这两种音频同时支持的话,声卡就需要有两颗晶振。但是娱乐级声卡为了降低成本,通常都采用SRC将输出的采样频率固
洗衣机的功能及设计
定在48kHz,但是SRC会对音质带来损害,而且现在的娱乐级声卡都没有很好地解决这个问题。 晶振一般叫做晶体谐振器,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。这种晶体有一个很重要的特性,如果给它通电,它就会产生机械振荡,反之,如果给它机械力,它又会产生电,这种特性叫机电效应。他们有一个很重要的特点,其振荡频率与他们的形状,材料,切割方向等密切相关。由于石英晶体化学性能非常稳定,热膨胀系数非常小,其振荡频率也非常稳定,由于控制几何尺寸可以做到很精密,因此,其谐振频率也很准确。根据石英晶体的机电效应,我们可以把它等效为一个电磁振荡回路,即谐振回路。他们的机电效应是机-电-机-电..的不断转换,由电感和电容组成的谐振回路是电场-磁场的不断转换。在电路中的应用实际上是把它当作一个高Q值的电磁谐振回路。由于石英晶体的损耗非常小,即Q值非常高,做振荡器用时,可以产生非常稳定的振荡,作滤波器用,可以获得非常稳定和陡削的带通或带阻曲线。
图二 STCC51单片机元件图
图三 晶振实物图
(4)蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 ;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种
洗衣机的功能及设计
类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
蜂鸣器的结构原理
1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。 压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
图四 蜂鸣器实物图
(5)数码管
数码管是一种半导体发光器件,其基本单元是发光二极管
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当
洗衣机的功能及设计
某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 主要参数 (1)8字高度
8字上沿与下沿的距离。比外型高度小。通常用英寸来表示。范围一般为0.25-20英寸。 (2)长*宽*高
长——数码管正放时,水平方向的长度;宽——数码管正放时,垂直方向上的长度;高——数码管的厚度。 (3)时钟点
四位数码管中,第二位8与第三位8字中间的二个点。一般用于显示时钟中的秒。
图五 数码管原理图
(6)LED灯
LED结构以及发光原理
LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片 发光二极管晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
最初LED用作仪器仪表的指示光源,后来各种光色的LED在交通信号灯和
洗衣机的功能及设计
大面积显示屏中得到了广泛应用,产生了很好的经济效益和社会效益。对于一般照明而言,人们更需要白色的光源。 (7)直流电动机
将直流电能转换为机械能的转动装置。电动机定子提供磁场,直流电源向转子的绕组提供电流,换向器使转子电流与磁场产生的转矩保持方向不变 (8)ULN2003
ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。一、电路的特点
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。 ULN2003 采用DIP—16 或SOP—16 塑料封装。
ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。 二、作用
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。
ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
洗衣机的功能及设计
1.2.3硬件电路的主要模块
根据洗衣机的基本功能,硬件电路设计需要考虑:水流强度的问题、洗涤、漂洗、脱水时间设定长短的问题、工作时间或剩余时间的显示、工作过程中的暂停、启动、复位、洗完后的报警等问题。
采用5l系列单片机作为控制核心,主要包括功能设置及控制电路、洗衣机状态显示及输出控制电路。主要组成部件有:单片机、74LSl38译码器、ULN2003、指示灯、数码管、电动机、蜂鸣器以及按键等。
(1)功能设置及控制电路
①暂停键K0,接P3.3,用外部中断1实现工作过程的暂停,根据人的需要可以进行手工洗涤;
②水位开关K1,接P1.O,水位到位时,K1闭合。在进水期间,系统不断检测K1,当检测到K1闭合就停止进水;
③按键K2,接P1.6,作为工作过程中的启动键;
④按键K3是洗衣强度选择键,接P3.4,每按一次代表一种强度。分别是标准、弱洗、强洗和自编,由4个指示灯进行显示;
⑤按键K4,接P3.5,对洗衣时间进行设置,并用数码管LEDl和LED2显示:
⑥按键K5,接P3.6,对漂洗、脱水次数进行设置,并用数码管LEDI显示; ⑦压电蜂鸣器接P1.7,作为洗衣时间到以及故障发生的报警器。
洗衣机的功能及设计
图六 控制电路
(2)洗衣机状态显示
74LSl38译码器为3—8译码器,选用它可以解决I/0口线数量不足问题。从控制要求可知,洗衣机的工作模式以及工作程序必须有7中不同的显示加以区别。74LSl38译码器的输入端C、B、A分别接P1.3、P1.4、P1.5,输出端分别与7个发光二极管DO--D6的阴极相连,发光二极管阳极接电源。输出端YO控制D0“弱洗”指示灯:Y1控制D1“标准洗”指示灯,Y2控制D2“强洗”指示灯,Y3控制D3“自编”指示灯,Y4控制D4“洗衣”指示灯,Y5控制D5“漂洗”指 示灯,Y6控制D6“脱水”指示灯
洗衣机的功能及设计
图七 状态显示图
(3)输出控制电路
输出控制电路由触发器电路和相应的双向晶闸管组成。控制电机正反转以及进水阀和排水阀的开启和关闭。通过触发器电路和相应的双向晶闸管,电动机的正转和反转用单片机P1.1和P1.2进行控制;进水电磁阀和排水电磁阀用单片机的P3.0和P3.1进行控制 (4)整体设计图
把上述电路图整合在一起如图所示
洗衣机的功能及设计
图七 整体设计图
1.3洗衣机软件系统设计
(1)主程序设计
根据硬件设计要求,控制主程序流程图如图所示。洗衣机通电之后,单片机上电,首先进行程序的初始化,包括定时器O、外部中断O、外部中断l的初始化,以及各参数初值的设定。默认洗衣强度为“标准洗”,漂洗次数3次。然后扫描K2、K3、K4、K5键的状态,确定洗衣强度R2、洗衣时间R3和漂洗次数R4。洗衣机处于待命状态,控制指示灯显示洗衣强度,液晶显示预设洗衣时间。当发现启动键K2按下,洗衣机从待命状态进入工作状态。完成进水——洗涤——脱水——漂洗的循环过程。当洗衣结束时,控制蜂鸣器发声。
洗衣机的功能及设计
开始 初始化 查询洗衣强度R2的查询洗衣时间R3的查询漂洗次数R4的启动? 进水程序 洗涤程序 脱水、漂洗程序 报警? 结束 图八 主程序流程图
<1>进水程序设计
当P3.0=1时,打开进水电磁阀开始进水。当水位到达要求时,P1.0=0,即水位开关K1闭合,关闭进水电磁阀,P3.0=0,迸水结束; <2>洗涤过程程序设计
电机正反转均为10S,根据R2的值确定洗衣强度、洗衣时间R3以及电动机的间歇时间。
洗衣机的功能及设计
洗衣开始 进入漂洗脱水程序 电机正转10s 电机停转 剩余时间延时1s 电机反转10s R2=0
图九 洗涤过程流程图
<3>脱水、漂洗过程程序设计
脱水前先打开排水阀排水1min。然后启动电动机脱水1min,并保持排水阀开启,然后停止脱水。接着判断漂洗次数即R4的值,若R4为0则洗衣结束,开蜂鸣器提醒洗衣结束,系统返回初始待命状态;若R4不为0,则再次执行进水操作,进入下一循环。程序如下图所示:
继续漂洗 漂洗脱水开始 关蜂鸣器 开排水闸 开电动机脱水 开蜂鸣器报警 关脱水,关脱水阀 R4=0?
图十 脱水、漂洗程序流程图
(2)内部定时中断设计
洗衣机的功能及设计
工作过程中所需的各种计时均有定时器0定时中断服务程序提供。单片机晶振频率12Mllz,定时器0选择工作方式1,设置时间常数,每0.1S中断~次。中断处理程序流程图如下图所示。
中断入口 是否到计数清零 秒值加1 是否到1秒值清0 分值减1 显示子程序 中断返回
图十一 内部定时中断流程图
(3)外部中断设计
为了防止外部电压过高或过低对洗衣机的电器及控制硬件产生破坏,用外部中断0进行保护。当电压过高或过低时,引起外部中断0,洗衣机停止一切动作,进入保护状态。用外部中断1来实现洗衣过程停止工作。在洗衣过程中,当暂停键K0按下时,引起外部中断1,转入中断1处理程序。中断l处理程序将使洗衣机停止工作,并将停止前的状态存储起来。当按下启动键K2时,洗衣机又恢复工作。程序设计流程图
洗衣机的功能及设计
中断入口 相关寄存器进栈 暂停相关寄存器出栈 中断返回 置外部中断控制字
图十二 外部中断流程图
(4)源程序
#include //各个引脚功能定义 sbit key_move_stop = P2^0; //启动、暂停按键 sbit key_wash_dehydration = P2^1; //洗涤、脱水按键 sbit key_water_detection = P3^2; //水位检测按键 外部中断0 sbit key_cap_open = P3^3; //机盖装置按键 外部中断1 sbit LED1 = P0^0; //启动指示灯 sbit LED2 = P0^1; //暂停指示灯 sbit LED3 = P0^2; //洗涤指示灯 sbit LED4 = P0^3; //脱水指示灯 sbit LED5 = P0^4; //进水阀指示灯 sbit LED6 = P0^5; //排水阀指示灯 sbit LED7 = P0^6; //水位满指示灯 sbit LED8 = P0^7; //机盖松指示灯 sbit LED9 = P2^7; //报警指示灯 sbit LS138A = P2^2; //数码管片选 洗衣机的功能及设计 sbit LS138B = P2^3; sbit LS138C = P2^4; sbit BEEP = P2^6; //蜂鸣器报警 sbit PWM = P2^5; //直流电动机 //共阴数码管 0-9 - unsigned int code Disp_Tab[] {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned int i=0,LedNumVal=0; //数码管计时 0-9 选择 unsigned int lednum = 0; //定时器0 数码管计时速率变量 unsigned int LedOut[3]; //数码管计时存储区 unsigned char key_s,key_v; //按键扫描变量 static unsigned int m = 0; //启动、暂停键计数变量 static unsigned int movenum = 0; //暂停功能变量 /***********************************************************/ unsigned char scan_key() //启动/暂停键;洗涤/脱水键扫描 { unsigned char Key_s; Key_s = 0x00; Key_s |= key_wash_dehydration; Key_s <<= 1; Key_s |= key_move_stop; return Key_s; } /************************************************************/ void delay( unsigned int a) //数码扫描延时子程序 { unsigned char b; for(; a > 0; a--) for(b = 200; b > 0; b--); } = 洗衣机的功能及设计 /**********************************************************/ void delayms( unsigned char ms) //按键消抖延时子程序 { unsigned char k; while(ms--) { for(k = 0; k < 120; k++); } } /***********************************************************/ void beep() { unsigned int n = 0; BEEP = 1;LED9 = 1; for(; n<6;n++) { BEEP = 0;LED9 = 0; delayms(3000); BEEP = 1;LED9 = 1; delayms(1000); } } /*************************************************************/ void led_display_zero() //数码管清零并直流电动机停止 蜂鸣器响三下 { beep(); PWM = 1; while(1) { unsigned int i = 0; unsigned int LedNumVal = 0; PWM = 1; if(key_wash_dehydration ==0) //洗涤后脱水按下键跳出 { LED3 =1; LED4 =0; LED6 =0; break; } 洗衣机的功能及设计 LedOut[0]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点 LedOut[1]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[2]=Disp_Tab[LedNumVal%10]; //个位 for( i=0; i<3; i++) { P1= LedOut[i]; switch(i) { case 0:LS138A=1; LS138B=0; LS138C=0; break; case 1:LS138A=0; LS138B=1; LS138C=0; break; case 2:LS138A=0; LS138B=0; LS138C=1; break; default:break; } delay(10); P1 = 0x00; } } } /*************************************************************/ void led_display_over() //数码管清零并直流电动机停止 蜂鸣器响三下 { beep(); PWM = 1; while(1) { unsigned int i = 0; unsigned int Led = 0; LED1 = 1; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 1; //洗涤指示灯 LED4 = 1; //脱水指示灯 LED5 = 1; //进水阀指示灯 LED6 = 1; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 LED9 = 1; //出水阀指示灯 洗衣机的功能及设计 if(key_move_stop ==0) //脱水后按下键跳出 { LED1 = 0; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 1; //洗涤指示灯 LED4 = 1; //脱水指示灯 LED5 = 0; //进水阀指示灯 LED6 = 1; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 LED9 = 1; //报警指示灯 break; } LedOut[0]=Disp_Tab[Led%1000/100]|0x80; //百位带小数点 LedOut[1]=Disp_Tab[Led%100/10]; //十位 LedOut[2]=Disp_Tab[Led%10]; //个位 for( i=0; i<3; i++) { P1= LedOut[i]; switch(i) { case 0:LS138A=1; LS138B=0; LS138C=0; break; case 1:LS138A=0; LS138B=1; LS138C=0; break; case 2:LS138A=0; LS138B=0; LS138C=1; break; default:break; } delay(10); P1 = 0x00; } } } /*************************************************************/ void cap_open() //数码管清零并直流电动机停止 蜂鸣器响三下 { beep(); //需要复位跳出 PWM = 1; while(1) { unsigned int i = 0; 洗衣机的功能及设计 unsigned int LedNum = 0; LedOut[0]=Disp_Tab[LedNum%1000/100]|0x80; //百位带小数点 LedOut[1]=Disp_Tab[LedNum%100/10]; //十位 LedOut[2]=Disp_Tab[LedNum%10]; //个位 for( i=0; i<3; i++) { P1= LedOut[i]; switch(i) { case 0:LS138A=1; LS138B=0; LS138C=0; break; case 1:LS138A=0; LS138B=1; LS138C=0; break; case 2:LS138A=0; LS138B=0; LS138C=1; break; default:break; } delay(10); P1 = 0x00; } } } /************************************************************/ void led_display_move() //数码管计时并直流电动机运转 { while(1) { PWM = 0; if(LedNumVal == 101) //计时到100时自动清零并蜂鸣器响三下 { LedNumVal = 0; TR0 = 0; break; } if(key_move_stop ==0) { movenum++; if(movenum%2==1) { LED1 = 1; //启动指示灯 洗衣机的功能及设计 LED2 = 0; //暂停指示灯 TR0 = 0; //关闭定时器0 } else { LED1 = 0; LED2 = 1; TR0 = 1; //开启定时器0 } } while(key_move_stop ==0); //等待按键释放 LedOut[0]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点 LedOut[1]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[2]=Disp_Tab[LedNumVal%10]; //个位 for( i=0; i<3; i++) { P1 = LedOut[i]; switch(i) { case 0:LS138A=1; LS138B=0; LS138C=0; break; case 1:LS138A=0; LS138B=1; LS138C=0; break; case 2:LS138A=0; LS138B=0; LS138C=1; break; default:break; } delay(10); P1 = 0x00; } } } /***********************************************************/ void move_stop_led() { m++; if(m == 1) { 洗衣机的功能及设计 EX0=1; //外部中断0允许中断 水位检测 LED1 = 0; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 1; //洗涤指示灯 LED4 = 1; //脱水指示灯 LED5 = 0; //进水阀指示灯 LED6 = 1; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 LED9 = 1; //报警指示灯 } else if((m>1)&&(m%2==1)) { LED1 = 0; //启动指示灯 LED2 = 1; //暂停指示灯 } else { LED1 = 1; //启动指示灯 LED2 = 0; //暂停指示灯 TR0 = 0; //停止定时器工作 } } /**********************************************************/ void wash_dehydration_led() { static unsigned int j = 0; j++; if(j%2 == 1) //启动并洗涤 { LED1 = 0; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 0; //洗涤指示灯 LED4 = 1; //脱水指示灯 LED5 = 1; //进水阀指示灯 LED6 = 1; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 LED9 = 1; //报警指示灯 led_display_move(); 洗衣机的功能及设计 led_display_zero(); } else //启动并脱水 { LED1 = 0; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 1; //洗涤指示灯 LED4 = 0; //脱水指示灯 LED5 = 1; //进水阀指示灯 LED6 = 0; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 LED9 = 1; //报警指示灯 led_display_move(); led_display_over(); } } /*********************************************************/ void proc_key(unsigned char key_v) { if((key_v & 0x01) == 0) { move_stop_led(); } else if((key_v & 0x02) == 0) { if(m%2==1) { TR0 = 1; //定时器0开始工作 wash_dehydration_led(); } } } /*********************************************************/ main() 洗衣机的功能及设计 { IT0 = 1; //外部中断0 水位检测 跳沿触发方式 EX0=0; //不允许外部中断0中断 IT1 = 1; //外部中断1 机盖打开 跳沿触发方式 EX1 = 1; //允许外部中断1中断 TMOD = 0x01; //定时器0 定时模式 方式1 ET0 = 1; //允许定时器0中断 TR0 = 0; //停止定时器工作 TH0 = 0xDB; TL0 = 0xF0; //10ms EA=1; P0 = 0xff; key_v = 0x03; LS138A=0; LS138B=0; LS138C=0; while(1) { key_s = scan_key(); if(key_s != key_v) { delayms(10); key_s = scan_key(); //启动/暂停键 洗涤/脱水键扫描 if(key_s != key_v) { key_v = key_s; proc_key(key_v); delayms(30); } } } } void counter0(void) interrupt 0 { 洗衣机的功能及设计 EX0=0; LED7 = 0; //水位满 LED5 = 1; //进水阀指示灯 EX0=1; } void time0(void) interrupt 1 { lednum++; TR0 = 0; TH0 = 0xDB; //10ms TL0 = 0xF0; if(lednum == 50) { lednum = 0; LedNumVal++; } TR0 = 1; } void counter1(void) interrupt 2 { EX1 = 0; LED1 = 1; //启动指示灯 LED2 = 1; //暂停指示灯 LED3 = 1; //洗涤指示灯 LED4 = 1; //脱水指示灯 LED5 = 1; //进水阀指示灯 LED6 = 1; //排水阀指示灯 LED7 = 1; //水位满指示灯 LED8 = 1; //机盖松指示灯 cap_open(); } 结论 第二章 结论 本设计采用常用的ATMEL单片机ATC51为控制核心,辅以电机、数码管等其他元器件,通过软,硬件的配合设计,很好的实现了洗衣机的控制功能。本系统结构简单,控制功能强大,自动化程度高等特点。 (1)系统软硬件设计采用模块化的设计方法,各模块功能相对,最后把它们整合在一起,大大的缩短了系统的设计周期。 (2)为保证洗衣机及人身安全,设计了蜂鸣器报警电路。 (3)本设计还考虑半自动的设计,用户可以根据自己的需求自由选择洗衣机的工作方式,这一点是通过按键实现的。 本文设计的时候只考虑了洗衣机的实用功能,其他的功能可以在他上面进行扩展,使洗衣机功能更能强大。 第三章 参考文献 [1] 黄智伟.基于NI Multisim的电子电路计算机仿真设计与分析[M].北京:电子工业出版社,2008 [2] .朱启标,丁杰.EDA实验指导书[M].南昌大学教务处,2009 [3] 克强.用ATC2051单片机制作洗衣机控制电路[J].电子世界,2001,(3):39—42 [4]李金平,沈明山,姜余祥.电子系统设计[M].北京:电子工业出版社,2007 附件 第四章 附件 原理图 PCB图
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务