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

📄 wm1.c

📁 洗衣机控制器的程序及编译文件CCCCC(C语言)
💻 C
字号:
/**********************************************************************
///////////////////////////////////////////////////////////////////////\
//////////////////////////////////////////////////////////////////////	\
///////////////////////洗衣机控制器程序//////////////////////////////	 \
////////////////////////////////////////////////////////////////////	  \
//////////作者:杜洋///////////////////http://doyoung.net//////////		   \
//////////////////////////////////////////////////////////////////	 口口	\
//////////测试版 V1.01-C51/////////////////////2007/02/05////////    口口    \
////////////////////////////////////////////////////////////////			  \
===============================================================|--------------|
///////////////////////////////////////////////////////////////|//////////////|
///////////////////////////////////////////////////////////////|//////////////|
/////修改志////////////////////////////////////////////////////|//////////////|
///////////////////////////////////////////////////////////////|//////////////|
///////////////////////////////////////////////////////////////|//////////////|
//2007/02/07//00:15//完成编写并进行调试(V1.01完成)//////////|//////////////|
//2007/02/05//21:08//编写程序大纲和驱动程序///////////////////|//////////////|
///////////////////////////////////////////////////////////////|//////////////|
---------------------------------------------------------------|--------------|
******************************************************************************/

/*****************************************************************************/
//初始定义//

//宏定义
#include <REG52.h>
#define  uchar unsigned char//语法定义
#define  uint  unsigned int //

//引脚定义//
sbit	led		=	P1 ^ 0;//LED指示灯(蓝) __
sbit	beep	=	P2 ^ 6;//扬声器 __
sbit	j1		=	P2 ^ 3;//继电器1 ++ 
sbit	j2		=	P2 ^ 1;//继电器2 ++
sbit	r1		=	P3 ^ 7;//无线键盘1 ++
sbit	r2		=	P3 ^ 6;//无线键盘2 ++
sbit	r3		=	P3 ^ 5;//无线键盘3 ++
sbit	r4		=	P3 ^ 4;//无线键盘4 ++
sbit	rn		=	P3 ^ 2;//无线键盘N(中断) ++

//寄存器定义//
uchar	time=0,force=0,config=0;//定义时间、强度和设置变量
uchar	t0_con,t0_con1,t0_con2;//T0计时器内部累加
uchar	led_con;//用于LED指示的标记	
uchar	keys;//定义键盘输入值
/*****************************************************************************/
//延时程序//
void delay(uint a){//延时限制在1 < a < 65535 ms//
	unsigned char i;
	while( --a != 0){
		for(i = 0; i < 125; i++);
	}
}
/*****************************************************************************/
//LED指示灯驱动程序//
void led_on(void){//LED长亮,不工作时状态//
	led		=	0;
	led_con	=	0;	
}
void led_1s(void){//LED每秒闪烁,用于定时等待状态//
	led_con	=	1;	
}
void led_50ms(void){//LED每50ms闪烁,用于电机运行中//
	led_con	=	2;	
}
//void led_off(void){//LED关//
//	led		=	1;	
//}
/*****************************************************************************/
//扬声器驱动程序//
void beep_off(void){//beep不响,无键值//
	beep	=	1;	
}
void beep_on(void){//beep长响//
	beep	=	0;	
}
void beep_s1(void){//beep单响一声//
	beep_on();
	delay(250);
	beep_off();	
}
void beep_s2(void){//beep连响2声//
	beep_s1();
	delay(100);
	beep_s1();	
}
void beep_2s(void){//beep2秒长响,洗衣开始//
	beep_on();
	delay(1000);
	beep_off();			
}
void beep_call(void){//beep长响8声,洗衣结束//
	uchar i;
	for(i = 0; i < 5; i++){
		beep_2s();
		delay(250);
	}			
}
/*****************************************************************************/
//无线键值处理程序(扫描)//
void key_init(void){//键盘初始化程序//
	keys	=	0;
}
void key_rxd(void){//键盘处理程序//
	key_init();
	if(rn == 1){//查看是否有键被按下
		delay(10);//延时去干扰
		if(rn == 1){
			if(r1 == 1 && r2 == r3 == r4 == 0){keys = 1;}//查找键值并放入寄存器
			if(r2 == 1 && r1 == r3 == r4 == 0){keys = 2;}
			if(r3 == 1 && r1 == r2 == r4 == 0){keys = 3;}
			if(r4 == 1 && r1 == r2 == r3 == 0){keys = 4;}
		}
	}
	while(rn == 1){//按键是否松开
	}
}
/*****************************************************************************/
//断电器控制程序//
void jj_off(void){//继电器关,不工作//
	j1	=	0;
	j2	=	0;
	delay(800);
}
void j1_on(void){//继电器1开,正转//
	j1	=	1;
	j2	=	0;
}
void j2_on(void){//继电器2开,反转//
	j1	=	0;
	j2	=	1;
}
void jj_run(uchar i){//继电器关,不工作//
	uchar	a;
	j1_on();
	a	=	i;
	while(a > 0) {
		delay(800);//基数是1s
		a--;
	}
	jj_off();
	j2_on();
	a	=	i;
	while(a > 0) {
		delay(800);//基数是1s
		a--;
	}
	jj_off();		
}
/*****************************************************************************/
//时间发生程序(计数器中断T0)//
void t0_init (void) {//T0定时器初始化//
	TH0		=	0x3c;//载入初值 50ms(12MHZ)
 	TL0		=	0xb0;
	TMOD	=	0x01;//定时计数器0工作方式1
	ET0		=	1;//开定时器中断
	TR0		=	1;//启动定时器
	EA		=	1;//开总中断
	t0_con	=	20;//1s
	t0_con1	=	0;
	t0_con2	=	0;//
}
void t0 (void) interrupt 1 using 1{//定时器中断处理程序//
	TH0		=	0x3c;//载入初值
	TL0		=	0xb0;
	t0_con--;//到50ms计数减1
	if(led_con == 2){//使用50ms闪烁的LED
		led	=	~led;
	}
	if(t0_con <= 0){//到1s的处理 
		t0_con	=	20;
		if(led_con == 1){//使用1s闪烁的LED
			led	=	~led;
		}
		t0_con1++;
		if(t0_con1 >= 60){//到1分钟的处理
			t0_con1	=	0;
			t0_con2++;//到1分钟计数加1
		}							
	}			
} 
/*****************************************************************************/
//洗涤程序//
void washing (void){//洗涤程序
	led_50ms();//洗衣时的LED状态
	jj_run(force);//根据强度运行
	key_rxd();
	if(keys == 2){//运行时按B键复位
		uchar	b;
		b	=	t0_con2;//等待时将时间值寄存
		led_1s();//等待状态
		beep_s1();//响1声
		while(keys != 1){key_rxd();}//再按A继续
		t0_con2	=	b;//放回时间值
		beep_s1();//响1声
	}
	if(keys == 4){t0_con2 = 250;}//运行时按D键复位			
}

