课程设计说明书
设计题目: 基于单片机AT89C51洗衣机 控制系统设计 专 业: 机械电子工程
班 级: 机电15-2班
学 号: 3120150106229 姓 名: 吕 指导老师: 余
目录 摘要............................................................................................................................................1 第一章 绪论..............................................................................................................................1 第二章 方案设计与论证..........................................................................................................2 2.1 方案一...........................................................................................................................2 2.2 方案论证与选择...........................................................................................................2 第三章 系统硬件设计..........................................................................................................3 3.1 总体设计及功能描述...................................................................................................3 3.2 单片机控制单元 ......................................................................................................... 3 3.3 蜂鸣器报警电路设计 ............................................................................................... 3 3.4桥式整流电路 ...............................................................................................................3 2. 3 显示电路设计.............................................................................................................3 3.5 各功能模块硬件设计...................................................................................................3 3.6单片机控制模块的设计..........................................................................................3 3.7 控制电路设计..........................................................................................................4 3.8 直流电机驱动电路设计..........................................................................................5 第四章 系统软件设计............................................................................................................6 4.1 软件主要程序流程.........................................................................................................6 4.2 标准方式运行程序设计.................................................................................................6 4.3 经济方式运行程序设计.................................................................................................6 4.4 单独方式运行程序设计.................................................................................................6 4.6主程序设计.....................................................................................................................8 第五章 仿真与测试..................................................................................................................8 5.1 洗衣机仿真图.................................................................................................................9 5.1.1 标准方式仿真图......................................................................................................9 5.1.2 经济方式仿真图......................................................................................................10 5.1.3 单独方式仿真图......................................................................................................10 总结............................................................................................................................................12 参考文献....................................................................................................................................12 附录1 系统设计原理图...........................................................................................................13 附录2 原件明细表...................................................................................................................14 附录3 系统源程序...................................................................................................................15
摘要 对于一台全自动洗衣机而言,首先要求能完成洗衣的基本功能;同时还要根据用户的不同需求设置几种不同的洗衣程序;还要考虑水流的情况决定洗涤的强弱情况;另外还要对洗衣过程出现的故障进行诊断,保证高速运转。 本设计是以单片机AT89C51芯片作为核心原件,与直流电机、LED显示电路等构成洗衣机系统,利用单片机的电源电路、时钟电路、复位电路以及直流电机控制电路、按键电路等组成。具有实时显示洗衣机各种工作状态的特点,同时利用c语言编程,实现了洗衣机的自动化。本设计的主要功能有七项:四种洗衣工作程序(标准程序、经济程序、单独程序、排水程序);具有强、弱洗涤功能;脱水功能。
现今,高效,节能,环保的洗衣机在市场上一直占据了主导地位。近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统洗衣机的更新发展。单片机在日常生活中运用比较广泛,洗衣机智能控制系统就是以单片机控制为核心的智能控制系统,它把以往洗衣机繁琐的操作简单化, 不但其功能显著提高, 还增加了难以实现的功能, 同时也提高了控制精确度。 硬件与软件相结合实现了洗衣机智能化和自动化。 随着人们生活水平的不断提高, 单片机智能控制无疑是人们追求的目标之一, 它给人们所带来的方便也是不可估计的。 单片机技术也在各个领域应用越来越广泛,同时用单片机设计的各种家用电器也被人们所关注, 一时间涌现出大量各式各样的新型电器, 这些家用电器的原理到底是怎样的呢? 说到底也是单片机运用的范畴, 其中洗衣机就是一个典型的例子, 但人们对它的要求越来越高, 要为现代人生活提供更好的更方便的设施就需要从单片机技术入手, 一切向着数字化, 智能化控制方向发展。 目 前的洗衣机都没有实现全方面的兼容, 大多洗衣的厂家都注重各自品牌的洗衣机的特长, 突出一两个与别的洗衣机不同的个性化的功能。 洗衣机的各项功能是由单片机控制实现的,目前中国洗衣机市场正进入更新换代期, 市场潜力巨大, 人们对于洗衣机的要求也越来越高, 目前的洗衣机主要有强弱洗涤、 进排水系统故障自动诊断、 暂停等七大功能, 在许多方面还不能达到人们的需求。 这就要求设计者们有更高的专业和技术水平, 能够提出更好的建议和新的课题, 将人们的需要变成现实, 设计出更节能、 功能更全面、 更人性化的全自动洗衣机。 第 2 章 方案设计
采用单片机设计,以 AT89C51 单片机为核心元件, 由时钟电路、 复位电路、 电源电 CPU 控制模块 电机调速控制模块 显示模块 电源模块 复位模块 时钟模块 控制模块 秒脉冲发生器 60 进制计数器 洗涤时间计数器 控 制 门 功 放 继 电 开 关 执 行 电 机 时间译码 清零 置数、 显示电路、 按键电路和执行电机部分组成。 电机电路部分是利用l298驱动芯片输入不同的信号使电机产生正转和反转。 显示电路采用八个 LED 和八个电阻与单片机相连 , 利用 C 语言编程实现洗衣机自动化显示功能。 此方案设计的洗衣机、有进排水系统故障自动诊断、 暂停等功能。
第2页 第 3 章 系统硬件设计 硬件设计是整个系统的基础, 要考虑的方方面面很多, 除了实现洗衣机基本功能以外, 主要还要考虑如下几个因素: ①系统稳定度; ②器件的通用性或易选购性; ③ 软件编程的易实现性; ④系统其它功能及性能指标; 因此硬件设计至关重要。 现从各功能模块的实现逐个进行分析探讨。 3.1 总体设计及功能描述 本设计以单片机 AT89C51为控制核心, 采用模块化设计, 共分以下几个功能模块:单片机控制系统模块、 电源模块、 时钟模块、 复位模块、 按键控制模块、 直流电机控制模块和显示模块等。 洗衣机主要有进排水系统故障自动诊断、 暂停等功能。 3.2 各功能模块硬件设计 3.2. 1 单片机控制模块的设计 AT89C51单片机是一种高效微控制器, 也是低功耗高性能单片机。 单片机是本设计的核心主要起控制作用, 采用 40 引脚双列直插封装形式, 32 个外部双向输入/输 出(I/O)端口, 同时内含 2 个外中断口, 2 个 16 位可编程定时计数器, 2 个全双工串行通信口,因为受引脚数目 的限制, 所以有不少引脚具有第二功能。 外形及引脚排列如图 3-1 所示。 AT89C51单片机的主要管脚功能: VCC: 供电电压。 GND: 接地。 P0 口: P0 口为一个 8 位漏级开路双向 I/O 口, 每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时, 被定义为高阻输入。 P0 能够用于外部程序数据存储器, 它可以被定义为数据/地址的第八位。 P1 口: P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流。 P1 口管脚写入 1 后, 被内部上拉为高, 可用作输入, P1 口被外部下拉为低电平时, 将输出电流, 这是由于内部上拉的缘故。 P2 口: P2 口为一个内部上拉电阻的 8 位双向 I/O 口, P2 口缓冲器可接收, 输出 4个 TTL 门电流, 当 P2 口被写 1 时, 其管脚被内部上拉电阻拉高, 且作为输入。 并因此作为输入时, P2 口的管脚被外部拉低, 将输出电流。 P3 口: P3 口是 8 个带内部上拉电阻的双向 I/O 口, 可接收输出 4 个 TTL 门电流。当 P3 口写入 1 后, 它们被内部上拉为高电平, 并用作输入。 作为输入, 由于外部下拉为低电平, P3 口将输出电流(ILL) 这是由于上拉的缘故。 RST: 复位输入。 当振荡器复位器件时, 要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG: 当访问外部存储器时, 地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 编程期间, 此引脚用于输入编程脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号, 此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时目的。 PSEN : 外部程序存储器的选通信号。 在由外部程序存储器取指期间, 每个机器周期两次 PSEN 有效。 但在访问外部数据存储器时, 这两次有效的 PSEN 信号将不出现。 EA/VPP: 当 EA保持低电平时, 则在此期间外部程序存储器(0000H-FFFFH), 不 管是否有内部程序存储器。 注意加密方式 1 时, EA将内部锁定为 RESET; 当 EA端保持高电平时, 此间内部程序存储器。在 FLASH 编程期间, 此引脚也用于施加 12V 编程电源 (VPP)。 第3页 图 3-1 AT89C51 单片机的管脚图 电源、 时钟信号以及复位电路是单片机工作的基本条件, 缺一不可。 AT89C51 单片机系统的基本工作电路包括电源电路、 时钟电路、 复位电路。 其组成方框图如图 3-2 所示。
图 3-2 单片机控制系统基本硬件组成方框图 电源电路 电源电路模块为系统电路和其他模块提供+5V 电源。 供电电源可由开关电源提供。 时钟电路模块的设计 由于 AT89C51单片机芯片内有时钟振荡电路, 因此本系统单片机采用内部时钟方式,只要在单片机的 XTAL1和 XTAL2引脚外接石英晶体和微调电容, 就构成了自激振荡器并在单片机内部产生时钟脉冲信号, 具体电路设计如图 3-3 所示。 工作原理: 时钟信号通常用两种电路形式得到: 内部振荡和外部振荡。 在 XTAL1 和 XTAL2 引脚上外接定时元件, 就能构成自激振荡电路。 定时元件通常采用石英晶体和电容组成的并联谐振电路。一般电容 C4 和 C5 主要起频率微调作用, 电容值可选取为 30pF 左右或 40pF左右; 晶体振荡器, 简称晶振, 其晶振频率(fosc) 范围为 1. 2MHz~12MHz, 本设计中选择12MHz。 晶体振荡频率越高, 系统的时钟频率也越高, 单片机的运行速率就越快。 图 3-3 时钟振荡电路 复位电路模块设计 复位电路使单片机或系统中的其他部件处于某种确定的状态。 当在 MCS-51 系列单片的 RST 引脚处引入高电平并保持 2 个机器周期, 单片机内部就执行复位操作。 复位操作有两种基本形式: 一种是上电复位, 另一位是按键复位。 本设计采用按键复位方式。 如图 3-4 工作原理: 当按下按键时, RST 直接与 VCC 相连, 出现 2 个以上的高电平形成复位, 同时电解电容被短路放电; 按键松开时, 电容充电, 电流流过电阻, RST 为高电平, 仍然是复位,充电完成后, 电容相当于开路, RST 为低电平, 正常工作。 图 3-4 复位电路 - 2 控制电路设计 单片机设计中, 重要的一个模块是按键的设计。 常见的单片机按键设计分为独立式和行列式(矩阵式)。 独立式按键设计简单, 但占用 I/O 口较多; 行列式按键设计相对复杂, 占用 I/O 口较少。 如图 3-5 所示。
如图 3-5 图 3-5 控制电路 为方便使用, 设计了 三个独立式按键, 分别为程序选择键、水位/盖开关 、运行/暂停 。 1. 程序选择键: 用于选择洗衣方式, 由于本设计具有 3种洗衣工作程序, 即标准程序、 经济程序、 单独程序 所以设计程序选择按键。 运行/暂停选择键: 由于本设计要求不管洗衣机工作在什么状态, 当按下暂停键时, 洗衣机需暂停工作, 待启动键按下后洗衣机又能按原来所选择的工作方式继续工作,所以设计该按键。 水位/盖开关:用于检测进水和排水对水位的检测,以及当洗涤和脱水过程中如果打开了洗衣机盖进行报警。 3.3蜂鸣器报警电路设计 本设计中,当某个洗衣方案完全结束,会有蜂鸣器 5S 钟的报警时间。 蜂鸣器电路设计如图 3-3所示。 由单片机直接输出的信号不足以驱动蜂鸣器的工作。因此,在单片机与蜂鸣器之间加一个 PNP 三极管作为驱动。三极管的基极通过一个 4.7K 欧的电阻与单片机相应的 I/O 相连,电源和蜂鸣器与发射极极相连,集电极接地。这样就完成了蜂鸣器的驱动电路。 图 3-3 蜂鸣器驱动电路 3.4 桥式整流电路 电路如图 4-6 所示 桥式整流电路是使用最多的一种整流电路。半波整流电路是一种最简单的整流电路。它由电源变压器 B 、整流二极管 D 和负载电阻 Rfz 组成。变压器把市电电压(多为 220 伏)变换为所需要的交变电压 E2,D 再把交流电变换为脉动直流电。这种电路,只要两只二极管口连接成“桥”式结构,便具有全波整流电路的优点,而同时在一定程度上克服了它的缺点。 图 4-6 桥式整流电路 桥式整流电路的工作原理如下:E2 为正半周时,对 D1、D3 和方向电压,Dl,D3 导通; 对 D2、D4 加反向电压,D2、D4 截止。电路中构成 e2、Dl、Rfz 、D3 通电回路,在 Rfz ,上形成上正下负的半波整洗电压,E2 为负半周时,对 D2、D4 加正向电压,D2、D4 导通;对D1、D3 加反向电压,D1、D3 截止。电路中构成 E2、D2、Rfz 、D4 通电回路,同样在 Rfz 上形成上正下负的另外半波的整流电压。如此重复下去,结果在 Rfz ,上便得到全波整流电压。其波形图和全波整流波形图是一样的。从图 3-6 中还不难看出,桥式电路中每只二极管承受的反向电压等于变压器次级电压的最大值,比全波整洗电路小一半。这样就可将交流电整流成直流电。 图 4-6 桥式整流电路 2. 3 显示电路设计 在单片机应用系统中, 对于系统的运行状态和运行结果, 通常都需要直观显示出来。本设计采用的是8个共阳极发光二极管显示, 显示电路如图 3-6 所示。 显示电路油八个LED 和八个电阻构成。 八个电阻都分别为 100 欧姆, 在电路中, 电阻起限流保护作用, 防止 LED 被烧坏。 八个 LED 是共阳级, 当输入低电平时 LED 点亮, 当输入高电平时 LED 熄灭。
图 3-6 显示电路 2. 4 直流电机驱动电路设计 图 3-7 直流整机电路 图 3-7 所示为一个典型的直流电机控制电路。 直流电机的控制通过l298电机驱动芯片,它能同时控制两个电机。当IN1和IN2同时输入高电平或者低电平是电机停止不转,当IN1输入高电平IN2输入低电平时电机正转,IN1输入低电平IN2输入高电平时电机反转;同时ENA和ENB分别是使能端,能对电机1和电机进行PWM速度控制。
第 4 章 系统软件设计 软件在硬件平台上构筑, 完成各部分硬件的控制和协调。 系统功能是由软硬件共同实现的, 由于软件的可伸缩性, 最终实现的系统功能可强可弱, 差别可能很大。 软件采用模块化设计方法, 不仅易于编程和调试, 也可减小软件故障率和提高软件的可靠性。同时, 对软件进行全面测试也是检验错误排除故障的重要手段。 由于编程多涉及到数值运算, 比较复杂, 还有 LCD 灯的显示设计都是需要多重选择判断, 用我们平时常用的汇编语言编程是很难实现的, 这里我们选用了 移值性好、 结构清晰、 能进行复杂运算的 C语言来实现编程。 1 软件主要程序流程
图 4-1 主要程序流程图 整个系统的功能是由硬件电路配合软件来实现的, 当硬件基本定型的时候软件也基本定下了, 从软件的功能不同, 可以分为两的类: 一是监控软件(主程序) 它是整个软件的核心, 专门用来协调各个执行模块和操作者的联系。 二是执行软件(子程序) 它是用来完成各种实质性的工作的, 如测量、 计算、 显示、 通讯等。 每一个执行软件就是一个小的执行模块, 这里将每一个模块一一列出来, 并为每个执行模块进行功能定义和接口定义。 各执行模块规划好以后, 就可以规划监控软件了。 首先要根据系统的总体功能选择一种最合适的监控程序结构, 然后根据实时性的条件, 合理安排监控软件和执行软件之间的调度关系。 2 标准方式运行程序设计 标准方式函数 经济方式函数 单独方式函数 进水方式函数 排水方式函数 主程序函数 标准方式运行程序是我们最常用的洗衣程序, 标准程序流程 进水——洗涤——排水——进水——漂洗1——排水——进水——漂洗2——排水脱水。 3 经济方式运行程序设计 图 4-3 经济方式运行流程图 经济方式运行程序是我们现代洗衣机的一个特点, 经济程序流程为 进水——洗涤——排水——进水——漂洗1——排水脱水。 4 单独方式运行程序设计 由于洗衣机对不同的情况有不同的需要, 设计了单独运行程序。 单独程序是进水—洗涤—排水脱水 水满了以后直接进行洗涤。
第 5 章 仿真与调试 1 洗衣机仿真图 1 . 1 标准方式仿真图 开始进水 正在洗涤 正在漂洗 排水和脱水 图 5-1 标准方式仿真图
1 . 2 经济方式仿真图 开始进水 正在洗涤 正在漂洗 开始排水脱水 1 . 2 经济方式仿真图 1 . 3 单独方式仿真图
开始进水
正在洗涤
排水脱水 1 . 3 单独方式仿真图
总 结 主要是以 AT89C51单片机为核心的, 对洗衣机进行了简单的设计与阐述。 本次设计可以说是软硬结合, 又以硬件为主, 软件为辅。 当今科技发展迅速,单片机嵌入式开发有着光明的前景。 由于单片机具有经济实用、 开发简便等特点, 所以依然在工业控制、 家电等领域占据广泛的市场。 所以我选择这样的毕业设计课题, 并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。 在我完成这次毕业设计的过程中, 当看到自己将专业知识用于解决实际的问题时, 那份成就感和喜悦感是难以形容的。 但是, 在实际的编程以及调试程序过程中, 我发现自己应该学的东西太多太多。光靠自己在书本上所学过的这点知识是远远不够的, 真正地认识到了 工作就是学习的道理。 由于我以前对 52 单片机的 C 语言没有认真钻研过, 所以感觉毕业设计的任务十分紧迫。 通过对本系统的设计, 我学习到了硬件开发和软件开发的基本流程并有了一定的驾御此开发过程的能力。 编程的过程中, 虽然不乏辛苦, 但更多的是程序调试成功后的喜悦。 总之, 这次毕业设计对我来说是一次比较全面的、 富有创造性和探索性的锻炼, 完成了我选题时的心愿。 令我深有感触, 对于我今后的学习、 工作和生活都将是受益非浅的!
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define Enable(); EA=1;
- #define Disable(); EA=0;
- #define BIAOZHUN 0
- #define JINGJI 1
- #define DANDU 2
- #define PAISHUI 3
- #define QIANGXI 0
- #define RUOXI 1
- #define T_JinShui 240 //4min*60s
- #define T_PaiShui 60 //1min*60s
- #define T_XiDi 360 //6min*60s
- #define T_PiaoXi_1 240 //4min*60s
- #define T_PiaoXi_2 120 //2min*60s
- #define T_TuoShui 120 //2min*60s
- #define ZHENGZHUAN 0
- #define STOP 1
- #define FANZHUAN 2
- #define ZhengZhuan(); PIN_Motor_A = 0; PIN_Motor_B = 1;
- #define Stop(); PIN_Motor_A = 1; PIN_Motor_B = 1;
- #define FanZhuan(); PIN_Motor_A = 1; PIN_Motor_B = 0;
- /*******************暂停、继续控制宏定义*****************/
- #define ZanTing(); ET0 = 0; ET1 = 0; Stop();
- #define JiXu(); ET0 = 1; ET1 = 1;
- #define flag_Ok (flag_JinShui||flag_PaiShui||flag_XiDi||flag_PiaoXi||flag_TuoShui)
- /*************************管脚定义***********************/
- sbit LED_BiaoZhun = P1^0; //标准程序显示灯
- sbit LED_JingJi = P1^1; //经济程序显示灯
- sbit LED_DanDu = P1^2; //单独程序显示灯
- sbit LED_PaiShui = P1^3; //排水程序显示灯
- sbit LED_XiDi = P1^6; //洗涤状态灯
- sbit LED_PiaoXi = P1^7; //漂洗状态灯
- sbit LED_TuoShui = P2^0; //脱水状态灯
- sbit PIN_BaoJing = P2^1; //报警喇叭
- sbit PIN_JinShui = P2^2; //进水控制
- sbit PIN_PaiShui = P2^3; //排水控制
- sbit PIN_Motor_A = P2^4; //电机脚A
- sbit PIN_Motor_B = P2^5; //电机脚B
- sbit K_SEL_ChengXu = P3^0; //选择程序键
- sbit p32 = P3^2;
- sbit p33 = P3^3;
- sbit SW_ShuiWei = P3^6; //水位开关
- sbit SW_AnQuan = P3^7; //安全开关
- void Programme_PaiShui(void);
- /*************************数据定义***********************/
- uchar flag_SEL_ChengXu; //默认为标准程序,
- bit flag_Run; //运行标志,1为运行
- bit flag_JinShui; //进水标志,1为进水
- bit flag_PaiShui; //排水标志,1为排水
- bit flag_XiDi; //置洗涤标志
- bit flag_PiaoXi; //置漂洗标志
- bit flag_TuoShui; //脱水标志
- bit flag_BaoJing; //报警标志
- uchar _50ms; //每50ms加一次的变量
- uint s; //秒
- uint T_S; //定时总时间
- uchar T_Motor; //电机控制时间
- /*************************延时程序*********************/
- void Delay_10ms(uint T1)
- { uint t1,t2;
- for(t1=0;t1<T1;t1++)
- for(t2=0;t2<1250;t2++);//10ms
- }
- /**********************管脚初始化程序******************/
- void Pin_Init(void)
- { LED_BiaoZhun = 0;
- LED_JingJi = 1;
- LED_DanDu = 1;
- LED_PaiShui = 1;
- LED_XiDi = 1;
- LED_PiaoXi = 1;
- LED_TuoShui = 1;
- PIN_BaoJing = 1;
- PIN_JinShui = 1;
- PIN_PaiShui = 1;
- PIN_Motor_A = 1;
- PIN_Motor_B = 1;
- }
- /********************中断初始化程序********************/
- void ExInt_Init(void)
- { IT0 = 1;
- EX0 = 1;
- IT1 = 1;
- EX1 = 1;
- }
- /*******************定时器0初始化程序******************/
- void Timer0_Init(void)
- { TMOD = TMOD | 0X01; //定时方式1
- TH0 = 0X3C; //50ms
- TL0 = 0XB0;
- TR0 = 1;
- _50ms = 0;
- s = 0;
- }
- /*******************定时器1初始化程序******************/
- void Timer1_Init(void)
- { TMOD = TMOD | 0X10; //定时方式1
- TH1 = 0X3C; //50ms
- TL1 = 0XB0;
- }
- /********************电机初始化程序********************/
- void T_Motor_Ctl(uchar t1,uchar t2,uchar t3)
- { if(1)
- T_Motor = t1;
- if(0)
- T_Motor = t2;
- if(flag_TuoShui)
- T_Motor = t3;
- }
- /********************电机初始化程序********************/
- void Motor_Init(void)
- { ZhengZhuan();
- T_Motor_Ctl(4,3,5);
- }
- /**********************解除报警************************/
- void No_BaoJing(void)
- { flag_BaoJing= 0; //置报警标志
- PIN_BaoJing = 1; //报警喇叭
- TR1 = 0;
- }
- /*******外部中断0程序为运行、解除报警或者暂停***********/
- void int0(void) interrupt 0
- {
- if(!p32)
- { Delay_10ms(1); //延时10ms左右,去抖动
- if(!p32)
- { if(!flag_Run)
- flag_Run = 1; //置运行标志
- else if(flag_BaoJing)
- No_BaoJing(); //解除报警
- else if(flag_Ok)
- { static bit flag_ZanTing;
- flag_ZanTing = ~flag_ZanTing;
- if(flag_ZanTing)
- {ZanTing();}
- else
- {JiXu();}
- }
- }
- }
- }
- /**********************报警程序************************/
- void BaoJing(void)
- { flag_BaoJing= 1; //置报警标志
- TR0 = 0;
- TR1 = 1;
- }
- /*******************时间到处理程序*********************/
- void Ok_Timer(void)
- { s = 0;
- if(flag_JinShui || flag_PaiShui) //进水中~、排水中~
- { BaoJing(); //报警程序
- }
- else
- { flag_XiDi = 0; //清洗涤标志
- flag_PiaoXi = 0; //清漂洗标志
- flag_TuoShui= 0; //清脱水标志
- Stop();
- }
- }
- /********************电机控制程序**********************/
- void Motor(void)
- { static uchar s_Motor;
- s_Motor++;
- if(s_Motor==T_Motor)
- { static uchar Motors;
- s_Motor = 0;
- Motors++;
- if(Motors==3)
- Motors = 0;
- switch(Motors)
- { case ZHENGZHUAN : ZhengZhuan();
- T_Motor_Ctl(4,3,5);
- break;
- case STOP : Stop();
- T_Motor_Ctl(1,2,2);
- break;
- case FANZHUAN : FanZhuan();
- T_Motor_Ctl(4,3,5);
- break;
- default : break;
- }
- }
- }
- /*******************定时器0中断程序********************/
- void Timer0(void) interrupt 1
- {
- TR0 = 0; //停止计数
- TH0 = 0X3C; //重装定时器值
- TL0 = 0XB0;
- TR0 = 1;
- _50ms++;
- if(_50ms == 20) //1s到
- { _50ms = 0;
- s++;
- if(s == T_S)
- Ok_Timer();
- if(flag_XiDi || flag_PiaoXi || flag_TuoShui)
- Motor(); //电机控制程序
- }
- }
- /**********外部中断1程序为水位到或者盖开处理***********/
- void int1(void) interrupt 2
- { if(!p33)
- { Delay_10ms(1); //延时10ms左右,去抖动
- if(!p33)
- {
- }
- }
- }
- /************定时器1中断程序作为闪烁及报警**************/
- void Timer1(void) interrupt 3
- { static uchar _50ms; //每50ms加一次的变量
- TR1 = 0; //停止计数
- TH1 = 0X3C; //重装定时器值
- TL1 = 0XB0;
- TR1 = 1;
- _50ms++;
- if(_50ms == 14)
- { _50ms = 0;
- if(flag_XiDi) //洗涤中~
- LED_XiDi = ~LED_XiDi; //洗涤状态灯闪烁
- if(flag_PiaoXi) //漂洗中~
- LED_PiaoXi = ~LED_PiaoXi; //漂洗状态灯闪烁
- if(flag_TuoShui) //脱水中~
- LED_TuoShui = ~LED_TuoShui; //脱水状态灯闪烁
- if(flag_BaoJing)
- PIN_BaoJing = ~PIN_BaoJing; //报警
- }
- }
- /**********************程序选择程序********************/
- void SEL_ChengXU(void)
- { if(!K_SEL_ChengXu)
- { Delay_10ms(1); //延时10ms左右,去抖动
- if(!K_SEL_ChengXu)
- { while(!K_SEL_ChengXu);
- flag_SEL_ChengXu++;
- if(flag_SEL_ChengXu==4)
- flag_SEL_ChengXu = 0;
- switch(flag_SEL_ChengXu)
- { case BIAOZHUN : LED_BiaoZhun= 0; //亮
- LED_JingJi = 1; //灭
- LED_DanDu = 1; //灭
- LED_PaiShui = 1; //灭
- break;
- case JINGJI : LED_BiaoZhun= 1;
- LED_JingJi = 0;
- LED_DanDu = 1;
- LED_PaiShui = 1;
- break;
- case DANDU : LED_BiaoZhun= 1;
- LED_JingJi = 1;
- LED_DanDu = 0;
- LED_PaiShui = 1;
- break;
- default : break;
- }
- }
- }
- }
- /**********************进水程序***********************/
- void JinShui(void)
- { PIN_JinShui = 0;
- flag_JinShui = 1;
- TR1 = 0;
- Timer0_Init();
- T_S = T_JinShui;
- while(SW_ShuiWei);
- PIN_JinShui = 1;
- flag_JinShui = 0;
- TR0 = 0;
- TF0 = 0;
- }
- /**********************排水程序***********************/
- void PaiShui(void)
- { PIN_PaiShui = 0;
- flag_PaiShui = 1;
- TR1 = 0;
- Timer0_Init();
- T_S = T_PaiShui;
- while(!SW_ShuiWei);
- TR0 = 0;
- TF0 = 0;
- Delay_10ms(500);//延时50s
- PIN_PaiShui = 1;
- flag_PaiShui = 0;
- }
- /**********************洗涤程序***********************/
- void XiDi(void)
- { flag_XiDi = 1;
- TR1 = 1;
- Timer0_Init();
- T_S = T_XiDi;
- Motor_Init();
- while(flag_XiDi);
- TR1 = 0;
- LED_XiDi = 1;
- }
- /**********************漂洗程序***********************/
- void PiaoXi(uchar t)
- { flag_PiaoXi = 1;
- TR1 = 1;
- Timer0_Init();
- T_S = t;
- Motor_Init();
- while(flag_PiaoXi);
- }
- /*********************盖开保护程序********************/
- void BaoHu_GaiKai(void)
- { if(SW_AnQuan)
- { ZanTing();
- LED_TuoShui = 1;
- }//end if
- else
- { JiXu();
- }
- }
- /***********************脱水程序**********************/
- void TuoShui(void)
- { flag_TuoShui = 1;
- PIN_PaiShui = 0;
- TR1 = 1;
- Timer1_Init();
- T_S = T_TuoShui;
- Motor_Init();
- while(flag_TuoShui)
- { BaoHu_GaiKai();
- }
- TR1 = 0;
- LED_TuoShui = 1;
- }
-
- /********************标准洗衣程序*********************/
- void Programme_BiaoZhun(void)
- { LED_XiDi = 0; //洗涤状态灯
- LED_PiaoXi = 0; //漂洗状态灯
- LED_TuoShui = 0; //脱水状态灯
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s//4*60
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_2);//2min*60s//2*60
- Programme_PaiShui();
- }
- /********************经济洗衣程序*********************/
- void Programme_JingJi(void)
- { TR1 = 0;
- LED_XiDi = 0; //洗涤状态灯
- LED_PiaoXi = 0; //漂洗状态灯
- LED_TuoShui = 0; //脱水状态灯
- JinShui();
- XiDi();
- PaiShui();
- JinShui();
- PiaoXi(T_PiaoXi_1);//4min*60s
- Programme_PaiShui();
- }
- /********************单独洗衣程序*********************/
- void Programme_DanDu(void)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整的Word格式文档51黑下载地址:
洗衣机控制系统课程设计.docx
(264.49 KB, 下载次数: 77)
|