洗衣机人机界面的设计(新)

洗衣机人机界面的设计

摘要:

单片机是计算机家庭的一个重要分支,它具有体积小、价格低、面向控制的特点,适用于各种工业控制、仪器仪表装置,在人类生产和生活的各个领域都有极为广泛应用。 本洗衣机控制系统,采用目前常用的AT89C51单片机,用c 语言的编程方法,完成对洗衣机洗衣全过程的自动控制,并采用LED 数码显示洗衣剩余时间。使全自动洗衣机的使用更加简单、直观和方便。本设计取材容易,结构简洁,易于制作,具有一定的实用价值。

关键字:AT89C51单片机、洗衣机、c 语言

目录

引言 . ................................................................................................................................................................ 1

第一章 绪论 . ................................................................................................................................................ 1

1.1功能概述 . .......................................................................................................................................... 1

1.2设计分析及方法论证 ....................................................................................................................... 1

第二章 基础知识介绍 . .................................................................................................................................. 2

2.2 LED数码管模块 .............................................................................................................................. 5

2.3 键盘模块 . ......................................................................................................................................... 7

第三章 系统硬件电路设计 ....................................................................................................................... 7

3.1 主控制系统电路 . ............................................................................................................................. 7

3.1.1 时钟电路 . .............................................................................................................................. 8

3.1.2 复位电路 . .............................................................................................................................. 9

3.2 信号灯显示电路 .......................................................................................................................... 10

3.3 数码管时间显示电路 .................................................................................................................... 10

3.4 独立式按键电路 . ........................................................................................................................... 11

第四章 系统软件设计 . ................................................................................................................................ 12

4.1 keil软件介绍 . ................................................................................................................................. 12

4.2 程序设计 . ....................................................................................................................................... 13

4.2.1 主流程图 . ............................................................................................................................ 13

4.2.3 自动模式下的洗衣流程 ..................................................................................................... 14

第五章 结论 . ................................................................................................................................................ 15

附录: . .................................................................................................................................................. 16

参考文献 . .............................................................................................................................................. 30

引言

单片机又称微控制器,或称嵌入式控制器。而现在的智能家电无一例外是采用微控制器来实现的,所以家用电器是单片机应用最多的领域之一。它是家用电器实现智能化的心脏和大脑。

由于家用电器体积小,故要求其控制器体积更小以便能嵌入其结构之中。而家用电器品种多,功能差异也大,所以又要求其控制器有灵活的控制功能。单片机以微小的体积和编程的灵活性而产生多种控制功能,完全可以满足家用电器的需求。

第一章 绪论

1.1功能概述

通电后,洗衣机进入暂停状态,以便放好衣物。若不选择洗衣周期,则洗衣机从进水过程开始,进水过程完成后,自动进入洗涤,洗涤完成后进入漂洗模式:排水—进水—漂洗,连续三次漂洗后进行脱水,脱水完成后洗衣机暂停工作。电机是一个正反转电机,可以形成往返水流,有利于洗涤衣物。能够显示洗涤剩余时间,如果洗衣机出现故障,将会有声光报警装置显示。

1.2设计分析及方法论证

洗涤过程实质就是使水与洗涤液的混合液与衣服之间有充分的行程冲刷,以使衣服上的污垢得以清除,以达到洗衣的目的,因此,在设计洗衣和漂洗过程中我们通过充分讨论决定使用电机的正反转来实现水的充分搅拌。脱水以电机的快速转动产生的离心力来实现,经过讨论和实际生活中的经验以及仿真的结果,以上方法完全可行。

本设计用AT89C51单片机实现洗衣机的控制,通过对拨码开关和键盘的操作实现菜

单的选择,当选择好模式后进入该模式设置该模式下的参数,然后再次扫描键盘,按开始键使洗衣机进入该模式进行工作。

在P3.4为低电平是进入菜单选择,菜单选择模式下若P0.0为低电平则进入进水程序,按开始键可进行进水,进水完成后自动进入洗衣程序;若P3.7为低电平检查P0.0、p0.1、p0.2 、p0.3、p0.4的电平,若为低则往下移一位,进入下一个模式,按开始键可从这一模式开始工作。

在P3.4为高电平时不是菜单模式,则去扫描键盘,扫描键盘为进水,洗涤,漂洗,排水,脱水模式,待选择好模式设定好参数后,然后进入相应模式运行。

洗衣机进入自动开始洗衣时,包括进水、洗涤、排水、漂洗、脱水几个过程。

洗衣过程:进入洗衣程序开定时器开始倒计时,根据选择的水位进水,进水完成后,进入洗涤过程,电动机开始正反转过程根据所选模式中设置的正反转次数正反转的时间自动洗衣;待洗涤完成就进入排水过程,排水时间由水位模式设置,排水结束后进入漂洗过程。漂洗过程:先进行一段时间排水,排水结束再进水,进水完成再进行漂洗,漂洗完成再排水,然后重复上述过程两次即完成漂洗过程,漂洗完成进入脱水过程,电机高速旋转,脱水结束,整个洗衣过程也结束,若在洗涤过程中洗衣机出现故障,将会有声光报警装置报警。

电机的正反转实现方式:当P3.2为1,P3.3为0时电机正转,当P3.2和P3.3都为0时电机停转,当P3.2为0,P3.3为1时电机反转。电机正常工作时电机工作状态LED 灯亮。

第二章 基础知识介绍

2.1 AT89C51单片机简介

AT89C51是一种带4K 字节闪烁可编程可擦除只读存储器(FPEROM —Falsh Programmable and Erasable Read Only Memory )的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K 字节闪烁可编程可擦除只读存储器的单片机。单片

机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.1.1主要特性:

·与MCS-51 兼容

·4K字节可编程闪烁存储器

寿命:1000写/擦循环

数据保留时间:10年

·全静态工作:0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

2.1.2管脚说明:

VCC :供电电压。

GND :接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1

口被外部下拉为

低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET ;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

2.2 LED数码管模块

LED 数码管是由若干个发光二级管组成显示字段的显示器件,有七段和“米”字段

