基于51单片机的洗衣机控制系统

设计要求:
(1)设计一个电子定时器,控制洗衣机作如下运转:定时启动→正转20s→暂停10s→反转20s→暂停10s→定时未到回到"正转20s-→暂停10s→反转20s→暂…“定时到则停止转动;
(2)若定时到,则停机发出音响信号;
(3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤过程由“开始”信号开始;
(4)用三只LED灯表示"正转”、“反转”、“暂停"三个状态。


摘要

摘要: 根据洗衣机的控制要求,从功能要求、硬件设计、软件设计三个方面描述了一个以AT89C51单片机为控制核心的洗衣机控制系统。给出了硬件线路框图和相关的控制程序流程图。
关键词: AT89C51单片机;洗衣机控制系统;硬件;控制程序
Abstract: According to the washing machine control requirements, a control system with the AT89C51 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.
Key words : AT89C51SCMC ; Washing machine control system ; Hardware ; Control program

引言

随着单片机技术日新月异的发展,单片机以其集成度高、运算速度快、体积小、运行可靠、价格低廉等特点在过程控制、机电一体化、智能化仪表、家用电器等方面得到了广泛应用。本文采用MCS-51单片机作为洗衣机控制系统的核心,硬件线路及控制程序的设计是该系统的重要组成部分。硬件线路设计主要包括电源、功能及控制系统、洗衣机状态显示、输出控制电路的设计。控制程序设计主要包括主程序、内部定时中断服务程序、外部中断服务程序的设计。

1、设计方案的选择

洗衣机控制电路是用来控制洗衣机电机的正转反转暂停三个状态的。该电路可以控制洗衣机的定时启动,洗衣机的工作状态,而且当达到定时终点时会停止洗衣机工作同时发出报警信号。时间的显示采用两位数码管(一分钟为单位),按倒计时方式工作,直到达到定时终点而停机。
第一部分方案:本电路的计数系统因为要求实现倒计时,所以可以用双向计数器74LS192或程序定时计数。根据自身情况,为减少制作成本和产品性价比,本设计采用程序定时计数的方法。
第二部分方案:显示单元采用数码管显示或者LCD显示,因设计要求采用两位数码管显示,还有考虑到成本问题,本设计采用两位数码管作为显示单元。
第三部分方案:主控制单元,采用STC89C52芯片或者AT89C51芯片作为硬件核心,STC89C52是一种带4K字节闪烁可编程可擦除只读存储器,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,STC89C52是一种高效微控制器,51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案但是运用于电路设计中时由于不具备在线编程(ISP)技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插可能对芯片造成一定的损坏。AT89C51跟STC89C52功能基本相同,但目前STC89C52型号芯片已经停产,所以此设计采用AT89C51作为主控芯片。
第四部分方案:报警的警铃在工作时间结束后就会响起,但是根据实际情况不能一直的响下去,应此利用一个单稳电路,当暂稳态结束后就可以回到稳态,警铃就不再响了。
综上比较,本设计采用各分电路的最优化方案。

2、硬件设计

2.1 各单元模块电路

定时显示单元
在这里插入图片描述

此模块选用两个一位7段数码管作为显示,跟单片机的P0,P2相连接。

定时时长控制单元
在这里插入图片描述

此模块作为洗衣机定时时间加、减,以及启动洗衣机工作开关。用三个微动开关来控制。

单片机最小系统单元
在这里插入图片描述

此电路是单片机的最小系统,用来作为主控芯片。

电机状态显示单元
在这里插入图片描述

此模块是电机运转显示正反转以及停止状态。

洗衣机运作单元
在这里插入图片描述

报警单元
在这里插入图片描述

此单元模块用作定时结束洗衣机停止工作,发出报警信号。

2.2 仿真结果及分析

proteus仿真软件采用直观的图形界面创建电路:在计算机屏幕上模仿真实实验室的工作台,绘制电路图需要的元器件、电路仿真需要的测试仪器均可直接从屏幕上选取;软件仪器的控制面板外形和操作方式都与实物相似,可以实时显示测量结果。proteus软件带有丰富的电路元件库,提供多种电路分析方法。作为设计工具,它可以同其它流行的电路分析、设计和制板软件交换数据。EWB还是一个优秀的电子技术训练工具,利用它提供的虚拟仪器可以用比实验室中更灵活的方式进行电路实验,仿真电路的实际运行情况,熟悉常用电子仪器测量方法。可用proteus仿真软件对各单元电路和整体电路进行元器件仿真和运行仿真,便于对设计方案的理解和分析。
用proteus仿真的总图如图 2.2所示
在这里插入图片描述

3、软件设计

3.1 系统流程图

在这里插入图片描述

3.2 源程序

 /*********************************************************************************
 *********************************************************************************/
 //------------------------------------------------------------------------------//
 //							      		                                         //
 //标题:基于单片机的洗衣机控制系统
 //							      		                                         //				
 //创建人:朽木自雕i		 1547013894@qq.com								
 //日期:2019/11/14					修改日期:2020/11/15						
 //描述:																										 									 	      
 //     本设计要做一个简易洗衣机控制系统,用AT89C51作为主控芯片来控制步进电机,控制洗
 //  衣机作如下运转:定时启动→正转20s→暂停10s→反转20s→暂停10s→定时未到回到"正转20s-→
 //  暂停10s→反转20s→暂…“定时到则停止转动,若定时到,则停机发出音响信号,用两个数码管
 //  显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机;洗涤
 //  过程由“开始”信号开始,用三只LED灯表示"正转”、“反转”、“暂停"三个状态。经仿真运行测
 //  试后,所有功能均正常运行。			                                         //
 //声明:									 									 									 									  //
 //      以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处,		     //
 //      如有商业用途请与作者联系。															
 //																													  							 	   //
 //------------------------------------------------------------------------------//
 /*********************************************************************************
 *********************************************************************************/
#include"reg51.h"//此文件中定义了单片机的一些特殊功能寄存器

void DelayMs(unsigned int x);//延时函数声明
unsigned char code Ledcode[16]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义字符型数组
unsigned int i,j,disp;//定义两个无符号整型变量i 和 disp

sbit K1=P3^5;
sbit K2=P3^6;
sbit K3=P3^7;

sbit MA   = P1^3;
sbit MB   = P1^4;
sbit LED1 = P1^5;
sbit LED2 = P1^6;
sbit LED3 = P1^7;

sbit BEEP=P2^7;

void DelayMs(unsigned int x)//定义延时函数
{
	unsigned char i;
	while(x--)
	{
		for(i=0;i<120;i++);//大约1ms
	}
}
void Beep()
{
	BEEP=~BEEP;
	DelayMs(3000);
	BEEP=1;
}
void zheng()          //模拟电机正反向转动大概20S钟
{
	for(i=0;i<20;i++)
	{
		DelayMs(800);//延时1s
		LED1 = 0;
		LED2 = 1;
		LED3 = 1;
		MA   = 0;
		MB   = 1;
	}
}
void fan()            //模拟电机反反向转动大概20S钟
{	
	for(i=0;i<20;i++)
	{
		DelayMs(800);//延时1s
		LED1 = 1;
		LED2 = 0;
		LED3 = 1;
		MA   = 1;
		MB   = 0;
	}
}
void ting()           //模拟电机停止转动大概10S钟
{
	for(i=0;i<10;i++)
	{
		DelayMs(800);//延时1s
		LED1 = 1;
		LED2 = 1;
		LED3 = 0;
		MA   = 0;
		MB   = 0;
	}
}
void keyscan()
{
	if(K1==0)
	{
		DelayMs(5);
		if(K1==0)
		{
			for(j=disp;j>0;j--)
			{
				zheng();
				ting();
				fan();
				ting();
				disp--;
				P0=Ledcode[disp/10%10];//把十位数的值赋给P2口,即第一位数码管
				P2=Ledcode[disp%10];	//把个位数的值赋给P3口,即第二位数码管	
				if(disp==0)
				{
					Beep();
				}
			}
		}
	}
	else if(K2==0)
	{
		DelayMs(5);
		if(K2==0)
		{
			disp++;
			P0=Ledcode[disp/10%10];//把十位数的值赋给P2口,即第一位数码管
			P2=Ledcode[disp%10];	//把个位数的值赋给P3口,即第二位数码管
			if(disp==90)     //最多定时90分钟,即1.5小时
			{
				disp=0;
			}
		}
		while(!K2);
	}
	else if(K3==0)
	{
		DelayMs(5);
		if(K3==0)
		{
			disp--;
			P0=Ledcode[disp/10%10];//把十位数的值赋给P2口,即第一位数码管
			P2=Ledcode[disp%10];	//把个位数的值赋给P3口,即第二位数码管
			if(disp==0)
			{
				disp=91;     //最多定时90分钟,即1.5小时
			}
		}
		while(!K3);
	}
}

void main()
{
	disp=5;
	P0=Ledcode[disp/10%10];//把十位数的值赋给P2口,即第一位数码管
	P2=Ledcode[disp%10];	//把个位数的值赋给P3口,即第二位数码管
	while(1)
	{	
		keyscan();
	}
}				

4、收获和总结

课程设计是一个探索与实践的过程。虽然我们没有用实际电路来连接调试,但是由于现在的软件功能强大,用软件来仿真也是很好的方法。
虽然在设计的过程中遇到了这样或那样的困难,但是通过示波器的波形分析,电路的不断改进,困难都一一的克服了。我认为我们在设计的过程中不仅是熟悉了软件的用法,更重要的是学会了设计的方法以及设计的精神。当然说设计的精神似乎有点不恰当,但我认为设计就是一种精神意志的磨练。我曾多次想放弃,想直接去抄袭别人的,但是始终有一股精神支撑着我——课程设计是锻炼的机会,是对将来工作的一种积累,糊弄只会是害了自己。于是我硬着头皮把电路拆了又接接了又拆,虽然很麻烦,也很头疼(到处是线,看的眼睛都花了),不过也是有乐趣在其中的。每当解决一个问题,或者一部分电路实现了其工作都感觉到很高兴,这些细小的成功带给我完成整个设计的力量。于是通过不断的调试,不断的改进终于是把电路弄出来了。虽然我设计出的这个电路能够工作,不过在有些地方还是不够很好的。但是我还是坚持自己原创。比方说,彩灯显示循环控制部分,如果用一个译码器的话很简单的就实现了,不过我还是采用了门电路来搭建。一来是我自己设计的,而来也是复习一下组合逻辑电路的设计。还有BO的置数问题,我几乎是头疼了很长时间,后来大家一起讨论,用示波器观察波形,才知道了原因,然后加以改进。这里我体会到了团结协作的力量。我们将来出去工作也是一个个的团队,自己是团队中的一员,既要独立思考努力为团队作出贡献也要从团队中吸收经验。
总而言之,受益匪浅。在知识水品上学到了数字电路的知识,体会到了数字电路的巧妙;但更重要的是学会了方法,学会了坚韧,相信只要具备正确的设计方法和坚忍不拔的拼搏意志无论多么复杂多么庞大的电路都会设计的出来!

5、元器件清单

在这里插入图片描述

6、主要参考文献资料

[1] 李朝青.单片机原理及接口技术(简明修订版)[M].北京:北京航空航天大学出版社,1998.
[2] 李全利.单片机原理及接口技术[M].高等教育出版社,2003.
[3] 杨将新,李华军,刘到骏等.单片机程序设计及应用(从基础到实践)[J].电子工业出版社,2006.
[4] 黄智伟.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社, 2005.
[5] 陈有卿.集成电路妙用巧用300例.北京:人民邮电出版社,1999.
[6] 陈安凯.最新集成电路数据手册.北京:人民邮电出版社,1996.
[7]瞿安连.应用电子技术.北京:科学出版社,2003.

创作不易,分享更需勇气! 喜欢的可以给点个 关注❤ 给个 赞❤欢迎评论区留言交流~

版权声明:本文为CSDN博主「朽木自雕i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45385706/article/details/109714101

朽木自雕i

我还没有学会写个人说明!

暂无评论

相关推荐

Arduino UNO步进电机控制

1.开发环境:Arduino IDE 2.步进电机驱动器:雷赛DM860 3.单片机程序 //定义了板上的控制端DIR,8作为方向控制端 const int DIRPIN 2;//定义了板上的步数端