全自动洗衣机单片机c语言程序,全自动洗衣机单片机程序

该博客介绍了一个基于单片机的洗衣机控制系统的设计,包括电机控制、按键输入、LED状态显示、进水、洗衣、泡洗、脱水等各个阶段的程序实现,并通过中断服务定时器处理时间计数和流程控制。系统还设有报警和电源控制功能,实现了洗衣机的自动化操作流程。
摘要由CSDN通过智能技术生成

#include

#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(); }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值