之分。LED 数码管有共阴极和共阳极两种,发光二极管的阳极接在一起的称为共阳极数码管,阴极接在一起的称为共阴极数码管。一个数码管由8个发光二极管组成,其中,7个发光二极管a~g构成字型“8”的各个笔划,另一个dp 发光二极管为小数点。当某段发光二极管上施加一定的正向电压时,该段比划就亮;不加电压就暗。另外,为了保护各段LED 不被损坏,应该使其工作在安全电流下,故必须外加限流电阻。

本系统使用两位共阴七段数码管,其引脚如下图所示:

在实际应用中,LED 数码管有静态显示和动态显示两种显示方式。

静态显示方式,即七段LED 数码管在显示某一个字符时,相应的段恒定的导通

或截止,直至换显其他字符为止。

LED 的静态显示虽然有编程容易、管理简单等优点,但是静态显示所要占的I/O 口资源很多,所以在显示的LED 点较多的情况下,一般都采用动态显示方式,即在多位七段LED 显示中,将所有位的段选线并联在一起,由8 个I/O 口来控制8 个段。而公共端(共阳极/共阴极)则分别由相应的I/O 口控制,以实现各个位的分时选通。 由于所有的段选线并联到同一个I/O,由这个I/O 口来控制,因此,若是所有的4 位7 段LED 都选通的话,4 位7 段LED 将会显示相同的字符。要使各个位的7 段LED 显示不同的字符,就必须采用动态扫描方法来轮流点亮每一位7 段LED ,即在每一瞬间只选通一位7 段LED 进行显示单独的字符。在此段点亮时间内,段选控制I/O 口输出要显示的相应字符的段选码,而位选控制I/O 口则输出位选信号,向要显示的位送出选通电平(共阴极则送出低电平,共阳极则送出高电平),使得该位显示相应字符。这样将四位7 段LED 轮流去点亮,使得每位分时显示该位应显示的字符。由于人眼的视觉暂留时间为0.1 秒,当每位显示的间隔未超过33ms 时,并在显示时保持直到下一位显示,则由于人眼的视觉暂留效果眼睛看上去就像是4 位7 段LED 都在点亮。设计时,要注意每位显示的间隔时间,由于一位7 段LED 的熄灭时间不能超过100ms ,也就是说点亮其它位所用的时间不能超过100ms ,这样当有N 位的7 段LED 用来显示时,每一位间隔的时间t 就必须符合下面的式子:

t ≦100ms/(N-1)

比如,现在使用2位,也就是N =2,则由式子可以算出t ≦100ms ,就是每一位的间隔时间不能超过50ms 。实际应用中,时间可以设得短一些,比如5ms [5]。

2.3 键盘模块

在单片机应用系统中,用户要向计算机输入数据和命令,这些任务主要由键盘来完成。键盘由若干个按键按一定规则组合而成,根据按键的识别方法分类,可分为编码键盘和非编码键盘,在单片机系统中多用非编码键盘。

键盘中的按键都是一个常开开关电路,是利用机械触点来实现按键的闭合和释放。由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象。键的抖动时间一般为5~10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此须设法消除键接通或断时的抖动现象。去抖动的方法有硬件和软件两种方法,本系统采用软件延时的方法来避开抖动阶段。

采用软件去抖动的方法是在单片机检测到有键按下时执行一个5~10ms 的延时程序后再次检查该键电平是否仍保持闭合状态.如保持闭合状态,则确认为有键按下,否则按无键按下处理。当检测到按键释放后,也同样要延时5~10ms ,等待后沿抖动消失后才能转入该键的处理程序,只有这样才能保证当按键一次时,CPU 仅做一次相应处理。

第三章 系统硬件电路设计

3.1 主控制系统电路

主控制器采用MCS51系列单片机AT89C51,是一款性能稳定的8位单片机。AT89C51单片机内部由CPU 、8KB 的Flash ROM、256B 的RAM 、4个8位的I/O并行端口、一个串行口、三个16位定时/计数器及中断系统等组成。AT89C51外部需接时钟电路和复位电路,单片机才能正常工作。此外,VCC 引脚需接电源,GND 引脚需接地,EA/VPP引脚需接上拉电阻连接到电源。整套电路系统由主控制系统电路、信号灯显示电路、数码管时间显示电路和独立式键盘电路等组成。系统总电路图如下所示:

3.1.1 时钟电路

时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl 和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图3-1所示。在其外接晶体振荡器(简称晶振) 或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。图3-1中,外接晶体以及电容C1和C2构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为22pF ,晶振频率约为12MHz 。

[8]

图3-1 MCS-51单片机内部高增益反向放大器

3.1.2 复位电路

为了初始化单片机内部的某些特殊功能寄存器,必须利用复位电路,复位后可使

CPU 及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST 引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST 引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH ,堆栈指针SP 置为07H, SBUF 内置为不定值,其余的寄存器全部清0,内部RAM 的状态不受复位的影响,在系统上电时RAM 的内容是不定的。复位操作有两种情况,即上电复位和手动(开关) 复位。本系统采用上电复位方式。图3-2中R1和Cl 组成上电复位电路,其值R 取为8.2K Ω, C 取为10μF 。

图3-2 上电复位电路

3.2 信号灯显示电路

P3口外接6个发光二极管,采用共阳极接法,相应口线输出高电平则“信号灯”

灭,相应口线输出低电平则“信号灯”亮。为了保护发光二极管不被损坏,应该使其工作在安全电流下,故必须外加限流电阻,选用1k 的电阻,如图3-3所示。

图 3-3

3.3 数码管时间显示电路

LED 数码管通过P0和P2口以共阴极接法连接,如图3-4所示,P0作字形口,输出段码,故两个数码管的段码线对应并联在一起,由P0口控制数码管的显示。P2口作字位口,输出位码。其中,P2.0~P2.3分别控制两个数码管的个、十位显示,以实现各位的分时选通。

图3-4

3.4 独立式按键电路

A T89C51单片机的P3.4~P3.7口分别接菜单、开始、停止、菜单选择按键,当菜单按键按下时进入菜单选择模式,按菜单选择键进行洗衣机工作状态的选择。需按下“启动”键才能进入正常工作,按下停止键,洗衣机工作停止,结束工作。

图3-5

第四章 系统软件设计

4.1 keil软件介绍

