51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
洗衣机控制器程序
作者:佚名  发布时间:2007/10/19  阅读次数:1371  字体大小: 【】 【】【


#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秒):洗涤

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号