找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9412|回复: 16
收起左侧

全自动洗衣机单片机程序

  [复制链接]
ID:98321 发表于 2015-12-4 18:52 | 显示全部楼层 |阅读模式
#include<reg51.h>  
#define uchar unsigned char
#define uint unsigned int

sbit mo_r = P3^2;     //电机右控制线
sbit mo_l = P3^3;     //电机左控制线
sbit key_menu = P3^4; // 菜单按键
sbit key_on = P3^5;   // 开始按键
sbit key_off = P3^6;  //   结束按键
sbit key_se = P3^7;   //  菜单选择按键

sbit led_in = P2^0;   // 进水指示灯  
sbit led_xi = P2^1;   //  洗衣指示灯  
sbit led_pao = P2^2;  // 泡洗指示灯
sbit led_xx = P2^3;   //  脱水指示灯

sbit led_out = P2^4;  //   出水指示灯
sbit led_over = P2^5; // 洗衣结束指示灯
sbit led_work = P2^6; // 电机工作指示灯
sbit led_wring = P2^7;// 报警指示灯
sbit other = P3^1;    //  脱水电源控制开关
sbit anther = P3^0;  // 洗衣电源控制开关
uchar  code  num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

char sec = 0;    //  时间秒
char min = 0;     // 时间分
uchar count=0;     //  中断计数  
uchar flag0=0;    //  洗衣机工作状态标志
uchar flag1=0;    //  进水次数标志
uchar flag2=0;    //  出水次数标志
uchar flag3=0;    //   泡洗次数标志  
uchar err =0;    // 报警标志
uchar quan = 0;//正反转计数

//  函数声明 //


void in(); //   进水子程序
void out();  //   出水子程序
void over();  //  结束子程序
void xi();  //   洗衣子程序
void pao(); //  泡衣子程序
void xx(); // 脱水子程序
void on(); //  工作on处理子程序
void se(); //  显示菜单选择
void SEG_display();  //显示时间子程序
void key_scan();   //  按键扫描子程序  

//     延时函数  //
void mDelay(unsigned int Delay) //延时程序
{   
     unsigned int i;
      for(;Delay>0;Delay--)      
      {       for(i=0; i<54; i++)  ;     
      }
}

//    工作on处理子程序 //

void on()
{   TMOD=0x01;   
    TH0=(65536-50000)/256;  
    TL0=(65536-50000)%256;  
    EA=1;  ET0=1;  TR0=1;   
    P2 = 0xff;  
    if(flag0 == 0)      in();  
    if(flag0 == 1)      xi();  
    if(flag0 == 2)      pao();
    if(flag0 == 3)      xx();  
    if(flag0 == 4)      out();
}


//    结束子程序 //
void over()
{ other=0;  anther=0;  P2 = 0xff;  
  mo_r=0;  mo_l=0;  led_over = 0;  EA=0;   }

//    进水子程序  //*********************************//
void in()
{ anther=0;  other=0;  P2 = 0xff;  led_in = 0;  flag1++;  
  mo_r = 0;  mo_l = 0;  min = 0;  sec = 8;  }  

//   洗衣子程序//
void xi()
{  anther=1;    other=0;      
    P0 = 0xff;   led_work = 0;    led_xi = 0;
    mo_r = 1;   mo_l = 0;   min = 1;   
    sec = 36;   quan = 0;  }



//    泡衣子程序 //
void pao()
{      
anther=1;  other=0;  P2 = 0xff;  led_pao = 0;  led_work = 0;  
flag3++;  mo_r = 1;  mo_l = 0;  min = 1;  sec = 35;   quan = 0;
}  



//   脱水子程序  //*********************************//
void xx()
{ other=1;  anther=0;  P2 = 0xff;  led_xx = 0;  mo_r = 0;  mo_l = 1;  min = 0;  sec = 50;  }  
//    出水子程序 //*********************************//

void out()
{ anther=0;  other=0;  P2 = 0xff;   led_out = 0;
flag2++;  mo_r = 0;  mo_l = 0;  min = 0;  sec = 5;  }  


//    显示菜单选择 //
void se()
{  P2 = 0xff;  if(flag0 >= 5)    flag0 = 0;   
   if(flag0 == 0)  {   led_in = 0;   }   
   if(flag0 == 1)  {   led_xi=0;     }
   if(flag0 == 2)  {   led_pao=0;    }   
   if(flag0 == 3)  {   led_xx=0;     }   
   if(flag0 == 4)  {   led_out=0;    }
}  



//    菜单处理子程序 //
void menu()
{      min = 0;  sec = 0;  mo_r=0;   mo_l=0;
       SEG_display();        
       while(1)   
        {      if(key_on == 0)   
                  { mDelay(5);   
                    if(key_on == 0)   
                      {  while(!key_on);     
                         on(); break;     
                      }   
                  }
               if(key_off == 0)   
                  { mDelay(5);   
                    if(key_off == 0)   
                     {  while(!key_off);        
                        over(); break;     
                     }     
                  }
               if(key_se == 0)   
                  { mDelay(5);   
                    if(key_se == 0)   
                     { while(!key_se);   
                       flag0++;  se();      
                     }   
                  }      
        }  
}