keil 软件是目前最流行开发MCS-51系列单片机的软件,这从近几年各仿真机厂商纷纷宣布全面支持keil 即可看出。keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开放方案,通过一个集成开发环境将这些部分组成在一起. 单片机应用系统的软件设计是系统设计中最基本而且工作量较大的任务。与系统机上操作系统支持下的纯软件不同,单片机的软件设计是在裸机的条件下进行的,而且随应用系统的不同而不同。在软件中一般需考虑以下几个方面:

1) 根据要求确定软件的具体任务细节,然后确定合理的软件结构。一般系统软件的主程序和若干个子程序及中断服务程序组成,详细划分主程序、子程序和中断服务程序的具体任务,确定各个中断的优先级。主程序是一个顺序执行的无限循环的程序, 不停地顺序查询各种软件标志,以完成对事务的处理。在子程序和中断服务程序中, 要考虑现场的保护和恢复,以及它们和主程序之间的信息交换方法。

2) 程序的结构用模块化结构,即把监控程序分解为若干个功能相对独立的较小的程序模块分别设计,以便于调试。具体设计时可采用自底向上或自顶向下的方法。

3) 在进行程序设计时, 先根据问题的定义描述出各个输入变量和输出变量之间的数学关系,即建立数学模型, 然后绘制流程图,再根据流程图用汇编语言进行具体程序的编写。

4) 在程序设计完成后,利用相应的开发工具和软件进行程序的汇编,生成程序的机器码[6]。

本设计中系统软件是采用C51编写的. 在研制单片机应用系统时,汇编语言是一种常用的软件工具,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。用C 语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统。

4.2 程序设计 4.2.1 主流程图

4.2.2 电机正反转流程

4.2.3 自动模式下的洗衣流程

第五章 结论

经过了一周的课程设计,深有感触。刚开始时,我们接到这个任务,大脑一片茫然,

根本不知道如何下手。 用isis 及keil uVisiion4软件进行仿真分析。首先要搞清楚洗衣机的工作原理,与外部电路的连接,单片机原理,c 语言等。因为基础知识不够扎实,对各种硬件和程序的认识存在各方面的不足。前期这些障碍给我们造成了很大的困难。我们从最初开始,通过查找各种书籍,上网查阅相关知识,向老师及同学请教,经过反复的修改,最终才得已完成这份设计。虽然还存在各种的不足,但是看着我们自己辛苦设计出来的作业,心里还是充满了自豪。

从本次课程设计的目的来看,收获也是不少的,它使我们对课本以及以前学过的知识有了一个更好的总结与理解,也让我们知道了,光分开使不够的,从外面学到的知识要把形成一各整体,这也很好的训练了外面对开发一个项目应该有怎样的思路和准备更清晰。这次设计实验锻炼了我们的团队合作能力,加强了我们的动手能力,使我们从中学到了很多知识。

最后要感谢本次设计实验的指导老师,在老师的精心指导下,我们才最终突破一些难以解决的问题,完成这次设计任务,同时还要感谢我的同组同学,在与他和合作中他给了我很大的帮助,与他的讨论和交流给了自己很多有益的启迪,对自己掌握学科知识、完成设计任务和论文写作给予了很大帮助。同时,还要感谢学校为我们安排了这个教学环节,也感谢在此次设计过程中给与我极大帮助和理解班主任和辅导员。

附录:

程序设计:

#include

//****************************// #define uchar unsigned char #define uint unsigned int

//*******************************// //***************************// sbit mo_r = P3^2; //电机右控制线 sbit mo_l = P3^3;

//电机左控制线

//****************************// sbit key_menu = P3^4; // 菜单按键 sbit key_on = P3^5;

// 开始按键 sbit key_off = P3^6; // 结束按键 sbit key_se = P3^7; //

菜单选择按键

//***************************// sbit led_in = P0^0;

//

进水指示灯

sbit led_xi = P0^1;

// 洗衣指示灯

sbit led_piao = P0^2; // 漂洗指示灯

sbit led_xx = P0^3;

// 脱水指示灯

sbit led_out = P0^4; // 排水指示灯 sbit led_over = P0^5; // 洗衣结束指示灯 sbit led_work = P0^6; // 电机工作指示灯

sbit led_wring = P0^7; // 报警指示灯

sbit other = P3^1; // 脱水电源控制开关 sbit anther = P3^0; //

洗衣电源控制开关

//******************************//

uchar code num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//

//*****************************// char sec = 0; // 时间秒 char min = 0;

// 时间分 uchar count=0; // 中断计数

uchar flag0=0; // 洗衣机工作状态标志 uchar flag1=0; // 进水次数标志 uchar flag2=0; // 排水次数标志 uchar flag3=0; //

漂洗次数标志

uchar err =0;

// 报警标志

uchar quan = 0;//正反转计数

//**********************************// //

函数声明

//*************************************// void delay();// 延时函数 void in(); // 进水子程序 void out(); //

排水子程序

void over(); // 结束子程序 void xi(); // 洗衣子程序 void piao(); //

漂衣子程序

void xx(); //

脱水子程序

void on(); // 工作on 处理子程序

void se(); // 显示菜单选择

void SEG_display(); //显示时间子程序 void key_scan(); // 按键扫描子程序

//*****************************// // 延时函数

//****************************// void delay(uint i) { uint x,y; for(x=i;x>0;x--) for(y=120;y>0;y--);

}

//******************************// //

工作on 处理子程序 //********************************// void on() { TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;

P0 = 0xff; if(flag0 == 0) in();

if(flag0 == 1)

xi();

if(flag0 == 2)

piao();

if(flag0 == 3)

xx();

if(flag0 == 4)

out();

}

//*******************************//

// 结束子程序

//*********************************//

void over()

{ other=0;

anther=0;

P0 = 0xff;

mo_r=0;

mo_l=0;

led_over = 0;

EA=0;

}

//*********************************//

// 进水子程序

//*********************************//

void in()

{ anther=0;

other=0;

P0 = 0xff;

led_in = 0;

flag1++;

mo_r = 0;

mo_l = 0;

min = 0;

sec = 8;

}

//*********************************//

// 洗衣子程序

//*********************************//

void xi()