void wait (uchar u){//3分钟的初洗和浸泡时间//
	beep_2s();//长响1声
	t0_init ();//计时器重新开始工作
	while(t0_con2 <= 3){//开始洗衣
		washing();//开始洗涤
	}
	t0_init ();//计时器重新开始工作
	while(t0_con2 <= u){//延时N分钟
		led_1s();//每秒闪一次,表示定时状态
	}
}

void wash (void){//正式洗衣程序//
	beep_s2();//长响1声
	t0_init ();//计时器重新开始工作
	while(time	>=	t0_con2){//开始洗衣
		washing();
	}
}		
/*****************************************************************************/
//开机初始化程序//
void init (void){
	jj_off();
	led_on();//LED长亮,等待键入
	beep_2s();//	
	key_init();	
}
/*****************************************************************************/
//主程序//
void main (void){
while(1){//大循环,当洗衣结束后重新开始//
	init ();//开机初始化
	
	while(keys == 0){key_rxd();}//设置强度//
	beep_s1();//响1声
	force	=	keys;
	key_init();
	while(keys == 0){key_rxd();}//设置时间//
	beep_s2();//响2声
	time	=	(keys*5);
	key_init();
	while(keys == 0){key_rxd();}//设置方式//
	beep_2s();//长响1声
	config	=	keys;
	key_init();	
	
	if(config == 1){//3分钟初洗+延时浸泡15分钟 (A键)
		wait (15);	
	}
	if(config == 2){//3分钟初洗+延时浸泡30分钟 (B键)
		wait (30);		
	}
	if(config == 3){//延时浸泡15分钟 (C键)
		t0_init ();//
		while(t0_con2	<=	15){//延时60分钟
			led_1s();//每秒闪一次,表示定时状态
		}		
	}
	wash ();//开始洗涤	
	beep_call();//洗衣结束音
}	     
}

/******************************************************************************
程序说明:
			您好!			

洗衣机使用说明--设置说明


冷启动或复位后顺序按三次键,其功能设置如下:


NO.1 强度设置
---------------------------------------------
	A:柔和
	B:低
	C:中
	D:高


NO.2 时间设置
---------------------------------------------
	A:5分钟
	B:10分钟
	C:15分钟
	D:20分钟


NO.3 方式设置
---------------------------------------------
	A:3分钟初洗-->15分钟浸泡-->洗涤-->结束
	B:3分钟初洗-->30分钟浸泡-->洗涤-->结束
	C:15分钟浸泡-->洗涤-->结束
	D:洗涤-->结束


=============================================

洗涤时的操作
---------------------------------------------
	长按 B 键:暂停洗涤
	长按 A 键:继续洗涤(暂停时有效)
	长按 D 键:结束并复位程序
	

提示音说明
---------------------------------------------
	短鸣1次:强度设置完成
	短鸣2次:时间设置完成
	长鸣1次:冷启动/方式设置完成/开始洗涤
	长鸣6次:洗涤结束


指示灯说明
---------------------------------------------
	长亮:冷启动/等待输入/洗涤结束
	慢闪(每秒):浸泡
	快闪(每1/4秒):洗涤



******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//////////////本程序由DoYoung.net所有,未经作者同意请勿篡改或转载//////////////
///////////////////////////////////////////////////////////////////////////////
//////////////http://doyoung.net///////////////////////2007/02/05//////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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