芜湖职业技术学院 毕 业 论 文
题 目:基于单片机的智能洗衣机控制系统设计
院系名称: 芜湖职业技术学院信息工程系 专业班级: 嵌入式技术与应用 学生姓名: XXXX 学 号: XXX 指导教师: XXXX
2012 年 5 月 6 日
1
摘要
本设计是利用89C51单片机微处理器来实现对智能洗衣机的控制,
利用主程序选择按钮、启动按键和增减按键作为输入参数,通过Keil软件编程来控制电机旋转、LED数码管显示等主要动作。在实现具体的洗衣程序时通过洗涤和脱水子程序代码来完成整个过程的控制。本设计可以实现洗衣代码选择显示、洗衣倒计时显示、进水指示、排水指示、电机旋转等主要显示过程。
关键词 89C51单片机 智能洗衣机 电机旋转
2
目 录
第一章 绪论 ............................................... 5
1.1 研究目的 ............................................ 5 1.2研究意义 ............................................ 6 1.3研究价值与应用 ...................................... 6 第二章 系统总体设计 ....................................... 8
2.1功能需求分析 ........................................ 8 2.2硬件设计方案 ........................................ 8 2.3软件设计方案 ........................................ 9 第三章 硬件电路设计 ...................................... 11
3.1 基于AT89C51单片机控制的智能洗衣机原理 ............. 11 3.2 原理图的说明 ....................................... 11
3.2.1.主芯片电路 ................................... 11 3.2.2.LED数码管显示电路 ............................ 12 3.2.3.按键电路部分 ................................. 12 3.2.4蜂鸣电路和电机控制电路 ........................ 13 3.2.5指示灯电路 .................................... 14
第四章 系统软件设计 ...................................... 15
4.1 Keil c51集成开发环境 .............................. 15 4.2 仿真软件Proteus介绍 ............................... 19 4.3 Keil与Proteus的在线联合仿真 ...................... 20 4.4 主程序设计及各子程序模块 ........................... 20
4.4.1.主程序 ....................................... 20 4.4.2. INT0中断模块 ................................ 22 4.4.3. 进入待机状态 ................................ 22 4.4.4. 设置洗涤次数模块 ............................ 23 4.4.5 设置洗涤时间模块 ............................. 23 4.4.6.设置脱水时间模块 ............................. 24 4.4.7. 开始脱水模块 ................................ 25 4.4.8. 开始洗涤模块 ................................ 25
第五章 系统调试 ......................................... 27
5.1硬件调试 ........................................... 27 5.2 程序加载 ........................................... 28 5.3系统调试结果 ....................................... 28
3
结论 ..................................................... 30 致 谢 .................................................... 31 参考文献 ................................................. 32 附录: ................................................... 33
4
第一章 绪论
随着国民经济的发展,人民的生活水平不断提高,智能洗衣机作为人们从繁复的家务劳动中解放出来的好助手,越来越受到消费者的喜爱。通过对于基于单片机控制的智能洗衣机的研究我们可以更清晰,更实际的掌握单片机的一些基本的控制和应用。单片机在日常家电中的应用比较广泛,洗衣机智能控制系统就是一种以单片机为控制核心的系统,它把以往对洗衣机的繁琐的操作变得简单化,不但其机器性能显著提高,还增加了难以实现得功能,同时也提高了控制的精确度,硬件和软件相互配合实现洗衣机工作的智能化和自动化。因此对于智能洗衣机的研究一方面可以让我们对于所学的单片机和电路有关知识有个更好的理解和巩固,一方面也锻炼了自身的动手能力,特别是能够实现软硬连调所具备的能力。
1.1 研究目的
本文设计并实现了一种基于单片机的智能洗衣机控制系统。该设计方案电路简单、可靠性强、价格便宜。系统主要包括单片机控制电路、稳压电源电路、LED数码管显示电路、按键电路、蜂鸣电路和电机控制电路等。
(1).培养学生运用所学的单片机方面的知识的能力,熟练应用AT89C51单片机,更进一步的理解单片机精华;
(2).让单片机方面的知识能够在日常生活中得以更广泛的实践和运用;
5
(3).让自己的理论在实践中得到体验,巩固和加强之前所学的知识,
使之前模糊的和不明白的地方得到更深刻的理解。
1.2研究意义
以单片机AT89C51为核心,数码管显示实现电动机的自动控制,减少手动控制,并且由于该系统的设计在应用中可以提高工作强度,可以让人们放心使用, 提高产品的安全性。由于其功能简单,设备要求性能不高,可移植性比较强,此外,洗衣机的各项功能都是由单片机控制实现的,单片机体积小,控制功能灵活,因此,设计出基于单片机的洗衣机智能控制系统具有很强的实用性,可以广泛使用。
1.3研究价值与应用
基于单片机的洗衣机智能控制系统具有精度高、功能强。经济性好
的特点。无论在提高产品数量,节约能源还是改善劳动条件等方面都显示出无比的优越性。对基于单片机的洗衣机智能洗衣机控制系统设计进行深入研究是我们掌握智能洗衣机这种重要家电的工作原理和控制系统,进一步了解单片机在不同领域的应用方法,学会单片机的洗衣机智能控制系统设计,同时也会为我们将来从事电子行业或在生活中得以运用打下一定基础,此外,将人们的需要变成现实,设计出更节能、功能更全面、更人性化的智能洗衣机,使人们的生活更方便、舒适。
智能洗衣机从结构上分有波轮式,搅拌式,滚筒式,目前,国内市场上销售的大都是波轮式和滚筒式。智能洗衣机是集洗涤,脱水于一体,并且能自动完成洗衣全过程的洗衣机,真正做到了它工作,您休息。智能洗衣机有各种洗涤程序,可供用户自由选择,工作时间可
6
任意调节,工作状态及洗,脱时间在面板上都有显示,能自动处理脱水不平衡(具有各种故障和高低电压自动保护功能),工作结束或电源故障会自动断电,无需看管,确保安全。
波轮式智能洗衣机的特点是洗净率高,但对衣服的磨损很大,随着人们生活水平的不断提高,丝绸,毛料等大步走进普通家庭,厂商又适时地推出了滚筒洗衣机,它最大的优点是磨损率小,但洗净率比波轮式低。如今,消费者已不满足于半自动洗衣机的洗涤方式,而改用智能洗衣机。
7
第二章 系统总体设计
2.1功能需求分析
能够实现基本功能,执行相应的按键操作,通过某个按键控制数码管显示相应的时间或次数,通过指示灯提示洗衣机进行到某个流程,蜂鸣器起提示和报警作用。具体实现功能如下:
1. 具备数码管显示功能,并且能够实现信息的显示 2. 能够对洗涤时间和次数显示
3. 能够实现洗衣代码选择显示、洗衣倒计时显示、进水指示、排水指示、电机旋转等主要显示过程功能。 4. 具备复位功能
2.2硬件设计方案
整个硬件系统主要包括如下几个部分:主控模块、按键控制模块、数码管显示模块、指示灯显示模块、电机控制和蜂鸣器模块。如图:
按键控制 按键控 制模块 数码管 显示模块 指示灯 显示模块
8
At89c51 为主控芯片 电机控制和蜂鸣器模块
采用AT89C51单片机作为主控单元,对整个系统进行控制, 按键控制模块起到开启,选择次数和时间,关闭整个系统作用; 数码管显示模块起到显示系统的功能; 指示灯模块起到显示系统的工作状态; 电机控制和蜂鸣器起到洗衣和报警作用;
通过按键作为系统的输入,当按下开关按钮时,其对应的指示灯亮,选择适当的时间和次数,电动机工作,数码显示其对应的工作状态和时间或次数。
2.3软件设计方案
单片机C51语言兼备高级语言与低级语言的优点。 语法结构和标准C语言基本一致,语言简洁,便于学习。 运行于单片机平台,支持的微处理器种类繁多,可移植性好。对于兼容的8051系列单片机,只要将一个硬件型号下的程序稍加修改,甚至不加改变,就可移植到另一个不同型号的单片机中运行。
具有高级语言的特点,尽量减少底层硬件寄存器的操作。 单片机C51语言提供了完备的数据类型、运算符及函数。 C51语言是一种结构化程序设计语言,可以使用一对花括号“{}”将一系列语句组合成一个复合语句,程序结构清晰明了。
C51语言代码执行的效率方面十分接近汇编语言,且比汇编语言的程序易于理解,便于代码共享。
在本设计中,鉴于C51 语言的优势,本文的软件部分设计采用单片机C51语言编写程序。我们用Keil c51软件对设计中的程序进行调
9
试。用Protel软件对原理图进行绘制,用Proteus和Keil c51共同完成本设计的仿真。
10
第三章 硬件电路设计
3.1 基于AT89C51单片机控制的智能洗衣机原理
控制板电路使用AT89C51芯片,时钟电路采用6MH晶振。输入信号有:设置洗涤次数,洗衣时间和脱水时间。输出信号包括:一个8位LED数码管动态显示(洗衣或脱水剩余时间)和蜂鸣器鸣叫、进排水、电机旋转信号。其中+5V电压由线性稳压电源得到。
3.2 原理图的说明
3.2.1.主芯片电路
主芯片电路如图3-1所示,控制电路采用AT89C51芯片,时钟电路采用6HZ晶振,主芯片左边部分电路即为晶振和复位电路。作为控制中心的单片机,在进入工作之前应预先清零复位,给单片机初始化,以清除由于某种原因引起内部程序紊乱的状态。在系统控制电路中,复位电路是靠电容充放电完成的。
图 3-1主芯片及晶振和复位电路
11
3.2.2.LED数码管显示电路 如图3-2所示,输出口P1.0-P1.7控制8位LED数码管显示电路。它可用来显示时间(即洗衣时间、脱水时间、洗衣剩余时间和脱水剩余时间);显示主程序控制过程(即洗涤时间设置、洗涤次数设置、脱水时间设置等)。 3031PSENALEEAP2.3/A1P2.4/A1P2.5/A1P2.6/A1P2.7/A1P3.0/RXP3.1/TXP3.2/INTP3.3/INTP3.4/TP3.5/TP3.6/WP3.7/R12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 图3-2LED数码管显示电路
3.2.3.按键电路部分
按键主控开关,如图3-3所示,为主程序控制选择键,当洗衣机接通电源后,处于待机状态(SET=0),数码管显示A,按下按键主控开关(SET=1),LED数码管显示为b,按下加时间或次数或减时间或次数设置洗涤次数;再按下主控开关(SET=2),LED数码管显示为C,
12
设置洗涤时间;再次按下主控开关(SET=3),LED数码管显示为d,设置脱水时间;最后按下主控开关(SET=4),LED数码管显示为F,表示等待洗涤。此时按下按键S1,洗衣机开始工作。若只进行脱水工作,再按下主控开关(SET=5),进入脱水流程。洗衣机工作结束后,再按下启动开关,进入待机状态。
加时间或次数减时间或次数主控开关启动开关 图3-3控制电路中的按键 3.2.4蜂鸣电路和电机控制电路 蜂鸣器在洗衣机中起提示和报警作用。
P2.7口输出电机控制信号,由继电器触发电路完成电机的驱动。另外电机电源接220V交流电。如图3-4所示:
RL1G2RL-1A-CF-DC12BUZ1BUZZER 图3-4蜂鸣电路和电机控制电路
13
3.2.5指示灯电路
指示灯电路在洗衣全过程中起提示洗衣机进行到某个流程的作用。
开始洗衣指示LED-RED待机状态指示LED-RED洗衣次数指示LED-RED洗衣时间指示LED-RED脱水时间指示LED-RED 进水指示LED-RED出水指示LED-RED 图3-5指示灯电路
14
第四章 系统软件设计
在本设计中,我们用Keil c51软件对设计中的程序进行调试。用Protel软件对原理图进行绘制,用Proteus和Keil c51共同完成本设计的仿真。
4.1 Keil c51集成开发环境
随着单片机的不断发展,以C为主流的单片机高级语言也不断被更多的单片机爱好者和工程师所喜爱。使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM,汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
Keil的使用方法如下:
(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图4-1。接着弹出一个标准Windows文件对话窗口,如图4-2,在“文件名”中输入您的第一个C 程序项目名称,这里我们用“test”。“保存”后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后可以直接点击此文件以打开先前做的项目。
图4-1 Project 菜单
15
图4-2 New Project 菜单
(2)首先在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程序,那么就要新建一个程序文件。这里采用Hello World!\\串行通讯程序。
图4-3 选取芯片
图4-4 新建程序文件
16
(3)点击图4-3中的3保存新建的程序,也可以用菜单File-Save或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图4-4的文件操作窗口,把第一个程序命名为test1.c,保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图4-5鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。选“Add File to Group ‘Source Group 1’”弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。
图4-5 把文件加入到项目文件组中
(4)C程序文件已被加到了项目中了,下面就剩下编译运行了。这个项目只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件。先看图4-6,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译链接当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的
17
它们。在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启\\关闭调试模式的按钮,它也存在于菜单Debug-Start\\Stop Debug Session,快捷键为Ctrl+F5。
图4-6 编译程序
(5)进入调试模式,软件窗口样式大致如图4-7所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4可以打开5中的串行调试窗口,这个窗口可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有。首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“HelloWorld!”。最后要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\\关闭调试模式按钮。然后就可以进行关闭KEIL 等相关操作了。
18
图4-7 调试模式窗口
4.2 仿真软件Proteus介绍
在学习、开发单片机系统时,常常需要硬件仿真设备,用于加快学习和开发的进度,但此设备对单片机数量、种类和固定外围电路有所限制,并且价格较贵。而联合运用仿真软件Proteus和单片机开发软件环境Keil uVision构建单片机虚拟实验室,在没有硬件实物的环境下虚拟建立了一个硬件仿真平台,大大扩充实验灵活性,为单片机的学习、开发提供了一种十分方便有效的平台。
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者,从事单片机教学的教师,致力于单片机开发应用的科技工作者的青睐。Proteus可提供的仿真元器件资源:仿真数字和模拟,交流和直流等数千种元器件,有30多个元件库。Proteus可提供的仿真仪表资源:示波器,逻辑分析仪,虚拟终端,SPI调试器,I2C调试器,信号发生器,模式发生器,交直流电压表,交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。
19
除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗,极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。
4.3 Keil与Proteus的在线联合仿真
Keil与Proteus在各自的环境下都可以进行一定程度仿真调试。然而,Keil只能对程序进行调试,不能看到硬件的运行结果,因此并不直观;而Proteus软件在对单片机系统进行仿真调试的时候只能对硬件做出改动,不能直观的了解程序运行的情况,难以对程序中存在的不足和错误进行修改。如果能把这两者结合起来,同时观察程序的运行情况和当时硬件系统所处的状态,则可以方便地找出系统设计中存在的软、硬件错误。根据Proteus软件的官方文档,在单片机仿真模型中包含了专门的代码,可以联合Keil uVision集成开发环境,提供源代码级的仿真调试,即在Keil中调试、运行程序,而将硬件输入输出结果显示在Proteus中,两者可以进行无缝联合仿真。
4.4 主程序设计及各子程序模块
4.4.1.主程序
主程序的工作过程为:先进行初始化工作,随后根据输入的键值分
别散转至对应的子程序(待机、设置洗涤次数、设置洗涤时间、设置脱水时间、等待洗涤、等待脱水)。洗衣机开始工作。INT0外中断服务子函数用于实现功能选择。主程序流程图如图4-8所示:
20
开始初始化默认洗涤根据SET键值散转待机设置洗涤次数设置洗涤时间设置脱水时间等待洗涤等待脱水
图4-8 主程序流程图
主程序如下: #include \"at89x51.h\"
#define char unsigned char #define int unsigned int
char code DATA_7SEG[10]={0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F,}; /*段码*/
char set=0; int m=1;
/*功能键值*/
/*全局变量,洗涤次数*/
int t1=8; /*洗涤时间*/ int t2=3; /*脱水时间*/ main() { EA=1;EX0=1; while(1)
/*无限循环*/ /*根据Set标志散转*/ /*待机*/
/*设置洗衣次数*/
21
{switch(set)
{case 0:stop();break;
case 1:times();break;
case 2:run_time();break; /*设置洗衣时间*/ case 3:last_time();break; /*设置脱水时间*/ case 4:begin_x();break; default:break; } } }
上述主程序调用的子程序见附录1。 4.4.2. INT0中断模块
按一下SET键,给INT0一个外部中断,当SET值大于5时,值重新置0。中断子函数见附录1。
中断子程序流程图如下所示:
INT0外中断服务子函数开始 /*开始洗衣*/
case 5:begin_t();break /*开始脱水*/
如果SET键按下,则SET键值加1如键值大于等于6,则键值返回0系统进入低功耗待机状态INT0外中断服务子函数结束 图4-9 INT0外部中断子程序流程图
4.4.3. 进入待机状态
当SET键值为0时,进入待机状态。
22
void stop()
{ P0_1=1; /*D2点亮*/ P1=0x77; /*数码管显示A */ delay(1);
/*进入节电待机状态*/ delay(1); }
4.4.4. 设置洗涤次数模块
当SET键值为1时,设置洗涤次数子程序,如果使用者不设置则默认为1次(开始定义变量m=1)。
void times() { P0=0xff;
P0_2=0; /*D3点亮*/ */
while(1)
{if(P2_1==0){delay(10);/*按下UP键数码管作0-9递增显示*/ 0);}}
if(P2_2==0){delay(10); ;}}
if(set!=1)break; }
4.4.5 设置洗涤时间模块
当SET键值为2时,设置洗涤时间子程序,如果使用者不设置则默认为8(开始定义变量t1=8)。
23
P1=0x7c; /*数码管显示b,设置洗衣次数
if(P2_1==0){m++;if(m==6)m=10;P1=DATA_7SEG[m];delay(30
if(P2_2==0){m--;if(m<0)m=9;P1=DATA_7SEG[m];delay(300)
}
void run_time() { P0=0xff;
P0_3=0; /*D4点亮*/
P1=0x39; /*数码管显示C*/ while(1)
{if(P2_1==0){delay(10); /*按下UP键数码管作0-9递增显示*/
}}
if(P2_2==0){delay(10);
if(P2_2==0){t1--;if(t1<0)t1=9;P1=DATA_7SEG[t1];delay(300);}}
if(set!=2)break; }
4.4.6.设置脱水时间模块
当SET键值为3时,设置脱水时间子程序,如果使用者不设置则默认为3(开始定义变量t2=3)。
void last_time() { P0=0xff;
P0_4=0; /*D5点亮*/
P1=0x5e; /*数码管显示d*/ while(1)
{ if(P2_1==0){delay(10); /*按下UP键数码管作0-9递增显示*/
} …… }
if(P2_1==0){t1++;if(t1==10)t1=0;P1=DATA_7SEG[t1];delay(300);
24
4.4.7. 开始脱水模块
当SET键为5时, D6点亮,数码管显示E,电机转动开始脱水,脱水时间倒计时,若不为0,指示灯灭,电机停转,脱水后洗衣结束,蜂鸣器提醒。反之为0,则重新待机,进入循环,电机转动,开始脱水。脱水子程序流程图如下:
脱水子程序开始D6点亮,数码管显示E电机转动,开始脱水脱水时间倒计时P2.7=0?NY指示灯灭,电机停转蜂鸣器提醒返回
图4-10开始脱水子程序流程图
4.4.8. 开始洗涤模块
当SET键为4时,开始洗衣。按下S1键,开始进水,若P0.6不为1,停止进水,电机转动,开始洗涤,进入洗衣倒计时,反之则重新回到开始进水状态。当洗衣倒计时结束,此时若P2.7不为0,则电机停转,开始出水,反之则进入洗涤状态。洗涤次数和洗涤时间、脱水时间可以设置也可以使用默认值。洗涤子程序流程图如下:
25
洗涤子程序开始D1点亮,数码管显示F按下S1键(洗涤开始键)开始进水P0.6=1?Y 停止进水N电机转动,开始洗涤洗衣时间倒计时P2.7=0?N电机停转Y开始出水P0.7=1?Y停止出水N电机转动,开始脱水脱水时间倒计时P2.7=0?N电机停转Ym=0?YN
图4-11 开始洗涤子程序流程图
26
脱水子程序
第五章 系统调试
5.1硬件调试
单片机应用系统的硬件和软件调试是交叉进行的,但通常是先排除样机中明显的硬件故障,尤其是电源故障,然后才能安全地和仿真机相连,进行综合调试。
在没有烧写程序的情况下,对电路中每个结点连接是否完好以及元器件的连接进行检测。如果完好,则进行各单元电路的检测。系统整体硬件电路如下图5-1所示:
D1LED-REDD2LED-REDC11nFD3LED-REDX1CRYSTALC21nFD4LED-REDU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617D5LED-REDD6R810k18XTAL2C391uF293031RSTS1S2S3LED-REDRL1G2RL-1A-CF-DC1PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51S0BUZ1BUZZERD7LED-REDD8LED-RED 图5-1
27
5.2 程序加载
双击AT89C51单片机,打开如图5-2所示的对话框:
图5-2程序加载对话框
单击Program File后面的文件夹浏览按钮,弹出Select file name对话框,选择目标文件.hex,点击打开按钮即可加载成功。
5.3系统调试结果
(1)如图5-3所示,为洗衣机的洗涤过程,LED数码显示为洗涤剩余时间。
图5-3洗衣机的洗涤过程仿真
28
(2)如图5-4所示,LED数码显示为洗衣机的脱水过程,D7灯亮表示洗衣机排水过程。
图5-4洗衣机的脱水过程仿真
(3)如图5-5所示,为洗衣机洗涤结束,蜂鸣器发声结束后的仿真过程。
图5-5 洗衣机洗涤过程结束显示
29
结论
在本次设计中利用AT89C51单片机作为主控芯片,P1口为输入端口,P2,P0口为输出端口,通过调用洗涤、脱水代码子程序来完成全部的正常控制过程。智能洗衣机实现了从进水到脱水的全部洗衣过程,极大地增强了洗衣机的功能。如若在本系统中加入模糊控制,可以判断衣物的质量,衣物是否被洗干净等等情况,将能更大程度的提高洗衣机的智能化。取得以下几点成果:
1. 对Proteus仿真软件有一定的了解,能熟练掌握仿真软件的使用。 2. 对单片机有了深入的了解,对今后的学习有更多的帮助。 3. 在实际项目中,如何选择用例、确定对象等做了一次尝试和分析。 4. 完成了智能洗衣机的控制系统,符合用户的需求。
通过这次的毕业论文设计使我学习了很多以前不知道的东西,也对单片机这门课有了进一步的了解。但是由于时间的仓促以及对单片机学习的不是很好,很多功能还没有完善,希望在以后的时间里多看一些有关单片机方面的书籍,以弥补很多不知道的知识。
30
致 谢
走的最快的总是时间,来不及感叹,大学生活已近尾声,三年多的努力与付出,随着本次设计和论文的完成,将要划下完美的句号。 从课题选择到具体的写作过程,无不凝聚着老师的心血和汗水。老师要指导很多同学的设计和论文,加上本来就有的教学任务和科研项目,工作量之大可想而知,他还在百忙之中抽出大量的时间来指导我们。他循循善诱的教导和不拘一格的思路给予我无尽的启迪,他渊博的专业知识,精益求精的工作作风,严以律己、宽以待人的崇高风范,将一直是我工作、学习中的榜样。在我的毕业设计和论文写作期间,老师为我提供了种种专业知识上的指导和一些富于创造性的建议,没有这样的帮助和关怀,我不会这么顺利的完成毕业设计和论文。在此仅向杨会伟老师表示衷心的感谢和崇高的敬意。
同时,设计和论文的顺利完成,离不开其他各位老师、同学和朋友的关心和帮助。在整个的设计和论文写作中,各位老师、同学和朋友积极的帮助我查资料和提供有利于论文写作的建议和意见,在他们的帮助下,设计和论文得以不断的完善,最终帮助我完美的完成了设计和论文。
最后,也是最重要的,我要感谢我的父母,因为没有他们,就没有现在站在这里的我,是他们给予我生命,给予我上大学的机会,是他们创就今天的我。对于你们,我充满无限的感激。 谢谢大家!
31
参考文献
[1] 闫玉德 俞虹,MCS-51单片机原理与应用,机械工业出版社 [2] 周鸣争 钱峰,微机原理与接口技术,电子科技大学出版社, [3] 谭浩强 C程序设计(第三版),清华大学出版社
[4] 郭天祥 编 新概念51单片机C语言教程-入门、提高、开发、 拓展全攻略,电子工业出版社
[5]徐玮.C51单片机高效入门[M].第1版.北京:机械工业出版社,2002. [6]赵晓安.MCS-51单片机原理及应用[M].天津:天津大学出版社,2001.3.
[7]李广第.单片机基础[M].第1版.北京:北京航空航天大学出版社,1999.
[8]徐惠民、安德宁.单片微型计算机原理接口与应用.第1版.北京:北京邮电大学出版社,1996.
[9]张靖武、周灵彬.单片机系统的PROTEUS设计与仿真[M].第1版.北京:电子工业出版社,2001.
[10]钱逸秋.单片机原理与应用[M].北京:电子工业出版社,2001.
32
附录:
程序清单 1)延时子程序
void delay(uint k) /*1ms*k延时子程序*/ { uint i,j; for(i=0;i void zd_int0()interrupt 0 { delay(10); if(P3_2==0)set++; if(set>5)set=0; again:if(P3_2==0) goto again; } 3)待机子程序 void stop() { P0_1=0; /*D2点亮*/ P1=0x77; /*数码管显示A */ delay(1); /*进入节电待机状态*/ delay(1); } 4)设置洗涤次数子程序 void times() { P0=0xff; P0_2=0; /*D3点亮*/ 33 */ P1=0x7c; /*数码管显示b,设置洗衣次数 while(1) {if(P2_1==0){delay(10); /*按下UP键数码管作0-9递增显示*/ if(P2_1==0){m++;if(m==6)m=0;P1=DATA_7SEG[m];delay(300);}} if(P2_2==0){delay(10); if(P2_2==0){m--;if(m<0)m=9;P1=DATA_7SEG[m];delay(300);}} if(set!=1)break; } 5)设置洗涤时间子程序 void run_time() { P0=0xff; P0_3=0; /*D4点亮*/ P1=0x39; /*数码管显示C*/ while(1) {if(P2_1==0){delay(10); /*按下UP键数码管作0-9递增显示*/ }} if(P2_2==0){delay(10); if(P2_2==0){t1--;if(t1<0)t1=9;P1=DATA_7SEG[t1];delay(300);}} if(set!=2)break; } 34 } if(P2_1==0){t1++;if(t1==10)t1=0;P1=DATA_7SEG[t1];delay(300); } 6)设置脱水时间子程序 void last_time() { P0=0xff; P0_4=0; /*D5点亮*/ P1=0x5e; /*数码管显示d*/ while(1) { if(P2_1==0){delay(10); /*按下UP键数码管作0-9递增显示*/ }} if(P2_2==0){delay(10); if(P2_2==0){t2--;if(t2<0)t2=9;P1=DATA_7SEG[t2];delay(300);}} if(set!=3)break; } 7)开始洗涤子程序 void begin_x() { int k; k=t1; P0=0xff; delay(500); P0_0=0; /*D1点亮,表示开始洗衣*/ delay(500); P1=0x71; /*数码管显示F*/ //if(P2_0==1) /*若按下S1,则开始洗衣*/ //delay(10); if(P2_0==1) for(;m>0;m--) 35 if(P2_1==0){t2++;if(t2==10)t2=0;P1=DATA_7SEG[t2];delay(300); } { P2_5=0; /*开始进水*/ while(1) {if(P0_6==1) break; } P2_5=1; /*停止进水*/ P2_7=0; /* for(;t1>=0;t1--) {P1=DATA_7SEG[t1]; /* delay(2000); //t1=k; P2_7=1; P2_6=0; /* while(1) {if(P0_6==1) break; P2_6=1; /* P2_7=0; for(;t2>=0;t2--) {P1=DATA_7SEG[t2]; /* delay(2000); } P2_7=1; 电机开始转*/ 洗衣倒计时*/ 开始出水*/ 停止出水*/ 脱水倒计时*/ 判断洗涤次数*/ 36 } } {if(m=0) /* begin_t(); else P2_0==0} {if(set!=4)break;} } } 8)脱水子程序 void begin_t() { int i; P0=0xff; P0_5=0; /*D6 P1=0x79; /* P2_7=0; for(;t2>=0;t2--) {P1=DATA_7SEG[t2]; delay(2000); } P0=0xff; P1=0x00; P2_7=1; for(i=0;i<5;i++) { P2_3=1; delay(1000); P2_3=0; delay(1000); } P2_3=1; while(1) {if(set!=5)break;} }忽略此处.. 点亮*/ 数码管显示E,表示脱水*/ /*蜂鸣器响*/ 37 因篇幅问题不能全部显示,请点此查看更多更全内容