{ anther=1;

other=0;

P0 = 0xff;

led_work = 0;

led_xi = 0;

mo_r = 1;

mo_l = 0;

min = 6;

sec = 36;

quan = 0;

}

//*********************************//

// 漂衣子程序

//*********************************//

void piao()

anther=1;

other=0;

P0 = 0xff;

led_piao = 0;

led_work = 0;

flag3++;

mo_r = 1;

mo_l = 0;

min = 5;

sec = 35;

quan = 0;

}

//*********************************//

// 脱水子程序

//*********************************//

void xx()

{ other=1;

anther=0;

P0 = 0xff;

led_xx = 0;

mo_r = 0;

mo_l = 1;

min = 2;

sec = 50;

}

//*********************************//

// 排水子程序

//*********************************//

{ anther=0;

other=0;

P0 = 0xff;

led_out = 0;

flag2++;

mo_r = 0;

mo_l = 0;

min = 1;

sec = 5;

}

//*********************************//

// 显示菜单选择

//*********************************//

void se()

{

P0 = 0xff;

if(flag0 >= 5)

flag0 = 0;

if(flag0 == 0)

{

led_in = 0;

}

if(flag0 == 1)

{

led_xi=0;

}

if(flag0 == 2)

{

led_piao=0;

}

if(flag0 == 3)

{

led_xx=0;

}

if(flag0 == 4)

{

led_out=0;

}

}

//********************************//

// 菜单处理子程序

//**********************************//

void menu()

{

min = 0;

sec = 0;

mo_r=0;

mo_l=0;

SEG_display();

while(1)

{

if(key_on == 0)

{

delay(5);

if(key_on == 0)

{

while(!key_on);

on();

break;

}

}

//**************************//

if(key_off == 0)

{

delay(5);

if(key_off == 0)

{

while(!key_off);

over();

break;

}

}

//****************************//

if(key_se == 0)

{

delay(5);

if(key_se == 0)

{

while(!key_se);

flag0++;

se();

}

}

}

}

//*********************************//

// 按键扫描子程序

//*********************************//

void key_scan()

{

if(key_menu == 0)

{

delay(5);

if(key_menu == 0)

{

while(!key_menu);

menu();

}

}

//********************************//

if(key_on == 0)

{

delay(5);

if(key_on == 0)

{

while(!key_on);

on();

}

}

//*********************************//

if(key_off == 0)

{

delay(5);

if(key_off == 0)

while(!key_off);

over();

}

}

}

//*******************************//

// 显示子程序

//*********************************//

void SEG_display()

{

P1=0x01;

P2 = num[min/10];

delay(10);

P1 = 0x02;

P2 = num[min%10];

delay(10);

P1 = 0x04;

P2 = num[sec/10];

delay(10);

P1 = 0x08;

P2 = num[sec%10];

delay(10);

}

//*********************************//

// 主函数

//*********************************//

void main()

{

anther=0;

other=0;

while(1)

{

SEG_display();

key_scan();

}

}

//**********************************//

// 定时器0中断处理程序

//**********************************//

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

count = 0;

sec--;

if((flag0==1)||(flag0==2))

{

quan++;

switch(quan)

{

case 1:mo_r=1;mo_l=0;break; case 10:mo_r=0;mo_l=0;break;

case 15:mo_r=0;mo_l=1;break; case 25:mo_r=0;mo_l=0;break; default:;

}

if(quan==30)

{

quan=0;

}

}

//**********************************//

if((sec == 0)&&(min != 0))

{

min--;

sec = 59;

}

//**********************************//

