⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 防止乱改找不到源码的副本 wash.c

📁 单片机仿真51设计1.洗衣机控制C语言版
💻 C
字号:
/******************************************************************************
题目:洗衣机控制C语言版
说明:参考成都木马科技有限公司《单片机与仿真》光盘中的例子制作的。
作者:kaka000      论坛:http://www.proteus.com.cn
日期:07年10月13日
******************************************************************************
使用说明:
a.先选择“强“”弱”-----按“选择”键切换灯到到“强”,再按“增加、确定”键
b.洗衣时间定时-----切换到洗衣时间,在按“增加、确定”键或“减少”键,OK后切换
		到脱水时间,同样设定脱水时间和洗涤次数。
	设定好后,切换到准备,按“增加、确定”键开始工作。
	开始工作时,P2.0的灯亮(其实是代替电子水龙头的“开”),
	这时候等待水满,这里我是手动给他一个高电平(点FULL的逻辑开关),这时开始洗衣,
	洗衣时间减到0时,次数减1,再洗(洗衣时间恢复,---即洗衣时间是指每次的洗衣时间,
		不是总的时间)
	当次数减到0时P2.1的灯亮(其实是代替电子水龙头的“关”),
	这时候等待水放完,这里我再手动给他一个高电平(点empty的逻辑开关),这时开始脱水,
		电机启动,等到脱水时间减到0时,p2.7的灯亮(灯是代替喇叭的),等待下一次洗衣。
	按“启动”键,系统复位。开始下一次洗衣的设定。
******************************************************************************/
#include <AT89X51.H> 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
									0x7d,0x07,0x7f,0x6f,0x00}; 
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 
                             0xef,0xdf,0xbf,0x7f};  

unsigned char dispbuf[2]={0,0}; 
unsigned char dispbitcnt; 

unsigned char second; 
unsigned char minite;  
unsigned int  tcnt; 
unsigned char mstcnt;  
unsigned char i,j; 

sbit full=P2^5; 
sbit empty=P2^6;
unsigned char temp;

unsigned char startok;

unsigned char ID;
unsigned char keye;
unsigned char ready;
			   
unsigned char uwtime; 
unsigned char hwtime;
unsigned char count;
char utime; 
char htime;
char cnt;

unsigned char strong;
unsigned char weak;
unsigned char power;

