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

📄 3_25.c

📁 基于89C51的全自动洗衣机控制系统,Keil+Protues,全部源码及仿真。
💻 C
字号:
/***************************头文件***********************/
#include 	<reg51.h>
/************************数据类型宏定义******************/
#define 	uchar	unsigned char
#define		uint	unsigned int
/***********************使能、禁止宏定义*****************/
#define		Enable();	EA=1;
#define		Disable();	EA=0;
/********************程序选择功能标志宏定义**************/
#define		BIAOZHUN		0
#define		JINGJI			1
#define		DANDU			2
#define		PAISHUI			3
/********************强弱选择功能标志宏定义**************/
#define		QIANGXI			0
#define		RUOXI			1	
/*******************进水、排水时间限制宏定义*************/
#define		T_JinShui		5		//4min*60s
#define		T_PaiShui		60		//1min*60s
/*************************管脚定义***********************/
//都是低有效,因LED是灌电流,而PNP也是低电平时导通
sbit	LED_BiaoZhun	=	P1^0;	//标准程序显示灯
sbit	LED_JingJi		=	P1^1;	//经济程序显示灯
sbit	LED_DanDu		=	P1^2;	//单独程序显示灯
sbit	LED_PaiShui		=	P1^3;	//排水程序显示灯
sbit	LED_QiangXi		=	P1^4;	//强洗状态灯
sbit	LED_RuoXi		=	P1^5;	//弱洗状态灯
sbit	LED_XiDi		=	P1^6;	//洗涤状态灯
sbit	LED_PiaoXi		=	P1^7;	//漂洗状态灯
sbit	LED_TuoShui		=	P2^0;	//脱水状态灯
sbit	PIN_BaoJing		=	P2^1;	//报警喇叭
sbit	PIN_JinShui		=	P2^2;	//进水控制
sbit	PIN_PaiShui		=	P2^3;	//排谁控制
sbit	PIN_Motor_A		=	P2^4;	//电机脚A
sbit	PIN_Motor_B		=	P2^5;	//电机脚B
sbit	K_SEL_ChengXu	=	P3^0;	//选择程序键
sbit	K_SEL_QiangRuo	=	P3^1;	//选择强弱键
sbit	p32				=	P3^2;	//
sbit	p33				=	P3^3;	//
sbit	SW_AnQuan		=	P3^6;	//安全开关,水位、盖
/*************************数据定义***********************/
uchar	flag_SEL_ChengXu;			//默认为标准程序,			
bit		flag_SEl_QiangRuo;			//默认为强洗,1为弱洗
bit		flag_Run;					//运行标志,1为运行
bit		flag_ZanTing;				//暂停标志,1为暂停
bit		flag_JinShui;				//进水标志,1为进水
bit		flag_PaiShui;				//排水标志,1为排水
bit		flag_XiDi;					//置洗涤标志
bit		flag_PiaoXi;				//置漂洗标志
bit		flag_TuoShui;				//脱水标志
bit		flag_BaoJing;				//报警标志
uchar 	_50ms;						//每50ms加一次的变量
uint	s;							//秒
uint	T_S;						//定时总时间/*************************延时程序*********************/
void Delay(uchar t1,uchar t2)	
{	for(;t1;t1--)
		for(;t2;t2--);
}
/**********************管脚初始化程序******************/
void Pin_Init(void)					
{	LED_BiaoZhun	=	0;			//默认为标准程序,灯亮
 	LED_JingJi		=	1;			//经济程序显示灯,灭
 	LED_DanDu		=	1;			//单独程序显示灯,灭
 	LED_PaiShui		=	1;			//排水程序显示灯,灭
 	LED_QiangXi		=	0;			//默认为强洗状态,灯亮
 	LED_RuoXi		=	1;			//弱洗状态灯,灭
 	LED_XiDi		=	1;			//洗涤状态灯,运行后灯亮
 	LED_PiaoXi		=	1;			//漂洗状态灯,运行后灯亮
 	LED_TuoShui		=	1;			//脱水状态灯,运行后灯亮
 	PIN_BaoJing		=	1;			//报警喇叭,不叫
 	PIN_JinShui		=	1;			//进水控制,关
 	PIN_PaiShui		=	1;			//排谁控制,关
 	PIN_Motor_A		=	1;			//电机脚A,不走
 	PIN_Motor_B		=	1;			//电机脚B,不走
}
/********************中断初始化程序********************/
void ExInt_Init(void)				
{	IT0	=	1;
	EX0	=	1;
	IT1	=	1;
	EX1	=	1;
}
/*******************定时器0初始化程序******************/
void Timer0_Init(void)				
{	TMOD 	=	TMOD | 0X01;		//定时方式1
	TH0		=	0X3C;				//50ms
	TL0		=	0XB0;
	ET0		=	1;	
	TR0		= 	1;
}
/*******************定时器1初始化程序******************/
void Timer1_Init(void)				
{	TMOD 	=	TMOD | 0X10;		//定时方式1
	TH1		=	0X3C;				//50ms
	TL1		=	0XB0;
	ET1		=	1;	
	TR1		= 	1;
}
/**************外部中断0程序为运行或者暂停*************/
void int0(void) interrupt 0			
{	static bit flag_FirstInt0 = 1;
	if(!p32)
	{	Delay(8,250);				//延时10ms左右,去抖动
		if(!p32)
		{	if(flag_FirstInt0)
			{	flag_FirstInt0 = 0;	//清第一次进中断0标志
				flag_Run 	   = 1;	//置运行标志
			}//end if(flag_FirstInt0)
			else
			{
			}//end else
		}//end if(!p32) 2
	}//end if(!p32) 1
}
/*******************定时器0中断程序********************/
void Timer0(void) interrupt 1		
{	
	ET0 = 0;						//关定时器0
	TH0 = 0X3C;						//重装定时器值
	TL0 = 0XB0;
	ET0 = 1;
	_50ms++;	
	if(_50ms == 20)					//1s到
	{	_50ms = 0;
		s++;
	}//end if(_50ms == 20)		
}//end Timer0()
/**********外部中断1程序为水位到或者盖开处理***********/
void int1(void) interrupt 2			
{	if(!p33)
	{	Delay(8,250);					//延时10ms左右,去抖动
		if(!p33)
		{	
		}//end if(!p33) 2
	}//end if(!p33) 1
}
/***************定时器1中断程序作为闪烁****************/
void Timer1(void) interrupt 3		
{	static uchar 	_50ms;				//每50ms加一次的变量
	ET1 = 0;							//关定时器0
	TH1 = 0X3C;							//重装定时器值
	TL1 = 0XB0;
	ET1 = 1;
	_50ms++;
	if(_50ms == 14)						//0.7s到
	{	_50ms = 0;
		if(flag_XiDi)					//洗涤中~
			LED_XiDi 	= ~LED_XiDi;	//洗涤状态灯闪烁
		if(flag_PiaoXi)					//漂洗中~
			LED_PiaoXi 	= ~LED_PiaoXi;	//漂洗状态灯闪烁
		if(flag_TuoShui)				//脱水中~
			LED_TuoShui = ~LED_TuoShui;	//脱水状态灯闪烁
 	}//end if(_50ms == 14)	
}
/**********************程序选择程序********************/
void SEL_ChengXU(void)			
{	if(!K_SEL_ChengXu)					//程序选择键
	{	Delay(10,250);					//延时10ms左右,去抖动
		if(!K_SEL_ChengXu)
		{	while(!K_SEL_ChengXu);
			flag_SEL_ChengXu++;
			if(flag_SEL_ChengXu==4)
				flag_SEL_ChengXu = 0;
			switch(flag_SEL_ChengXu)
			{	case BIAOZHUN	:	LED_BiaoZhun= 0;		//亮
									LED_JingJi	= 1;		//灭
									LED_DanDu	= 1;		//灭
									LED_PaiShui	= 1;		//灭
									break;
				case JINGJI		:	LED_BiaoZhun= 1;
									LED_JingJi	= 0;	
									LED_DanDu	= 1;
									LED_PaiShui	= 1;
									break;
				case DANDU		:	LED_BiaoZhun= 1;
									LED_JingJi	= 1;	
									LED_DanDu	= 0;
									LED_PaiShui	= 1;
									break;
				case PAISHUI 	:	LED_BiaoZhun= 1;
									LED_JingJi	= 1;	
									LED_DanDu	= 1;
									LED_PaiShui	= 0;
									break;
				default			:	break;
		   }//end switch	
		}//end if(!K_Sel_ChengXu) 2
	}//end if(!K_Sel_ChengXu) 1	
}//END
/********************强弱选择程序**********************/
void SEL_QiangRuo(void)					
{	if(!K_SEL_QiangRuo)							//强弱选择键
	{	Delay(10,250);							//延时10ms左右,去抖动
		if(!K_SEL_QiangRuo)
		{	while(!K_SEL_QiangRuo);
			flag_SEl_QiangRuo = ~flag_SEl_QiangRuo;
			if(!flag_SEl_QiangRuo)	
			{	LED_QiangXi	= 0;				//强洗状态,灯亮
				LED_RuoXi	= 1;				//弱洗状态灯,灭
			}//end if(!flag_SEl_QiangRuo)			
			else
			{	LED_QiangXi	= 1;				//强洗状态,灯亮
				LED_RuoXi	= 0;				//弱洗状态灯,灭
			}//end else
		}//end if(!K_SEL_QiangRuo) 2
	}//end if(!K_SEL_QiangRuo) 1
}
/**********************进水程序***********************/
void JinShui(void)
{
}
/**********************排水程序***********************/
void PaiShui(void)
{
}
/**********************洗涤程序***********************/
void XiDi(void)
{
}
/**********************漂洗程序***********************/
void PiaoXi(void)
{
}
/***********************脱水程序**********************/
void TuoShui(void)
{
}
/********************标准洗衣程序*********************/
void Programme_BiaoZhun(void)
{	JInShui();
	XiDi();
	PaiShui();
	Jinshui();
	PiaoXi();
	Paishui();
}
/********************经济洗衣程序*********************/
void Programme_JingJi(void)
{
}
/********************单独洗衣程序*********************/
void Programme_DanDu(void)
{
}
/********************排水洗衣程序*********************/
void Programme_PaiShui(void)
{
}
/************************主程序************************/
void main()							
{	static bit flag_FirstRun = 1;
	Pin_Init();							//管脚初始化
	ExInt_Init();						//外中断初始化
	Enable();							//开总中断
	while(1)
	{	if(!flag_Run)					//运行前按键才有效
		{	SEL_ChengXU();				//程序选择程序					
			SEL_QiangRuo();				//强弱选择程序																	
	  	}//end if(!flag_Run)
		else
		{	if(flag_FirstRun)
			{	flag_FirstRun = 0;
				switch(flag_SEL_ChengXu)
				{	case BIAOZHUN	:	Programme_BiaoZhun();			//标准洗衣程序
										LED_XiDi	= 0;	//洗涤状态灯亮
								 		LED_PiaoXi	= 0;	//漂洗状态灯亮
									 	LED_TuoShui	= 0;	//脱水状态灯亮
										break;
					case JINGJI		:	Programme_JingJi();			//经济洗衣程序
										LED_XiDi	= 0;	//洗涤状态灯亮
								 		LED_PiaoXi	= 0;	//漂洗状态灯亮
									 	LED_TuoShui	= 0;	//脱水状态灯亮
										break;
					case DANDU		:	Programme_DanDu();			//单独洗衣程序
										LED_XiDi	= 0;	//洗涤状态灯
								 		LED_PiaoXi	= 1;	//漂洗状态灯
									 	LED_TuoShui	= 1;	//脱水状态灯亮
										break;
					case PAISHUI 	:	Programme_PaiShui();			//排水洗衣程序
										LED_XiDi	= 1;	//洗涤状态灯
								 		LED_PiaoXi	= 1;	//漂洗状态灯
									 	LED_TuoShui	= 0;	//脱水状态灯亮
										break;
					default			:	break;
			   }//end switch
		 	}//end if(flag_FirstRun)
		}//end esle
	}//end while
}//end main

⌨️ 快捷键说明

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