if((sec

switch(flag1)

{

case 1:flag0=1;xi();break;

case 2:flag0=2;piao();break;

case 3:flag0=2;piao();break;

case 4:flag0=2;piao();break;

default: err=1;led_wring = 0;

}

}

//**********************************//

if((sec

{

flag0 = 4;

out();

}

//**********************************//

if((sec

{

switch(flag3)

{

case 1:flag0=4;out();break;

case 2:flag0=4;out();break;

case 3:flag0=4;out();break;

default: err=1;led_wring = 0;

}

}

//**********************************//

if((sec

{

switch(flag2)

{

case 1:flag0=0;in();break;

case 2:flag0=0;in();break;

case 3:flag0=0;in();break;

case 4:flag0=3;xx();break;

default: err= 1;led_wring = 0;

}

29

}

//***********************************//

if((sec

{ sec = 0;

over();

}

}

}

参考文献

[1] 杨欣, 王玉凤, 刘湘琴编著. 51单片机应用从零开始. 清华大学出版社

[2] 李泉溪编著. 单片机原理与应用实例仿真. 北京航空航天出版社

30

洗衣机人机界面的设计

摘要:

单片机是计算机家庭的一个重要分支,它具有体积小、价格低、面向控制的特点,适用于各种工业控制、仪器仪表装置,在人类生产和生活的各个领域都有极为广泛应用。 本洗衣机控制系统,采用目前常用的AT89C51单片机,用c 语言的编程方法,完成对洗衣机洗衣全过程的自动控制,并采用LED 数码显示洗衣剩余时间。使全自动洗衣机的使用更加简单、直观和方便。本设计取材容易,结构简洁,易于制作,具有一定的实用价值。

关键字:AT89C51单片机、洗衣机、c 语言

目录

引言 . ................................................................................................................................................................ 1

第一章 绪论 . ................................................................................................................................................ 1

1.1功能概述 . .......................................................................................................................................... 1

1.2设计分析及方法论证 ....................................................................................................................... 1

第二章 基础知识介绍 . .................................................................................................................................. 2

2.2 LED数码管模块 .............................................................................................................................. 5

2.3 键盘模块 . ......................................................................................................................................... 7

第三章 系统硬件电路设计 ....................................................................................................................... 7

3.1 主控制系统电路 . ............................................................................................................................. 7

3.1.1 时钟电路 . .............................................................................................................................. 8

3.1.2 复位电路 . .............................................................................................................................. 9

3.2 信号灯显示电路 .......................................................................................................................... 10

3.3 数码管时间显示电路 .................................................................................................................... 10

3.4 独立式按键电路 . ........................................................................................................................... 11

第四章 系统软件设计 . ................................................................................................................................ 12

4.1 keil软件介绍 . ................................................................................................................................. 12

4.2 程序设计 . ....................................................................................................................................... 13

4.2.1 主流程图 . ............................................................................................................................ 13

4.2.3 自动模式下的洗衣流程 ..................................................................................................... 14

第五章 结论 . ................................................................................................................................................ 15

附录: . .................................................................................................................................................. 16

参考文献 . .............................................................................................................................................. 30

引言

单片机又称微控制器,或称嵌入式控制器。而现在的智能家电无一例外是采用微控制器来实现的,所以家用电器是单片机应用最多的领域之一。它是家用电器实现智能化的心脏和大脑。

由于家用电器体积小,故要求其控制器体积更小以便能嵌入其结构之中。而家用电器品种多,功能差异也大,所以又要求其控制器有灵活的控制功能。单片机以微小的体积和编程的灵活性而产生多种控制功能,完全可以满足家用电器的需求。

第一章 绪论

1.1功能概述

通电后,洗衣机进入暂停状态,以便放好衣物。若不选择洗衣周期,则洗衣机从进水过程开始,进水过程完成后,自动进入洗涤,洗涤完成后进入漂洗模式:排水—进水—漂洗,连续三次漂洗后进行脱水,脱水完成后洗衣机暂停工作。电机是一个正反转电机,可以形成往返水流,有利于洗涤衣物。能够显示洗涤剩余时间,如果洗衣机出现故障,将会有声光报警装置显示。

1.2设计分析及方法论证

洗涤过程实质就是使水与洗涤液的混合液与衣服之间有充分的行程冲刷,以使衣服上的污垢得以清除,以达到洗衣的目的,因此,在设计洗衣和漂洗过程中我们通过充分讨论决定使用电机的正反转来实现水的充分搅拌。脱水以电机的快速转动产生的离心力来实现,经过讨论和实际生活中的经验以及仿真的结果,以上方法完全可行。

本设计用AT89C51单片机实现洗衣机的控制,通过对拨码开关和键盘的操作实现菜

单的选择,当选择好模式后进入该模式设置该模式下的参数,然后再次扫描键盘,按开始键使洗衣机进入该模式进行工作。

在P3.4为低电平是进入菜单选择,菜单选择模式下若P0.0为低电平则进入进水程序,按开始键可进行进水,进水完成后自动进入洗衣程序;若P3.7为低电平检查P0.0、p0.1、p0.2 、p0.3、p0.4的电平,若为低则往下移一位,进入下一个模式,按开始键可从这一模式开始工作。

在P3.4为高电平时不是菜单模式,则去扫描键盘,扫描键盘为进水,洗涤,漂洗,排水,脱水模式,待选择好模式设定好参数后,然后进入相应模式运行。

洗衣机进入自动开始洗衣时,包括进水、洗涤、排水、漂洗、脱水几个过程。

洗衣过程:进入洗衣程序开定时器开始倒计时,根据选择的水位进水,进水完成后,进入洗涤过程,电动机开始正反转过程根据所选模式中设置的正反转次数正反转的时间自动洗衣;待洗涤完成就进入排水过程,排水时间由水位模式设置,排水结束后进入漂洗过程。漂洗过程:先进行一段时间排水,排水结束再进水,进水完成再进行漂洗,漂洗完成再排水,然后重复上述过程两次即完成漂洗过程,漂洗完成进入脱水过程,电机高速旋转,脱水结束,整个洗衣过程也结束,若在洗涤过程中洗衣机出现故障,将会有声光报警装置报警。

电机的正反转实现方式:当P3.2为1,P3.3为0时电机正转,当P3.2和P3.3都为0时电机停转,当P3.2为0,P3.3为1时电机反转。电机正常工作时电机工作状态LED 灯亮。

第二章 基础知识介绍

2.1 AT89C51单片机简介

AT89C51是一种带4K 字节闪烁可编程可擦除只读存储器(FPEROM —Falsh Programmable and Erasable Read Only Memory )的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K 字节闪烁可编程可擦除只读存储器的单片机。单片

机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.1.1主要特性:

·与MCS-51 兼容

·4K字节可编程闪烁存储器

寿命:1000写/擦循环

数据保留时间:10年

·全静态工作:0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路

2.1.2管脚说明:

VCC :供电电压。

GND :接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1

口被外部下拉为

低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL )这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST :复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时, ALE只有在执行MOVX ,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET ;当/EA端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP )。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

2.2 LED数码管模块

LED 数码管是由若干个发光二级管组成显示字段的显示器件,有七段和“米”字段

之分。LED 数码管有共阴极和共阳极两种,发光二极管的阳极接在一起的称为共阳极数码管,阴极接在一起的称为共阴极数码管。一个数码管由8个发光二极管组成,其中,7个发光二极管a~g构成字型“8”的各个笔划,另一个dp 发光二极管为小数点。当某段发光二极管上施加一定的正向电压时,该段比划就亮;不加电压就暗。另外,为了保护各段LED 不被损坏,应该使其工作在安全电流下,故必须外加限流电阻。

本系统使用两位共阴七段数码管,其引脚如下图所示:

在实际应用中,LED 数码管有静态显示和动态显示两种显示方式。

静态显示方式,即七段LED 数码管在显示某一个字符时,相应的段恒定的导通

或截止,直至换显其他字符为止。

LED 的静态显示虽然有编程容易、管理简单等优点,但是静态显示所要占的I/O 口资源很多,所以在显示的LED 点较多的情况下,一般都采用动态显示方式,即在多位七段LED 显示中,将所有位的段选线并联在一起,由8 个I/O 口来控制8 个段。而公共端(共阳极/共阴极)则分别由相应的I/O 口控制,以实现各个位的分时选通。 由于所有的段选线并联到同一个I/O,由这个I/O 口来控制,因此,若是所有的4 位7 段LED 都选通的话,4 位7 段LED 将会显示相同的字符。要使各个位的7 段LED 显示不同的字符,就必须采用动态扫描方法来轮流点亮每一位7 段LED ,即在每一瞬间只选通一位7 段LED 进行显示单独的字符。在此段点亮时间内,段选控制I/O 口输出要显示的相应字符的段选码,而位选控制I/O 口则输出位选信号,向要显示的位送出选通电平(共阴极则送出低电平,共阳极则送出高电平),使得该位显示相应字符。这样将四位7 段LED 轮流去点亮,使得每位分时显示该位应显示的字符。由于人眼的视觉暂留时间为0.1 秒,当每位显示的间隔未超过33ms 时,并在显示时保持直到下一位显示,则由于人眼的视觉暂留效果眼睛看上去就像是4 位7 段LED 都在点亮。设计时,要注意每位显示的间隔时间,由于一位7 段LED 的熄灭时间不能超过100ms ,也就是说点亮其它位所用的时间不能超过100ms ,这样当有N 位的7 段LED 用来显示时,每一位间隔的时间t 就必须符合下面的式子:

t ≦100ms/(N-1)

比如,现在使用2位,也就是N =2,则由式子可以算出t ≦100ms ,就是每一位的间隔时间不能超过50ms 。实际应用中,时间可以设得短一些,比如5ms [5]。

2.3 键盘模块

在单片机应用系统中,用户要向计算机输入数据和命令,这些任务主要由键盘来完成。键盘由若干个按键按一定规则组合而成,根据按键的识别方法分类,可分为编码键盘和非编码键盘,在单片机系统中多用非编码键盘。

键盘中的按键都是一个常开开关电路,是利用机械触点来实现按键的闭合和释放。由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象。键的抖动时间一般为5~10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此须设法消除键接通或断时的抖动现象。去抖动的方法有硬件和软件两种方法,本系统采用软件延时的方法来避开抖动阶段。

采用软件去抖动的方法是在单片机检测到有键按下时执行一个5~10ms 的延时程序后再次检查该键电平是否仍保持闭合状态.如保持闭合状态,则确认为有键按下,否则按无键按下处理。当检测到按键释放后,也同样要延时5~10ms ,等待后沿抖动消失后才能转入该键的处理程序,只有这样才能保证当按键一次时,CPU 仅做一次相应处理。

第三章 系统硬件电路设计

3.1 主控制系统电路

主控制器采用MCS51系列单片机AT89C51,是一款性能稳定的8位单片机。AT89C51单片机内部由CPU 、8KB 的Flash ROM、256B 的RAM 、4个8位的I/O并行端口、一个串行口、三个16位定时/计数器及中断系统等组成。AT89C51外部需接时钟电路和复位电路,单片机才能正常工作。此外,VCC 引脚需接电源,GND 引脚需接地,EA/VPP引脚需接上拉电阻连接到电源。整套电路系统由主控制系统电路、信号灯显示电路、数码管时间显示电路和独立式键盘电路等组成。系统总电路图如下所示:

3.1.1 时钟电路

时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl 和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图3-1所示。在其外接晶体振荡器(简称晶振) 或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。图3-1中,外接晶体以及电容C1和C2构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为22pF ,晶振频率约为12MHz 。

[8]

图3-1 MCS-51单片机内部高增益反向放大器

3.1.2 复位电路

为了初始化单片机内部的某些特殊功能寄存器,必须利用复位电路,复位后可使

CPU 及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST 引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST 引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH ,堆栈指针SP 置为07H, SBUF 内置为不定值,其余的寄存器全部清0,内部RAM 的状态不受复位的影响,在系统上电时RAM 的内容是不定的。复位操作有两种情况,即上电复位和手动(开关) 复位。本系统采用上电复位方式。图3-2中R1和Cl 组成上电复位电路,其值R 取为8.2K Ω, C 取为10μF 。

图3-2 上电复位电路

3.2 信号灯显示电路

P3口外接6个发光二极管,采用共阳极接法,相应口线输出高电平则“信号灯”

灭,相应口线输出低电平则“信号灯”亮。为了保护发光二极管不被损坏,应该使其工作在安全电流下,故必须外加限流电阻,选用1k 的电阻,如图3-3所示。

图 3-3

3.3 数码管时间显示电路

LED 数码管通过P0和P2口以共阴极接法连接,如图3-4所示,P0作字形口,输出段码,故两个数码管的段码线对应并联在一起,由P0口控制数码管的显示。P2口作字位口,输出位码。其中,P2.0~P2.3分别控制两个数码管的个、十位显示,以实现各位的分时选通。

图3-4

3.4 独立式按键电路

A T89C51单片机的P3.4~P3.7口分别接菜单、开始、停止、菜单选择按键,当菜单按键按下时进入菜单选择模式,按菜单选择键进行洗衣机工作状态的选择。需按下“启动”键才能进入正常工作,按下停止键,洗衣机工作停止,结束工作。

图3-5

第四章 系统软件设计

4.1 keil软件介绍

keil 软件是目前最流行开发MCS-51系列单片机的软件,这从近几年各仿真机厂商纷纷宣布全面支持keil 即可看出。keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开放方案,通过一个集成开发环境将这些部分组成在一起. 单片机应用系统的软件设计是系统设计中最基本而且工作量较大的任务。与系统机上操作系统支持下的纯软件不同,单片机的软件设计是在裸机的条件下进行的,而且随应用系统的不同而不同。在软件中一般需考虑以下几个方面:

1) 根据要求确定软件的具体任务细节,然后确定合理的软件结构。一般系统软件的主程序和若干个子程序及中断服务程序组成,详细划分主程序、子程序和中断服务程序的具体任务,确定各个中断的优先级。主程序是一个顺序执行的无限循环的程序, 不停地顺序查询各种软件标志,以完成对事务的处理。在子程序和中断服务程序中, 要考虑现场的保护和恢复,以及它们和主程序之间的信息交换方法。

2) 程序的结构用模块化结构,即把监控程序分解为若干个功能相对独立的较小的程序模块分别设计,以便于调试。具体设计时可采用自底向上或自顶向下的方法。

3) 在进行程序设计时, 先根据问题的定义描述出各个输入变量和输出变量之间的数学关系,即建立数学模型, 然后绘制流程图,再根据流程图用汇编语言进行具体程序的编写。

4) 在程序设计完成后,利用相应的开发工具和软件进行程序的汇编,生成程序的机器码[6]。

本设计中系统软件是采用C51编写的. 在研制单片机应用系统时,汇编语言是一种常用的软件工具,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。用C 语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统。

4.2 程序设计 4.2.1 主流程图

4.2.2 电机正反转流程

4.2.3 自动模式下的洗衣流程

第五章 结论

经过了一周的课程设计,深有感触。刚开始时,我们接到这个任务,大脑一片茫然,

根本不知道如何下手。 用isis 及keil uVisiion4软件进行仿真分析。首先要搞清楚洗衣机的工作原理,与外部电路的连接,单片机原理,c 语言等。因为基础知识不够扎实,对各种硬件和程序的认识存在各方面的不足。前期这些障碍给我们造成了很大的困难。我们从最初开始,通过查找各种书籍,上网查阅相关知识,向老师及同学请教,经过反复的修改,最终才得已完成这份设计。虽然还存在各种的不足,但是看着我们自己辛苦设计出来的作业,心里还是充满了自豪。

从本次课程设计的目的来看,收获也是不少的,它使我们对课本以及以前学过的知识有了一个更好的总结与理解,也让我们知道了,光分开使不够的,从外面学到的知识要把形成一各整体,这也很好的训练了外面对开发一个项目应该有怎样的思路和准备更清晰。这次设计实验锻炼了我们的团队合作能力,加强了我们的动手能力,使我们从中学到了很多知识。

最后要感谢本次设计实验的指导老师,在老师的精心指导下,我们才最终突破一些难以解决的问题,完成这次设计任务,同时还要感谢我的同组同学,在与他和合作中他给了我很大的帮助,与他的讨论和交流给了自己很多有益的启迪,对自己掌握学科知识、完成设计任务和论文写作给予了很大帮助。同时,还要感谢学校为我们安排了这个教学环节,也感谢在此次设计过程中给与我极大帮助和理解班主任和辅导员。

附录:

程序设计:

#include

//****************************// #define uchar unsigned char #define uint unsigned int

//*******************************// //***************************// sbit mo_r = P3^2; //电机右控制线 sbit mo_l = P3^3;

//电机左控制线

//****************************// sbit key_menu = P3^4; // 菜单按键 sbit key_on = P3^5;

// 开始按键 sbit key_off = P3^6; // 结束按键 sbit key_se = P3^7; //

菜单选择按键

//***************************// sbit led_in = P0^0;

//

进水指示灯

sbit led_xi = P0^1;

// 洗衣指示灯

sbit led_piao = P0^2; // 漂洗指示灯

sbit led_xx = P0^3;

// 脱水指示灯

sbit led_out = P0^4; // 排水指示灯 sbit led_over = P0^5; // 洗衣结束指示灯 sbit led_work = P0^6; // 电机工作指示灯

sbit led_wring = P0^7; // 报警指示灯

sbit other = P3^1; // 脱水电源控制开关 sbit anther = P3^0; //

洗衣电源控制开关

//******************************//

uchar code num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//

//*****************************// char sec = 0; // 时间秒 char min = 0;

// 时间分 uchar count=0; // 中断计数

uchar flag0=0; // 洗衣机工作状态标志 uchar flag1=0; // 进水次数标志 uchar flag2=0; // 排水次数标志 uchar flag3=0; //

漂洗次数标志

uchar err =0;

// 报警标志

uchar quan = 0;//正反转计数

//**********************************// //

函数声明

//*************************************// void delay();// 延时函数 void in(); // 进水子程序 void out(); //

排水子程序

void over(); // 结束子程序 void xi(); // 洗衣子程序 void piao(); //

漂衣子程序

void xx(); //

脱水子程序

void on(); // 工作on 处理子程序

void se(); // 显示菜单选择

void SEG_display(); //显示时间子程序 void key_scan(); // 按键扫描子程序

//*****************************// // 延时函数

//****************************// void delay(uint i) { uint x,y; for(x=i;x>0;x--) for(y=120;y>0;y--);

}

