基于51单片机全自动洗衣机设计

基于51单片机全自动洗衣机设计

(仿真+程序+原理图+设计报告)

功能介绍

具体功能:

1.设置4种洗衣模式“标准”、“经济”、“单独”、“排水”。

2.分强洗和弱洗(电机转速快慢)。

3.过程分为“进水”、“漂洗”、“洗涤”、“脱水”。

4.按键控制启动、暂停、继续。

5.不同洗衣模式分成不同洗涤过程。

​演示视频:

基于51单片机全自动洗衣机设计 

具体过程

使用元器件:

单片机:STC89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0,num1=0,num2=0,num3=0,num4=0,num5=0,num6=0,flag=0,flag1=0,flag4=0,flag5=0,circle=0;
sbit ledbiaozhun=P1^0; //LED指示灯
sbit ledjingji  =P1^1;
sbit leddandu   =P1^2;
sbit ledpaishui =P1^3;
sbit ledqiangxi =P1^4;
sbit ledruoxi   =P1^5;
sbit ledxidi    =P1^6;
sbit ledpiaoxi  =P1^7;
sbit ledtuoshui =P2^0;	
sbit sshuiwei   =P3^6; //水位开关
sbit sgai       =P3^7; //盖开关
sbit paishui=P2^3; //排水阀控制
sbit jinshui=P2^2; //进水阀控制	
sbit U2=P2^4;
sbit U3=P2^5;
sbit k1=P3^0;  // 步进改变"标准、经济、单独、排水"四种方式
sbit k2=P3^1;  //强洗、弱洗
sbit k3=P3^2;  //运行、暂停和解除报替功能
void init()
{
	uchar a=0,b=0,c=0;
	TMOD=0x01;		       //T0工作于方式1
	TH0=(65536-50000)/256; //定时时间50ms
	TL0=(65536-50000)%256;
	EA=1;				   //开总中断
	ET0=1;				   //开T0中断
	TR0=0;				   //关闭T0
	EX0=1;				   //开外部中断0
	IT0=1;				   //外部中断0边沿触发方式
	U2=1;				   //电机停转
	U3=1;
	P0=0xff;
}
void delayms(uint xms) //延时
{
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

void key()		//控制按键
{
	circle=1;
	if(k1==0)		//标准、经济、单独、排水按下
	{
		delayms(10); //延时消抖
		if(k1==0)	 //再判
		{
			num++;	 //K1按下次数加1
			if(num==4)
				num=0;	//等于4,按下次数清0
			while(!k1);	//等待按键释放
		}
	}
	
	if(k2==0)				//强弱选择
	{
		delayms(10);   //延时消抖
		if(k2==0)	   //再判
		{
			num1++;	 //按下次数加1
			if(num1==2)
				num1=0;	//等于2,按下次数清0
			while(!k2);	//等待按键释放
		}
	}
}

void qiang()			  //强
{
	if(flag4==0)  //电机正转
	{	
		U2=0;
		U3=1;
	}

	if(flag4==1)  //电机反转
	{
		U2=1;
		U3=0;
	}	
}
void ruo()			//弱
{
	if(flag5==0) //电机正转
	{	
		U2=0;
		U3=1;
	}

	if(flag5==1) //电机反转
	{
		U2=1;
		U3=0;
	}
}

void qbiaozhun()			//强标准
{
	/*******洗涤********/
		num=0;
		num1=0;
		ledbiaozhun=0;//标准洗LED亮
		ledqiangxi=0; //强洗LED亮
		jinshui=0;	  //打开进水阀
		ledxidi=1;    //洗涤
		ledpiaoxi=1;  //漂洗LED亮
		ledtuoshui=1; //脱水LED亮
		delayms(5000);//水位监测
		jinshui=1; //关闭进水阀
		ledxidi=0;
		flag1=1;	//	
		TR0=1;	    //启动定时器T0
		while(flag==0)//flag为洗涤次数标志位
		{ 	
			if(flag==0&&num2==1)
			{	 
				TR0=1;
				flag1=1; //
				qiang();
			}
			if(flag==0&&num2==2)
			{
				TR0=0; //关闭定时器T0
				U2=1;  //电机停止
				U3=1;
			}
		};
		//漂洗
		U2=1;
		U3=1;					
		TR0=0;
		flag1=0;
		paishui=0; //排水
		ledtuoshui=1;
		ledpiaoxi=1;
		ledxidi=1;
		delayms(5000);
		paishui=1;	//关闭排水
		delayms(100);
		jinshui=0;	//打开进水
		delayms(5000);
		jinshui=1;	 //关闭进水
		ledpiaoxi=0;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==1)
		{
			if(flag==1&&num2==1)//强漂洗
			{	 
				TR0=1;
				flag1=2;
				qiang();
			}
			if(flag==1&&num2==2)//暂停强漂洗
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		//漂洗
		U2=1;
		U3=1;
		TR0=0;
		flag1=0;
		paishui=0;
		ledtuoshui=1;
		ledpiaoxi=0;
		delayms(5000);
		paishui=1;
		delayms(100);
		jinshui=0;
		delayms(5000);
		jinshui=1;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;
		 
		while(flag==2)
		{
		 	if(flag==2&&num2==1)
			{	 
				TR0=1;
				flag1=2;
				qiang();
			}
			if(flag==2&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		 }	;
		//脱水
		U2=1;
		U3=1;
		TR0=0;
		flag1=0;
		paishui=0;//打开排水
		ledtuoshui=0;
		ledpiaoxi=1;
		while(sgai);
		paishui=1;
		delayms(1000);
		flag1=3;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==3)
		{
			if(flag==3&&num2==1)
			{
				TR0=1;
				U2=0;
				U3=1;
				flag1=3;
			}
			if(flag==3&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		ledtuoshui=1;
		U2=1;
		U3=1;
		flag1=0;			
}

void qjingji()			//强经济
{
	/*******洗涤********/
		num=0;
		num1=0;
		ledjingji=0;
		ledqiangxi=0;
		ledtuoshui=1;
		ledpiaoxi=1;
		ledxidi=1;
		jinshui=0;
		delayms(5000);
		jinshui=1;
		flag1=1; //控制定时器中的洗涤指示灯
		TR0=1;
		while(flag==0)
		{ 	
			if(flag==0&&num2==1)
			{	 
				TR0=1;
				flag1=1;
				qiang();
			}
			if(flag==0&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		
		//漂洗					
		TR0=0;
		U2=1;
		U3=1;
		flag1=0;
		paishui=0;
		ledjingji=0;
		ledtuoshui=1;
		ledxidi=1;
		delayms(5000);
		paishui=1;
		delayms(100);
		jinshui=0;
		delayms(5000);
		jinshui=1;
		ledpiaoxi=0;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==1)
		{
			if(flag==1&&num2==1)
			{	 
				TR0=1;
				flag1=2;
				qiang();
			}
			if(flag==1&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		//脱水
		TR0=0;
		U2=1;
		U3=1;	
		flag1=0;
		paishui=0;	 //打开排水
		ledjingji=0;
		ledtuoshui=0;
		ledpiaoxi=1;
		delayms(5000);
		while(sgai);
		paishui=1;
		delayms(1000);
		flag1=3;
		TR0=1;
		flag=2;
		num3=0;
		num4=0;
		while(flag==2)
		{
			if(flag==2&&num2==1)
			{
				TR0=1;
				U2=0;
				U3=1;
				flag1=3;
			}
			if(flag==2&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		ledtuoshui=1;
		U2=1;
		U3=1;
		flag1=0;
}

void qdandu()               //强单独
{
	num=0;
	num1=0;
	ledqiangxi=0;
	ledxidi=0;
	leddandu=0;
	jinshui=0;
	delayms(5000);
	jinshui=1;//关闭进水阀
	flag1=1;
	TR0=1;
	while(flag==0)
	{
		if(flag==0&&num2==1)
			{	 
				TR0=1;
				flag1=1;
				qiang();
			}
			if(flag==0&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
	};
	flag1=0;
	U2=1;
	U3=1;
}

void rbiaozhun()			//弱标准
{
	/*******洗涤********/
		num=0;
		num1=0;
		ledbiaozhun=0;
		ledruoxi=0;
		ledtuoshui=1;
		ledpiaoxi=1;	
		jinshui=0;
		delayms(5000);
		jinshui=1;
		ledxidi=0;
		flag1=1;		
		TR0=1;	
		while(flag==0)
		{ 	
			if(flag==0&&num2==1)
			{	 
				TR0=1;
				flag1=1;
				ruo();
			}
			if(flag==0&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		//漂洗
		U2=1;
		U3=1;					
		TR0=0;
		flag1=0;
		paishui=0;
		ledtuoshui=1;
		ledxidi=1;
		delayms(5000);
		paishui=1;
		delayms(100);
		jinshui=0;
		delayms(5000);
		jinshui=1;
		ledpiaoxi=0;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==1)
		{
			if(flag==1&&num2==1)
			{	 
				TR0=1;
				flag1=2;
				ruo();
			}
			if(flag==1&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		//漂洗
		U2=1;
		U3=1;
		TR0=0;
		flag1=0;
		paishui=0;
		ledtuoshui=1;
		ledpiaoxi=0;
		delayms(5000);
		paishui=1;
		delayms(100);
		jinshui=0;
		delayms(5000);
		jinshui=1;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;	 
		while(flag==2)
		{
		 	if(flag==2&&num2==1)
			{	 
				TR0=1;
				flag1=2;
				ruo();
			}
			if(flag==2&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		 }
		//脱水
		U2=1;
		U3=1;
		TR0=0;
		flag1=0;
		paishui=0;
		delayms(5000);
		ledtuoshui=0;
		ledpiaoxi=1;
		while(sgai);
		paishui=1;
		delayms(1000);
		flag1=3;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==3)
		{
			if(flag==3&&num2==1)
			{
				TR0=1;
				U2=0;
				U3=1;
				flag1=3;
			}
			if(flag==3&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		ledtuoshui=1;
		U2=1;
		U3=1;
		flag1=0;
}

void rjingji()			//弱经济
{
	/*******洗涤********/
		num=0;
		num1=0;
		ledjingji=0;
		ledruoxi=0;
		ledtuoshui=1;
		ledpiaoxi=1;
		ledxidi=1;
		jinshui=0;
		delayms(5000);
		jinshui=1;	 //打开进水阀,进水
		flag1=1;
		TR0=1;
		while(flag==0)
		{ 	
			if(flag==0&&num2==1) //弱经济洗
			{	 
				TR0=1;
				flag1=1;
				ruo();
			}
			if(flag==0&&num2==2) //弱经济洗暂停
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		
		//漂洗					
		TR0=0;
		U2=1;
		U3=1;
		flag1=0;
		paishui=0;	//排水阀打开
		ledjingji=0;
		ledtuoshui=1;
		ledxidi=1;
		delayms(5000);
		paishui=1; //排水阀关闭
		delayms(100);
		jinshui=0; //进水阀打开 
		delayms(5000);
		jinshui=1; //进水阀关闭
		ledpiaoxi=0;
		flag1=2;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==1)
		{
			if(flag==1&&num2==1)//漂洗
			{	 
				TR0=1;
				flag1=2;
				ruo();
			}
			if(flag==1&&num2==2)//漂洗暂停
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		//脱水
		TR0=0;
		U2=1;
		U3=1;
		flag1=0;
		ledjingji=0;
		ledtuoshui=0;
		ledpiaoxi=1;
		paishui=0;	 //排水阀打开
		delayms(5000);
		while(sgai);
		paishui=1;
		delayms(3000);
		flag1=3;
		TR0=1;
		num3=0;
		num4=0;
		while(flag==2)
		{
			if(flag==2&&num2==1)
			{
				TR0=1;
				U2=0;
				U3=1;
				flag1=3;
			}
			if(flag==2&&num2==2)
			{
				TR0=0;
				U2=1;
				U3=1;
			}
		};
		ledtuoshui=1;
		U2=1;
		U3=1;
		flag1=0;
}

void rdandu()               //弱单独
{
	num=0;
	num1=0;
	ledruoxi=0;
	ledxidi=0;
	leddandu=0;
	jinshui=0;  //打开进水阀,进水
	delayms(5000);
	jinshui=1;
	flag1=1;
	TR0=1;	    //启动定时器T0
	while(flag==0)
	{
		if(flag==0&&num2==1)  //弱单独洗
			{	 
				TR0=1;
				flag1=1;
				ruo();		
			}
			if(flag==0&&num2==2)//弱单独洗暂停
			{
				TR0=0;
				U2=1;
				U3=1;
			}
	};
	flag1=0;
	U2=1;
	U3=1;
}

void dpaishui()				 //排水/脱水
{
	num=0;
	num1=0;
	ledpaishui=0;
	ledtuoshui=0;
	jinshui=1;
	paishui=0;
	delayms(3000);
	while(sgai);
	delayms(3000);
	flag1=3;
	TR0=1;
	num3=0;
	num4=0;
	while(flag==0)
	{
		if(flag==0&&num2==1) //脱水
			{	 
				TR0=1;
				flag1=3;
				U2=0;
				U3=1;
			}
			if(flag==0&&num2==2)//暂停脱水
			{
				TR0=0;
				U2=1;
				U3=1;
			}
	};
	U2=1;
	U3=1;
	flag1=0;
	ledtuoshui=1;
	paishui=1; 排水阀关闭
}			  

按键功能要求

(1)通过“K1”键步进改变“标准、经济、单独、排水”四种方式,执行相应的程序。对应指示灯亮。

(2)通过“K2”键步进改变“强洗、弱洗”两种方式,执行相应的程序,对应指示灯亮。

(3)通过“K3”键控制洗衣机运行、暂停和解除报警功能。

方式功能选择要求

(1)标准方式:进水—> 洗涤 —> 排水 —> 进水 —> 漂洗 —> 排水 —>进水 —> 漂洗—> 排水 —> 脱水。

(2)经济方式:进水 —> 洗涤 —> 排水 —> 进水 —> 漂洗 —> 排水 —> 脱水。

(3)单独方式:进水 —> 洗涤。

(4)排水方式:排水 —> 脱水。

流程图:

设计资料

01 仿真图

本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!

02 原理图

本系统原理图为PDF版,具体如图!

03 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

四千字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、设计报告等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值