?? wm1.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 + -