//******************************// //

工作on 处理子程序 //********************************// void on() { TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;

P0 = 0xff; if(flag0 == 0) in();

if(flag0 == 1)

xi();

if(flag0 == 2)

piao();

if(flag0 == 3)

xx();

if(flag0 == 4)

out();

}

//*******************************//

// 结束子程序

//*********************************//

void over()

{ other=0;

anther=0;

P0 = 0xff;

mo_r=0;

mo_l=0;

led_over = 0;

EA=0;

}

//*********************************//

// 进水子程序

//*********************************//

void in()

{ anther=0;

other=0;

P0 = 0xff;

led_in = 0;

flag1++;

mo_r = 0;

mo_l = 0;

min = 0;

sec = 8;

}

//*********************************//

// 洗衣子程序

//*********************************//

void xi()

{ anther=1;

other=0;

P0 = 0xff;

led_work = 0;

led_xi = 0;

mo_r = 1;

mo_l = 0;

min = 6;

sec = 36;

quan = 0;

}

//*********************************//

// 漂衣子程序

//*********************************//

void piao()

anther=1;

other=0;

P0 = 0xff;

led_piao = 0;

led_work = 0;

flag3++;

mo_r = 1;

mo_l = 0;

min = 5;

sec = 35;

quan = 0;

}