//延时1ms子程序****************************************************************
void delay1ms(void) 
{ 
	unsigned char i,j; 
	for(i=2;i>0;i--) 
	for(j=248;j>0;j--); 
}   
//延时200ms子程序****************************************************************
void delay02s(void) 
{ 
	unsigned char i; 
	for(i=200;i>0;i--) 
	{
		delay1ms(); 
	} 
} 
void main(void) 
{
rst:TMOD=0x02; 
	TH0=0x06; 
	TL0=0x06; 
	TR1=1; 
	ET0=1; 
	TH1=0x06; 
	TL1=0x06; 
	ET1=1; 
	EA=1; 
	P0_5=0;
	P0_6=0;
	P0_7=0;
	P2=0;
		
	startok=0;
	ID=0;
	keye=1;
	ready=0;

	uwtime=0; 
	hwtime=0;
	count=0;

	utime=0; 
	htime=0;
	cnt=0; 
   
	strong=0;
	weak=0;
	power=0;
   
	while(1) 
	{ 
	//洗衣模式选择//
	if(keye==1)
	{
		if(P0_0==0) 	
		{ 
			delay1ms(); 
			//选择键功能//  
			if(P0_0==0) 
			{ 
				ID++; 
				if(ID==6) 
				{ 
					ID=0; 
				} 
				while(P0_0==1); 
			} 
			switch(ID) 
			{
				case 0: 
					ready=1;
					strong=0;
					weak=0;
					hwtime=0;
					uwtime=0;
					count=0;
					dispbuf[0]=10; 
					dispbuf[1]=10;	
					P0_5=0;
					P0_6=0;
					P0_7=0;
					delay02s();
					break;
				case 1: 	  //strong;	强洗
					strong=1;
					weak=0;
					hwtime=0;
					uwtime=0;
					count=0;
					dispbuf[0]=power%10; 
					dispbuf[1]=power/10;
					P0_5=0;
					P0_6=0;
					P0_7=1;
					delay02s();
						break;
				 case 2: 	  //weak;	弱洗
					strong=0;
					weak=1;
					hwtime=0;
					uwtime=0;
					count=0;
					dispbuf[0]=power%10; 
					dispbuf[1]=power/10;
					P0_5=0;
					P0_6=1;
					P0_7=0;
					delay02s(); 
					break; 
				case 3: 	  //hwtime;	洗衣时间
					strong=0;
					weak=0;
					hwtime=1;
					uwtime=0;
					count=0;
					dispbuf[0]=htime%10; 
					dispbuf[1]=htime/10;
					P0_5=0;
					P0_6=1;
					P0_7=1;
					delay02s(); 
					break;  
				case 4: 	 // uwtime; 脱水时间
					strong=0;
					weak=0;  
					hwtime=0;
					uwtime=1;
					count=0;
					dispbuf[0]=utime%10; 
					dispbuf[1]=utime/10;
					P0_5=1;
					P0_6=0;
					P0_7=0; 
					delay02s(); 
					break; 
				case 5: 	  //count;	洗涤次数
					strong=0;
					weak=0;
					hwtime=0;
					uwtime=0;
					count=1;
					dispbuf[0]=cnt%10; 
					dispbuf[1]=cnt/10;
					P0_5=1;
					P0_6=0;
					P0_7=1;
					delay02s(); 
					break; 
			} 	    
		} 
		//启动键功能//    
		if(P0_1==0) 	//启动  
		{ 
			delay1ms();  
			if(P0_1==0) 
			{
				if(ready==1) 	 //准备OK
				{			   
					startok=1;
				}
			}
		} 
			//加 -- 确定键功能// 
		if(P0_2==0) 	 
		{ 
			delay1ms();  
			if(P0_2==0) 
			{
				if(strong==1)  //strong__强洗 
				{
					power=1;
					dispbuf[0]=power%10; 
					dispbuf[1]=power/10;
				}
				if(weak==1)   //weak__弱洗 
				{
					power=2;
					dispbuf[0]=power%10; 
					dispbuf[1]=power/10; 
				}
				if(hwtime==1) //hwtime__洗衣时间
				{
					delay02s();
					htime++;
					dispbuf[0]=htime%10; 
					dispbuf[1]=htime/10;		
				}
				if(uwtime==1) //uwtime__脱水时间
				{
					delay02s();
					utime++;
					dispbuf[0]=utime%10; 
            	    dispbuf[1]=utime/10;			
				}  
				if(count==1)  //count__洗涤次数
				{
					delay02s();
					cnt++;
					dispbuf[0]=cnt%10; 
					dispbuf[1]=cnt/10;		
				}
			}
		}
		//减键功能// 
		if(P0_3==0) 	   
        { 
			delay1ms(); 
			if(P0_3==0) 
			{
				if(strong==1)  //strong__强洗
				{}
				if(weak==1)  //weak__弱洗 
				{}
        	    if(hwtime==1) //hwtime__洗衣时间
				{
					delay02s();
					htime--;
					dispbuf[0]=htime%10; 
					dispbuf[1]=htime/10;
				}
        		if(uwtime==1) //uwtime__脱水时间
				{
					delay02s();
					utime--;
					dispbuf[0]=utime%10; 
					dispbuf[1]=utime/10;
				}
				if(count==1)  //count__洗涤次数
				{
					delay02s();
					cnt--;
					dispbuf[0]=cnt%10; 
					dispbuf[1]=cnt/10;
				}
			}
		}
	}
//确认执行洗衣//
st:while(startok==1)
   {
		keye=0;
		P2_0=1;	             //进水水龙头开
		ready=0;
		strong=0;
		weak=0;
		hwtime=0;
		uwtime=0;
		count=0;
		while(full==1)			 //水满
		{
			P0_5=1;
			P0_6=1;
			P0_7=0;
			P2_0=0;			//进水水龙头关		
			minite=htime;
			TR0=1;			//启动计时		
			while(minite!=0)
			{}
			TR0=0;		 
			while(1)
			{ 
				P2_1=1;		//出水水龙头开
				full=0;
				while(empty==1)
				{
					empty=0;
					P2_1=0;		//出水水龙头关
					cnt--;
					while(cnt!=0)
					{goto st;}
					P0_5=1;
				    P0_6=1;
					P0_7=1;	
	   				minite=utime;
					//强洗模式//	  
					while(power==1)
					{	
						TR0=1;			//启动计时	  
					    P2_3=1;	 	//强洗 电机开
						P2_4=0;
						while(minite==0)
						{
							TR0=0;
							P2_3=0;	  //关电机	
							P2_0=0;
							P2_1=0;
							P2_7=1;   //蜂鸣器发声
							while(1)
							{
								for(i=0;i<=200;i++)
								{
				   					 P2_7=~P2_7;
				   					 if(P1_0==0)
			    					{
										delay1ms();  
          								if(P0_1==0) 
										{goto rst;}
									}
								}
							}			
						}
					} 
					//弱洗模式//
					while(power==2)
					{ 
					    TR0=1;			//启动计时
						P2_3=1;
						P2_4=0;
						while((minite/5)>=1)    //弱洗 电机开
						{
							temp=P2_3;
							P2_3=P2_4;	 
							P2_4=temp;
						 }
					    while(minite==0)
						{
							TR0=0;
							P2_3=0;	  //关电机
							P2_4=0;
				  			empty=0; 
							P2_0=0;
							P2_1=0;
							P2_7=1;   //蜂鸣器发声
							while(1)
							{
								for(i=0;i<=200;i++)
								{
									P2_7=~P2_7;
									if(P1_0==0)
									{
										delay1ms();  
										if(P0_1==0) 
										{goto rst;}
									}
								}
							}				
						}			  
					}
				}
			} 
		}
	}	
	}
}
	 
//计时中断**********************************************************************
void t0(void) interrupt 1 using 0 
{ 
	tcnt++; 
	if(tcnt==4000) 
	{ 
		tcnt=0; 
		second++; 
		if(second==60) 
		{ 
			second=0;
			minite--; 
		} 	 
		dispbuf[0]=minite%10; 
		dispbuf[1]=minite/10;	 
	} 
} 
//数码管扫屏**********************************************************************
void t1(void) interrupt 3 using 0 
{  
	TH1=(65536-10000)/256; 
	TL1=(65536-10000)%256; 
	mstcnt++; 
	mstcnt=0;   
	P3=0xff;      //关闭所有显示
	P1=dispcode[dispbuf[dispbitcnt]]; 
	P3=dispbitcode[dispbitcnt]; 
	dispbitcnt++; 
	if(dispbitcnt==8) 
	{ 
		dispbitcnt=0; 
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -