本次课程设计采用STC89C52单片机为核心控制元件,通过软件延时计算器生成的延时函数实现定时功能,通过定时器0的定时功能实现洗衣时间的倒计时、蜂鸣器的鸣响时间和指示灯的闪烁功能,并将洗衣机转速通过流水灯的循环速度来表示,实现一个洗衣机控制系统的基本功能。该洗衣机有三种工作模式,弱洗模式、强洗模式和漂洗模式。本设计以51单片机为主控元件,并以模式选择模块、LCD1602显示模块、流水灯显示模块、蜂鸣器模块设计实现洗衣机控制系统。按下不同的按键进入模式和启动,同时用LCD1602显示出来。通过Proteus软件仿真测试实现简洗衣机控制系统的基本功能。
关键词: 洗衣机 LCD液晶显示器 流水灯 方式选择
从古至今,洗衣服都是一项难于逃避的家务劳动,给人们带来的最大的直观感受就是劳累,随着科技的发展,目前已经由手洗衣服变成了机器代替人工,全自动洗衣机更是大受欢迎,解决了劳累的问题,而且洗的衣服也更加干净,解决了一大部分的生产力问题。
随着时代的发展,洗衣机已成为人们日常生活中的必需品。目前,全自动滚筒洗衣机已经普及到家家户户都拥有,中国洗衣机市场正进入更新换代的时期,人们对于洗衣机的要求也是越来越高。目前的洗衣机主要有强洗、弱洗、漂洗、进排水系统、暂停、停止等功能,但是在许多方面还是满足不了人们的需求。这就要求设计者们有更高的专业和计数水平设计出更节能、功能更齐全、更人性化的洗衣机[1]。让洗衣服这项难于逃避的家务劳动不再成为一种负担。
目前的洗衣机都没有实现全方面的兼容,大多数的洗衣机生产的厂家都注重各自品牌洗衣机的特长,突出的个性化的功能都是由单片机控制控制实现的,因此设计出基于单片机的洗衣机控制电路系统具有强的实用性。并且随着单片机技术日新月异的发展,单片机以其集成度高、运算速度快、体积小、可靠运行、价格低廉等特点在过程控制、机电一体化、家用电器等方面得到了广泛应用[2]。
本设计采用AT89C51单片机作为洗衣机控制系统的核心,硬件线路及控制系程序的设计为该系统的重要组成部分。硬件线路设计主要包括洗涤方式选择模块,方式指示灯模块,流水灯模块,蜂鸣器模块,LCD显示模块。控制程序设计主要包括主程序、定时中断服务程序设计。以此来实现本次课程设计的全部功能。
本次课程设计内容如下:
利用Proteus实现功能仿真,仿真后的程序下载到51单片机,实现洗衣机的功能并通过LCD.点阵式LED和普通LED二极管显示。
本次课程设计要求如下:
1.根据功能要求选择设计方案,并进行论证;
2.完成系统整体设计方案,画出电路的总体方框图,并在Proteus上设计出原理图;
3.绘制程序说明及流程图并完成程序设计;
4.用跑马灯LED灯循环速度快慢表示洗衣机电机转速的大小;
5.用三种独立按键设置待洗衣物的不同洗涤方式(弱洗.强洗和漂洗);
6.实现弱洗定时2分钟.强洗定时5分钟和漂洗定时3分钟的功能;
7.在Proteus对电路及程序进行仿真调试,直到正确显示所要求信息的直观显示效果;
8.在电路开发板或实验箱上实现课程设计题目的功能要求;
9.写出经验体会和总结,撰写课程设计报告。
本次课程设计主要采用AT89C51为主控元件进行设计并实现本次设计的全部内容及要求。设计原理主要包括洗涤方式选择模块(按键模块),方式指示灯模块,流水灯模块,蜂鸣器模块,LCD显示模块。控制程序设计主要包括主程序、定时中断服务程序设计。以此来实现本次课程设计的全部功能。具体各部分设计原理如下。
主控元件89C51如图 31所示:本次课程设计的所有功能实现都是依靠该主控元件来实现的。通过在Keil里编写相关程序,再下载到该主控中,就可以实现相关设计要求。
图 31 主控AT89C51
流水灯模块如图 32所示,本次课程设计要求用流水灯循环速度快慢表示洗衣机电机转速的大小,由图 32可知,当P1口为0时,LED灯是亮的状态,通过控制P1口状态来控制LED流水灯的亮灭。流水灯循环速度的快慢通过延时时间的长短来表示,其中,延时时间短表示流水灯循环速度快,即洗衣机强洗状态,延时时间长表示流水灯循环速度慢,即洗衣机弱洗状态。
图 32 流水灯模块仿真图
指示灯模块仿真图如图 33所示,本次课程实际设计中添加了指示灯的操作,在用户选择洗衣模式后相应的指示灯就会亮,并且还定义了在洗衣机工作工程中还指示灯0.5秒闪烁一次。
图 33 指示灯模块仿真图
按键模块仿真图如图 34所示,分为方式选择按键、开始按键、停止按键,其中方式选择包括强洗模式、漂洗模式、弱洗模式。在IO口与按键相连之间还加了上拉电阻,使IO口初始保持高电平状态。
图 34 按键模块仿真图
声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片 机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波, 接上喇叭就能发出一定频率的声音,若再利用延时程序控制高、低电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音[3]。蜂鸣器模块仿真图如图 35所示,如图,通过控制P2.2口的输出状态控制蜂鸣器的状态。
图 35 蜂鸣器模块仿真图
LCD显示模块仿真图如图 36所示,本次课程设计通过LCD显示洗衣模式和洗衣时间。AT89C51 单片机的 P0 口接 LCD 液晶显示屏的 DB 口(DB0、DB1、DB2、DB3、DB4、DB5、DB6、DB7),P2.1、P2.2、P2.3 分别接 LCD 液晶显示屏的 RS、RW、E引脚。
图 36 LCD显示模块仿真图
LCD能够同时显示16×2,32个字符,是一种专门用来显示字母、数字、符号等的点阵型液晶模块。本次课程设计选用了LCD1602,其分辨率为16×2,LCD1602各引脚功能如表 1所示。
LCD基本操作时序如表 2所示。
LCD读操作时序图如图 37所示。LCD写操作时序图如图 38所示。当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是一个完整的LCD1602写命令的时序。
表 1 LCD1602各引脚功能
引脚号 |
引脚名 |
电平 |
输入/输出 |
作用 |
1 |
电源地 |
|||
2 |
电源(+5V) |
|||
3 |
对比调整电压 |
|||
4 |
RS |
0/1 |
输入 |
0-输入指令 |
5 |
RW |
0/1 |
输入 |
0-向LCD写入指令或数据 |
6 |
E |
1,1-0 |
输入 |
使能信号,1时读取信息,1-0(下降沿)执行指令 |
7 |
DB0 |
0/1 |
输入/输出 |
数据总线line0(最低位) |
8 |
DB1 |
0/1 |
输入/输出 |
数据总线line1 |
9 |
DB2 |
0/1 |
输入/输出 |
数据总线line2 |
10 |
DB3 |
0/1 |
输入/输出 |
数据总线line3 |
11 |
DB4 |
0/1 |
输入/输出 |
数据总线line4 |
12 |
DB5 |
0/1 |
输入/输出 |
数据总线line5 |
13 |
DB6 |
0/1 |
输入/输出 |
数据总线line6 |
14 |
DB7 |
0/1 |
输入/输出 |
数据总线line7(最高位) |
表 2 LCD基本操作时序
操作 |
输入 |
输出 |
读状态 |
RS=0,RW=1,E=1 |
D0~D7=状态字 |
写指令 |
RS=0,RW=0,D0~D7=指令码,E=高脉冲 |
无 |
读数据 |
RS=1,RW=1,E=1 |
D0~D7=数据 |
写数据 |
RS=1,RW=1,D0~D7=数据,E=高脉冲 |
无 |
图 37 LCD读操作时序图
图 38 LCD写操作时序图
复位电路的作用是复位。在单片机接上电源以后,或电源出现低压时,将单片机存储器复位,使其各项参数处于初始位置,即处于开机时的标准程序状态,以消除由于某种原因的程序紊乱。单片机的复位电路有上电复位和手动复位两种形式,RST端的高电平直接 由上电瞬间产生高电平则为上电复位;若通过按钮产生高电平复位信号则称为手动复位[4]。复位电路电路图如图 39所示。图 39为兼有上电复位和手动复位的电路。
图 39 复位电路电路图
本设计采用AT89C51单片机作为洗衣机控制系统的核心,硬件线路及控制系程序的设计为该系统的重要组成部分。硬件线路设计主要包括洗涤方式选择模块(按键模块),方式指示灯模块,流水灯模块,蜂鸣器模块,LCD显示模块。控制程序设计主要包括主程序、定时中断服务程序设计。以此来实现本次课程设计的全部功能。
本次课程设计硬件线路设计主要包括洗涤方式选择模块(按键模块),方式指示灯模块,流水灯模块,蜂鸣器模块,LCD显示模块。具体基本构架如图 41所示。
图 41 硬件基本构架图
程序设计主要是围绕按键进行的,其主要设计流程图如图 42所示。
图 42 主函数程序流程图
流水灯模块原理图如图 32所示,本次课程设计要求用流水灯循环速度快慢表示洗衣机电机转速的大小,由于电机转速:强洗>漂洗>弱洗,所以通过软件延时计算器设置20ms、50ms、80ms延时分别代表强洗、漂洗、弱洗的流水灯间隔,即可实现流水灯的循环,也就是用流水灯的循环速度表示了洗衣机电机转速的大小。
指示灯模块仿真图如图 33所示,有三个指示灯,分别为漂洗、弱洗、强洗三个洗衣方式。在洗衣的过程中,相应的指示灯会0.5s的进行闪烁,闪烁的功能通过定时器0控制计时,并在定时器0的中断函数中进行计数。
按键模块仿真图如图 34所示,通过在IO口与按键之间加入上拉电阻,使IO口在初始时保持高阻态状态,在按键按下的过程,就可以很快的检测到按键的状态。利用函数“Key_Scan(unsigned char mode)”进行按键扫描,并返回相应的数值。利用函数“ScanK()”表示相应按键按下之后所进行的操作,分别进行方式选择、开始、停止操作。并且在函数“ScanK()”中还添加了LCD显示函数和流水灯函数[5]。使这些操作可以同时进行已完成相应的功能要求。
蜂鸣器模块仿真图如图 35所示,当P2.2输出为0时,蜂鸣器响,并且在中断函数中进行计时,控制洗衣结束后的蜂鸣器鸣响的时间。
LCD显示模块仿真图如图 36所示,本次设计通过LCD显示了洗涤方式和时间,其中,可以通过调节滑动变阻器来调节所显示内容的亮度,经过几次调节,可以使显示的内容达到最清晰的状态。“LCD_busy()”为LCD查忙函数,如果检测到LCD忙,则等待,如果检测到LCD为空闲状态,则可以进行写在操作。LCD的显示规定为两行,15列,通过函数“LCD_write_address(unsigned char x,unsigned char y)”确定所写字符的位置,即它应该在第几行第几列;通过函数“LcdShowStr(unsigned char x ,unsigned char y,unsigned char *str,unsigned char len)”显示字符串,由于需要在LCD上动态显示洗衣的时间,所以需要有显示字符串的函数,并且在定时器0中断函数中也需要在计时时显示当前的时间。LCD程序流程图如图 43所示。
正在上传…重新上传取消
图 43 LCD显示模块程序流程图
LCD是一个慢速显示器件,所以在写每一条指令之前一定要先读取LCD的忙碌状态。所以编写了LCD判断急、忙的程序,在实物开发板上这个程序是完全可以用的,但是在PROTEUS仿真中,加入此程序时,LCD就只会亮而不会显示,软件中显示LCD一直处于忙的状态,在仿真中需要把判断LCD急、忙的程序变为普通的延时函数就可以看到所要显示的内容,此时避开了液晶的忙状态,虽然这种方法不太合理,但是确实解决了LCD在仿真中不能显示的问题[6]。所以在开发板和在PROTEUS仿真中所使用的程序是有些不太一样的。
本次课程设计中,需要进行定时器0进行定时的有:洗衣时长的倒计时、指示灯的闪烁、蜂鸣器的鸣响时间。首先,利用定时器0进行10ms的定时,在定义变量进行计数,到达6000之后设置的时间减1,直到减到0为止。具体流程图如图 44所示;
指示灯每0.5s闪烁一次,定义一个变量进行计数,当计数值小于50时,使三个LED处于灭的状态,当计数值小于100时,使各个模式下的指示灯处于亮的状态,即可实现指示灯每0.5s闪烁一次的功能。具体流程图如图 45所示;
蜂鸣器的鸣响时间为10s,定义一个变量进行计数,当达到1000时,关闭蜂鸣器,具体流程图如图 46所示。
正在上传…重新上传取消
图 44 定时器0实现定时时间减小程序流程图
正在上传…重新上传取消
图 45 定时器0实现指示灯0.5s闪烁程序流程图
正在上传…重新上传取消
图 46 蜂鸣器控制程序流程图
通过以上的设计,本次课程设计的任务及要求可以全部实现,也加了蜂鸣器,停止键等附加功能,具体结果图如下。
由于程序的设定,洗衣机默认洗衣模式为强洗,所以开启洗衣机之后,模式是强洗,时间为0,PROTEUS仿真如图 51所示,开发板仿真如图 52所示。
正在上传…重新上传取消
图 51洗衣机开启页面(仿真)
正在上传…重新上传取消
图 52 洗衣机开启页面(开发板)
由图 51、图 52可知,可以实现所要求的任务。并且仿真图和开发板显示结果是一样的。
强洗的时间为5分钟,选择洗衣模式为强洗后,PROTEUS仿真如图 53所示,开发板仿真如图 54所示。
正在上传…重新上传取消
图 53 洗衣机选择为强洗后的界面(仿真)
正在上传…重新上传取消
图 54 洗衣机选择为强洗后的界面(开发板)
由图 53、图 54可知,可以实现所要求的任务。并且仿真图和开发板显示结果是一样的。
漂洗的时间为3分钟,选择洗衣模式为漂洗后,PROTEUS仿真如图 55所示,开发板仿真如图 56所示。
正在上传…重新上传取消
图 55 洗衣机选择为漂洗后的界面(仿真)
正在上传…重新上传取消
图 56 洗衣机选择为漂洗后的界面(开发板)
由图 55、图 56可知,可以实现所要求的任务。并且仿真图和开发板显示结果是一样的。
弱洗的时间为2分钟,选择洗衣模式为弱洗后,PROTEUS仿真如图 57所示,开发板仿真如图 58所示。
正在上传…重新上传取消
图 57 洗衣机选择为弱洗后的界面(仿真)
正在上传…重新上传取消
图 58 洗衣机选择为弱洗后的界面(开发板)
由图 57、图 58可知,可以实现所要求的任务。并且仿真图和开发板显示结果是一样的。
以上则是实现了三种方式的选择和开始工作,并且显示相应洗衣时间的任务要求。
对于用流水灯的转速来表示电机转速的大小,电机的转速:强洗>漂洗>弱洗,在仿真和开发板上都可以观察到流水灯的转速快慢:强洗>漂洗>弱洗,即实现了用流水灯的转速来表示电机转速的大小的功能要求。
对于计时时间的显示,在仿真和开发板上都可以观察到,洗衣机在工作的过程中,在LCD显示器上会准确的显示出洗衣所剩余的时长。
本次课程设计,给我留下了很深刻的印象,在本次课程设计期间,我对于单片机的使用更加的熟练。通过上学期为期数月的电子系统综合课程实践设计以及为期一个星期的单片机课程的学习,我掌握了多数单片机的基础知识,包括keil软件的使用、proteus软件的使用、单片机基本程序的编写、单片机电路的仿真设计等,此次单片机课程设计所用到的知识多为基础知识,包括按键的扫描、流水灯、、外部中断的使用等,少数为拓展知识,如LCD显示等等。
本此课程设计对全自动洗衣机的系统进行了分析和设计,包括吸引硬件分析、软件分析。对洗衣机的系统功能设计及模块划分做了进一步介绍。在实践的过程中,也遇到了很多的问题,比如题目中要求用LCD或点阵LED显示,可是这些器件都不太会使用,所以最开始的时候是比较困难的,最终查了很多资料,解决了用LCD显示的问题。再显示的过程中也是遇到了各种各样的问题,加入LCD之前,程序运行时没有问题的,下载到单片机中也是可以实现任务要求的,加入LCD之后反而加了不少的“麻烦”,查资料显示,PROTEUS仿真LCD会出现BUG,这次使用LCD给我留下很深的印象,对于以后使用LCD实现任务要求时也有了很大的启发。遇到问题后,和同学讨论,查资料,再次仔细阅读所写的程序,最终发现了问题所在,也呈现了比较好的实践结果。
对于本专业来说,实践、动手解决问题的能力是非常重要的,经过了上学期的电子系统综合实践和本学期的单片机课程设计,我都对单片机的使用变得更加灵活,对于用单片机实现某个小项目也是比较得心应手了。此外,在学习 C 语言、Proteus 等基础上,进一步学习并实践了程序编写、调试,Proteus 的软件仿真,成功完成了设计。既学习了不少新的知识和技术,由亲身体验软件设计、开发的过程,个人觉得收获颇丰。
[1] 陈桂友著.增强型8051单片机实用开发技术[M] .北京航空航天大学出版社,2009.
[2] 王宜怀.单片机原理及其嵌入式应用教程[M],北京希望电子出版社,2002.
[3] Mark Nelson著.潇湘工作室译.串行通信开发指南[M],中国水利水电出版社,2002.
[4] 宏晶科技.STC12C5A60S2单片机器件手册[M],2009
[5] 周昌海,葛浩.应用型本科院校单片机应用技术课程教学改革探讨[J].西部素质教育,2019.
[6] 王宜怀.单片机原理及其嵌入式应用教程[M].北京希望电子出版社,2002.