//*********************************//

// 脱水子程序

//*********************************//

void xx()

{ other=1;

anther=0;

P0 = 0xff;

led_xx = 0;

mo_r = 0;

mo_l = 1;

min = 2;

sec = 50;

}

//*********************************//

// 排水子程序

//*********************************//

{ anther=0;

other=0;

P0 = 0xff;

led_out = 0;

flag2++;

mo_r = 0;

mo_l = 0;

min = 1;

sec = 5;

}

//*********************************//

// 显示菜单选择

//*********************************//

void se()

{

P0 = 0xff;

if(flag0 >= 5)

flag0 = 0;

if(flag0 == 0)

{

led_in = 0;

}

if(flag0 == 1)

{

led_xi=0;

}

if(flag0 == 2)

{

led_piao=0;

}

if(flag0 == 3)

{

led_xx=0;

}

if(flag0 == 4)

{

led_out=0;

}

}

//********************************//

// 菜单处理子程序

//**********************************//

void menu()

{

min = 0;

sec = 0;

mo_r=0;

mo_l=0;

SEG_display();

while(1)

{

if(key_on == 0)

{

delay(5);

if(key_on == 0)

{

while(!key_on);

on();

break;

}

}

//**************************//

if(key_off == 0)

{

delay(5);

if(key_off == 0)

{

while(!key_off);

over();

break;

}

}

//****************************//

if(key_se == 0)

{

delay(5);

if(key_se == 0)

{

while(!key_se);

flag0++;

se();

}

}

}

}