//      按键扫描子程序//
void key_scan()
{    if(key_menu == 0)
        {  mDelay(5);   
            if(key_menu == 0)   
              { while(!key_menu); menu();   
              }   
        }  
     if(key_on == 0)  
        {  mDelay(5);   
            if(key_on == 0)   
              { while(!key_on); on();   
              }   
        }
     if(key_off == 0)  
        {  mDelay(5);
            if(key_off == 0)   
              { while(!key_off); over();   
              }   
        }  
}

// 显示子程序 //
void SEG_display()
{  P1=0x01;  P0 = num[min/10]; mDelay(10);  
   P1=0x02;  P0 = num[min%10]; mDelay(10);  
   P1=0x04;  P0 = num[sec/10]; mDelay(10);  
   P1=0x08;  P0 = num[sec%10]; mDelay(10);  
}  //*********************************//

//       主函数 //
void main()
{  led_in=0;  anther=0;  other=0;
   while(1)  
     { SEG_display(); key_scan(); }
}  

//     定时器0中断处理程序//
void timer0() interrupt 1
{  TH0=(65536-50000)/256;  
   TL0=(65536-50000)%256;   count++;      
   if(count==20)  
    { count = 0;   sec--;   
      if((flag0==1)||(flag0==2))   
        {  quan++;  
           switch(quan)     
             { case 1 :mo_r=1;mo_l=0;break;     
               case 10:mo_r=0;mo_l=0;break;     
               case 15:mo_r=0;mo_l=1;break;     
               case 25:mo_r=0;mo_l=0;break; default:;      
             }      
           if(quan==30)     
             { quan=0; }     
        }  

      if((sec == 0)&&(min != 0))   
        {  min--; sec = 59; }  

      if((sec<0)&&(min==0)&&(flag0==0))  //进水结束   
        {  switch(flag1)   
             { case 1:flag0=1;xi();break;     
               case 2:flag0=2;pao();break;     
               case 3:flag0=2;pao();break;     
               case 4:flag0=2;pao();break;     
               default: err=1;led_wring = 0;      
             }      
        }

      if((sec<0)&&(min==0)&&(flag0==1))   //洗衣结束   
        {  flag0 = 4; out();  }  

      if((sec<0)&&(min==0)&&(flag0==2))   //泡衣结束   
        {  switch(flag3)     
             { case 1:flag0=4;out();break;     
               case 2:flag0=4;out();break;     
               case 3:flag0=4;out();break;     
               default: err=1;led_wring = 0;      
             }     
        }  

      if((sec<0)&&(min==0)&&(flag0==4))  //出水结束   
        {  switch(flag2)        
             { case 1:flag0=0;in();break;     
               case 2:flag0=0;in();break;     
               case 3:flag0=0;in();break;        
               case 4:flag0=3;xx();break;      
               default: err= 1;led_wring = 0;      
             }     
        }   

      if((sec<0)&&(min==0)&&(flag0==3))   
        {  sec = 0;     over(); }   
     }  
}

















评分

参与人数 3黑币 +55 收起 理由
123453. + 5
我不是我 + 5 共享资料的黑币奖励!我现在在做,学习下
admin + 45 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2015-12-4 18:56 来自手机 | 显示全部楼层
非常好谢谢分享,楼主能提供一下原理图吗?
回复

使用道具 举报

ID:154667 发表于 2016-12-14 13:08 | 显示全部楼层
太厉害饿了 感谢哦
回复

使用道具 举报

ID:154667 发表于 2016-12-14 13:09 | 显示全部楼层
太感谢了
回复

使用道具 举报

ID:154667 发表于 2016-12-14 21:08 | 显示全部楼层
原理图和仿真图有么
回复

使用道具 举报

ID:154866 发表于 2016-12-14 22:43 | 显示全部楼层
感谢分享啊
回复

使用道具 举报

ID:154916 发表于 2016-12-15 09:46 | 显示全部楼层
太厉害了哈!楼主 如果能附上原理图就更好了哈1
回复

使用道具 举报

ID:75745 发表于 2016-12-15 17:35 | 显示全部楼层
话说我们毕业设计有这一到题
回复

使用道具 举报

ID:209487 发表于 2017-6-9 11:58 | 显示全部楼层
很好的程序
回复

使用道具 举报

ID:209487 发表于 2017-6-9 11:58 | 显示全部楼层
很好的
回复

使用道具 举报

ID:89286 发表于 2017-6-9 19:10 | 显示全部楼层
thanks for sharing
回复

使用道具 举报

ID:67838 发表于 2017-6-23 14:52 | 显示全部楼层
非常好谢谢分享,楼主能提供一下原理图吗?
回复

使用道具 举报

ID:67838 发表于 2017-9-16 21:29 | 显示全部楼层
谢谢分享,楼主能提供一下原理图吗?
回复

使用道具 举报

ID:67838 发表于 2019-9-24 20:26 | 显示全部楼层
楼主能提供一下原理图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表