//*********************************//

// 按键扫描子程序

//*********************************//

void key_scan()

{

if(key_menu == 0)

{

delay(5);

if(key_menu == 0)

{

while(!key_menu);

menu();

}

}

//********************************//

if(key_on == 0)

{

delay(5);

if(key_on == 0)

{

while(!key_on);

on();

}

}

//*********************************//

if(key_off == 0)

{

delay(5);

if(key_off == 0)

while(!key_off);

over();

}

}

}

//*******************************//

// 显示子程序

//*********************************//

void SEG_display()

{

P1=0x01;

P2 = num[min/10];

delay(10);

P1 = 0x02;

P2 = num[min%10];

delay(10);

P1 = 0x04;

P2 = num[sec/10];

delay(10);

P1 = 0x08;

P2 = num[sec%10];

delay(10);

}

//*********************************//

// 主函数

//*********************************//

void main()

{

anther=0;

other=0;

while(1)

{

SEG_display();

key_scan();

}

}

//**********************************//

// 定时器0中断处理程序

//**********************************//

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

count = 0;

sec--;

if((flag0==1)||(flag0==2))

{

quan++;

switch(quan)

{

case 1:mo_r=1;mo_l=0;break; case 10:mo_r=0;mo_l=0;break;

case 15:mo_r=0;mo_l=1;break; case 25:mo_r=0;mo_l=0;break; default:;

}

if(quan==30)

{

quan=0;

}

}

//**********************************//

if((sec == 0)&&(min != 0))

{

min--;

sec = 59;

}

//**********************************//

if((sec

switch(flag1)

{

case 1:flag0=1;xi();break;

case 2:flag0=2;piao();break;

case 3:flag0=2;piao();break;

case 4:flag0=2;piao();break;

default: err=1;led_wring = 0;

}

}

//**********************************//

if((sec

{

flag0 = 4;

out();

}

//**********************************//

if((sec

{

switch(flag3)

{

case 1:flag0=4;out();break;

case 2:flag0=4;out();break;

case 3:flag0=4;out();break;

default: err=1;led_wring = 0;

}

}

//**********************************//

if((sec

{

switch(flag2)

{

case 1:flag0=0;in();break;

case 2:flag0=0;in();break;

case 3:flag0=0;in();break;

case 4:flag0=3;xx();break;

default: err= 1;led_wring = 0;

}

29

}

//***********************************//

if((sec

{ sec = 0;

over();

}

}

}

参考文献

[1] 杨欣, 王玉凤, 刘湘琴编著. 51单片机应用从零开始. 清华大学出版社

[2] 李泉溪编著. 单片机原理与应用实例仿真. 北京航空航天出版社

30


相关内容

  • 干洗店管理系统
  • 目录 摘要 . ............................................................................................................ 1 序言 . .......................... ...

  • 图形用户界面的外观设计专利保护_程云华
  • 074 / 总第261期 / 2015 / 01 专利释疑 Explanation of Patents The Appearance Design Patent Protection of Graphical User Interface 程云华 Cheng Yunhua张 霞 Zhang Xia ...

  • 水位传感器应用洗衣机
  • 1 引言 目前,可编程序控制器(简称PLC)由于具有功能强.可编程.智能化等特点,已成为工业控制领域中最主要的自动化装置之一,它是当前电气程控技术的主要实现手段.用PLC控制系统取代传统的继电器控制方式,可简化接线,方便调试,提高系统可靠性. 触摸屏是专为PLC应用而设计的一种高科技人机界面产品,由 ...

  • 老年人行为分析与产品无障碍设计策略
  • 第11卷第1期2009年2月 JOURNAL OF 北京理工大学学报(社会科学版) BEIJING INSTITUTE OF TECHNOLOGY (SOCIAL SCIENCES EDITION )Vol.11No.1Feb.2009 老年人行为分析与产品无障碍设计策略 王秋惠 (北京理工大学 摘 ...

  • 大专毕业论文 变频器在工业洗衣机中的应用
  • 目录 目录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 摘要„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 前言„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2 第一章.工业洗衣机„„„„„„„„„„„„„„„„„„„„„„„„„„„3 一.工业 ...

  • 教学设计--顺序结构
  • 教材分析 学情分析 教学目标 知识与技能:了解程序的顺序结构:掌握文本框控件.变量.赋值语句.数据类型和Val 函数的使用:初步了解调试程序的方法. 过程与方法:在实践活动的过程中再次体会VB 程序设计的过程,以及体会顺序结构程序的运行过程. 情感态度价值观:在小组合作学习中,相互学习.相互帮助.相 ...

  • 精细化工习题
  • 第一章思考题 2.精细化学品的发展趋势是什么?P7 :调整化学工业的行业结构.产品结构,逐步向高技术化.精细化.专用化方向发展. 3.何为精细化学品?它可以分为哪几类? :精细化学品是一类具有特定应用功能和专门用途的化工产品.可分为通用化学品.半(拟)通用化学品.(一般)精细化学品.专用化学品.我国 ...

  • 技术及其性质测试题三
  • 技术及其性质测试题三 (考试时间:60分钟,总分100分) 一.选择题(共25个,每个3分,总分75分) 1.以下设计中不是为了实现人机关系中的"安全"这一目标的是( ) A .台式钻床装有防护罩 B .楼梯装有护栏 C .笔杆的握笔处设计成弧形 D .浴室的地面装防滑砖 2.下 ...

  • 自动化毕业实习报告
  • 生产实习报告 一.实习目的 自动化广泛应用于现代工业生产中,在很大程度上减轻了人的劳动强度改善了工作环将,同时也有效提高了产品质量.学习自动化的最终目的是服务工业生产,因此自动化学习不应仅局限于课本.实际生产中的复杂情况要求我们必须将理论和实际相结合.本次实习主要是了解自动化技术在工业中的应用,巩固 ...