全自动洗衣机matlab仿真,单片机全自动洗衣机程序+仿真+原理图设计调试与分析...

#include

#define uchar unsigned char

#define uint unsigned int

uchar num=0,num1=0,num2=0,num3=0,num4=0,num5=0,num6=0,flag=0,flag1=0,flag4=0,flag5=0,circle=0;

sbit ledbiaozhun=P1^0; //LED指示灯

sbit ledjingji  =P1^1;

sbit leddandu   =P1^2;

sbit ledpaishui =P1^3;

sbit ledqiangxi =P1^4;

sbit ledruoxi   =P1^5;

sbit ledxidi    =P1^6;

sbit ledpiaoxi  =P1^7;

sbit ledtuoshui =P2^0;

sbit sshuiwei   =P3^6; //水位开关

sbit sgai       =P3^7; //盖开关

sbit paishui=P2^3; //排水阀控制

sbit jinshui=P2^2; //进水阀控制

sbit U2=P2^4;

sbit U3=P2^5;

sbit k1=P3^0;  // 步进改变"标准、经济、单独、排水"四种方式

sbit k2=P3^1;  //强洗、弱洗

sbit k3=P3^2;  //运行、暂停和解除报替功能

void init()

{

uchar a=0,b=0,c=0;

TMOD=0x01;                       //T0工作于方式1

TH0=(65536-50000)/256; //定时时间50ms

TL0=(65536-50000)%256;

EA=1;                                   //开总中断

ET0=1;                                   //开T0中断

TR0=0;                                   //关闭T0

EX0=1;                                   //开外部中断0

IT0=1;                                   //外部中断0边沿触发方式

U2=1;                                   //电机停转

U3=1;

P0=0xff;

}

void delayms(uint xms) //延时

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void key()                //控制按键

{

circle=1;

if(k1==0)                //标准、经济、单独、排水按下

{

delayms(10); //延时消抖

if(k1==0)         //再判

{

num++;         //K1按下次数加1

if(num==4)

num=0;        //等于4,按下次数清0

while(!k1);        //等待按键释放

}

}

if(k2==0)                                //强弱选择

{

delayms(10);   //延时消抖

if(k2==0)           //再判

{

num1++;         //按下次数加1

if(num1==2)

num1=0;        //等于2,按下次数清0

while(!k2);        //等待按键释放

}

}

}

void qiang()                          //强

{

if(flag4==0)  //电机正转

{

U2=0;

U3=1;

}

if(flag4==1)  //电机反转

{

U2=1;

U3=0;

}

}

void ruo()                        //弱

{

if(flag5==0) //电机正转

{

U2=0;

U3=1;

}

if(flag5==1) //电机反转

{

U2=1;

U3=0;

}

}

void qbiaozhun()                        //强标准

{

/*******洗涤********/

num=0;

num1=0;

ledbiaozhun=0;//标准洗LED亮

ledqiangxi=0; //强洗LED亮

jinshui=0;          //打开进水阀

ledxidi=1;    //洗涤

ledpiaoxi=1;  //漂洗LED亮

ledtuoshui=1; //脱水LED亮

delayms(5000);//水位监测

jinshui=1; //关闭进水阀

ledxidi=0;

flag1=1;        //

TR0=1;            //启动定时器T0

while(flag==0)//flag为洗涤次数标志位

{

if(flag==0&&num2==1)

{

TR0=1;

flag1=1; //

qiang();

}

if(flag==0&&num2==2)

{

TR0=0; //关闭定时器T0

U2=1;  //电机停止

U3=1;

}

};

//漂洗

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0; //排水

ledtuoshui=1;

ledpiaoxi=1;

ledxidi=1;

delayms(5000);

paishui=1;        //关闭排水

delayms(100);

jinshui=0;        //打开进水

delayms(5000);

jinshui=1;         //关闭进水

ledpiaoxi=0;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==1)

{

if(flag==1&&num2==1)//强漂洗

{

TR0=1;

flag1=2;

qiang();

}

if(flag==1&&num2==2)//暂停强漂洗

{

TR0=0;

U2=1;

U3=1;

}

};

//漂洗

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0;

ledtuoshui=1;

ledpiaoxi=0;

delayms(5000);

paishui=1;

delayms(100);

jinshui=0;

delayms(5000);

jinshui=1;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==2)

{

if(flag==2&&num2==1)

{

TR0=1;

flag1=2;

qiang();

}

if(flag==2&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

}        ;

//脱水

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0;//打开排水

ledtuoshui=0;

ledpiaoxi=1;

while(sgai);

paishui=1;

delayms(1000);

flag1=3;

TR0=1;

num3=0;

num4=0;

while(flag==3)

{

if(flag==3&&num2==1)

{

TR0=1;

U2=0;

U3=1;

flag1=3;

}

if(flag==3&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

ledtuoshui=1;

U2=1;

U3=1;

flag1=0;

}

void qjingji()                        //强经济

{

/*******洗涤********/

num=0;

num1=0;

ledjingji=0;

ledqiangxi=0;

ledtuoshui=1;

ledpiaoxi=1;

ledxidi=1;

jinshui=0;

delayms(5000);

jinshui=1;

flag1=1; //控制定时器中的洗涤指示灯

TR0=1;

while(flag==0)

{

if(flag==0&&num2==1)

{

TR0=1;

flag1=1;

qiang();

}

if(flag==0&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

//漂洗

TR0=0;

U2=1;

U3=1;

flag1=0;

paishui=0;

ledjingji=0;

ledtuoshui=1;

ledxidi=1;

delayms(5000);

paishui=1;

delayms(100);

jinshui=0;

delayms(5000);

jinshui=1;

ledpiaoxi=0;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==1)

{

if(flag==1&&num2==1)

{

TR0=1;

flag1=2;

qiang();

}

if(flag==1&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

//脱水

TR0=0;

U2=1;

U3=1;

flag1=0;

paishui=0;         //打开排水

ledjingji=0;

ledtuoshui=0;

ledpiaoxi=1;

delayms(5000);

while(sgai);

paishui=1;

delayms(1000);

flag1=3;

TR0=1;

flag=2;

num3=0;

num4=0;

while(flag==2)

{

if(flag==2&&num2==1)

{

TR0=1;

U2=0;

U3=1;

flag1=3;

}

if(flag==2&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

ledtuoshui=1;

U2=1;

U3=1;

flag1=0;

}

void qdandu()               //强单独

{

num=0;

num1=0;

ledqiangxi=0;

ledxidi=0;

leddandu=0;

jinshui=0;

delayms(5000);

jinshui=1;//关闭进水阀

flag1=1;

TR0=1;

while(flag==0)

{

if(flag==0&&num2==1)

{

TR0=1;

flag1=1;

qiang();

}

if(flag==0&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

flag1=0;

U2=1;

U3=1;

}

void rbiaozhun()                        //弱标准

{

/*******洗涤********/

num=0;

num1=0;

ledbiaozhun=0;

ledruoxi=0;

ledtuoshui=1;

ledpiaoxi=1;

jinshui=0;

delayms(5000);

jinshui=1;

ledxidi=0;

flag1=1;

TR0=1;

while(flag==0)

{

if(flag==0&&num2==1)

{

TR0=1;

flag1=1;

ruo();

}

if(flag==0&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

//漂洗

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0;

ledtuoshui=1;

ledxidi=1;

delayms(5000);

paishui=1;

delayms(100);

jinshui=0;

delayms(5000);

jinshui=1;

ledpiaoxi=0;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==1)

{

if(flag==1&&num2==1)

{

TR0=1;

flag1=2;

ruo();

}

if(flag==1&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

//漂洗

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0;

ledtuoshui=1;

ledpiaoxi=0;

delayms(5000);

paishui=1;

delayms(100);

jinshui=0;

delayms(5000);

jinshui=1;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==2)

{

if(flag==2&&num2==1)

{

TR0=1;

flag1=2;

ruo();

}

if(flag==2&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

}

//脱水

U2=1;

U3=1;

TR0=0;

flag1=0;

paishui=0;

delayms(5000);

ledtuoshui=0;

ledpiaoxi=1;

while(sgai);

paishui=1;

delayms(1000);

flag1=3;

TR0=1;

num3=0;

num4=0;

while(flag==3)

{

if(flag==3&&num2==1)

{

TR0=1;

U2=0;

U3=1;

flag1=3;

}

if(flag==3&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

ledtuoshui=1;

U2=1;

U3=1;

flag1=0;

}

void rjingji()                        //弱经济

{

/*******洗涤********/

num=0;

num1=0;

ledjingji=0;

ledruoxi=0;

ledtuoshui=1;

ledpiaoxi=1;

ledxidi=1;

jinshui=0;

delayms(5000);

jinshui=1;         //打开进水阀,进水

flag1=1;

TR0=1;

while(flag==0)

{

if(flag==0&&num2==1) //弱经济洗

{

TR0=1;

flag1=1;

ruo();

}

if(flag==0&&num2==2) //弱经济洗暂停

{

TR0=0;

U2=1;

U3=1;

}

};

//漂洗

TR0=0;

U2=1;

U3=1;

flag1=0;

paishui=0;        //排水阀打开

ledjingji=0;

ledtuoshui=1;

ledxidi=1;

delayms(5000);

paishui=1; //排水阀关闭

delayms(100);

jinshui=0; //进水阀打开

delayms(5000);

jinshui=1; //进水阀关闭

ledpiaoxi=0;

flag1=2;

TR0=1;

num3=0;

num4=0;

while(flag==1)

{

if(flag==1&&num2==1)//漂洗

{

TR0=1;

flag1=2;

ruo();

}

if(flag==1&&num2==2)//漂洗暂停

{

TR0=0;

U2=1;

U3=1;

}

};

//脱水

TR0=0;

U2=1;

U3=1;

flag1=0;

ledjingji=0;

ledtuoshui=0;

ledpiaoxi=1;

paishui=0;         //排水阀打开

delayms(5000);

while(sgai);

paishui=1;

delayms(3000);

flag1=3;

TR0=1;

num3=0;

num4=0;

while(flag==2)

{

if(flag==2&&num2==1)

{

TR0=1;

U2=0;

U3=1;

flag1=3;

}

if(flag==2&&num2==2)

{

TR0=0;

U2=1;

U3=1;

}

};

ledtuoshui=1;

U2=1;

U3=1;

flag1=0;

}

void rdandu()               //弱单独

{

num=0;

num1=0;

ledruoxi=0;

ledxidi=0;

leddandu=0;

jinshui=0;  //打开进水阀,进水

delayms(5000);

jinshui=1;

flag1=1;

TR0=1;            //启动定时器T0

while(flag==0)

{

if(flag==0&&num2==1)  //弱单独洗

{

TR0=1;

flag1=1;

ruo();

}

if(flag==0&&num2==2)//弱单独洗暂停

{

TR0=0;

U2=1;

U3=1;

}

};

flag1=0;

U2=1;

U3=1;

}

void dpaishui()                                 //排水/脱水

{

num=0;

num1=0;

ledpaishui=0;

ledtuoshui=0;

jinshui=1;

paishui=0;

delayms(3000);

while(sgai);

delayms(3000);

flag1=3;

TR0=1;

num3=0;

num4=0;

while(flag==0)

{

if(flag==0&&num2==1) //脱水

{

TR0=1;

flag1=3;

U2=0;

U3=1;

}

if(flag==0&&num2==2)//暂停脱水

{

TR0=0;

U2=1;

U3=1;

}

};

U2=1;

U3=1;

flag1=0;

ledtuoshui=1;

paishui=1; 排水阀关闭

}

void main()

{

init();

while(1)

{

key();                   //键扫描

if((num1==0&&num==0)&&circle==1)        //标准 强洗

{

ledruoxi=1;   //关闭弱洗LED

ledpaishui=1; //关闭排水LED

ledbiaozhun=0;//强标准LED亮

ledqiangxi=0; //强洗LED亮

if(num2==1)

{

qbiaozhun(); //强标准洗

}

if(num2>1)                 //K3键按下次数为2,暂停洗涤

{

;

}

circle=0;

}

if(num1==0&&num==1)         //经济 强洗

{

ledruoxi=1;

ledbiaozhun=1;

ledqiangxi=0;

ledjingji=0;

if(num2==1)

{

qjingji();        //强经济洗

ledjingji=1;

}

circle=0;

}

if(num1==0&&num==2)         //单独 强洗

{

ledruoxi=1;

ledjingji=1;

ledqiangxi=0;

leddandu=0;

if(num2==1)

{

qdandu(); //强单独洗

leddandu=1;

}

circle=0;

}

if(num1==0&&num==3)

{

ledruoxi=1;          //排水 强洗

leddandu=1;

ledqiangxi=0;

ledpaishui=0;

if(num2==1)

{

dpaishui();        //单排水

ledpaishui=1;

}

circle=0;

}

if(num1==1&&num==0)          //弱 标准

{

ledqiangxi=1;

ledpaishui=1;

ledruoxi=0;

ledbiaozhun=0;

if(num2==1)

{

rbiaozhun(); //弱标准洗

ledruoxi=1;

}

circle=0;

}

if(num1==1&&num==1)         //弱经济

{

ledqiangxi=1;

ledbiaozhun=1;

ledruoxi=0;

ledjingji=0;

if(num2==1)

{

rjingji();        //弱经济洗

ledruoxi=1;

ledjingji=1;

}

circle=0;

}

if(num1==1&&num==2)

{

ledqiangxi=1;

ledjingji=1;

ledruoxi=0;

leddandu=0;

if(num2==1)

{

rdandu();        //弱单独洗

ledruoxi=1;

leddandu=1;

}

circle=0;

}

if(num1==1&&num==3)

{

ledqiangxi=1;

leddandu=1;

ledruoxi=0;

ledpaishui=0;

if(num2==1)        //K3键

{

dpaishui();         //单排水

ledpaishui=1;

}

circle=0;

}

num2=0;

}

}

void T0_time() interrupt 1           //定时

{

TH0=(65536-50000)/256;        //重赋初值

TL0=(65536-50000)%256;

num3++;                                    //定时计数加1

if(num3==20)        //1秒时间到

{

num3=0;                //计数清0

if(flag1==1)

ledxidi=~ledxidi;  //洗涤指示取反

if(flag1==2)

ledpiaoxi=~ledpiaoxi; //漂洗指示取反

if(flag1==3)

ledtuoshui=~ledtuoshui;        //脱水指示取反

num4++;

num5++;

num6++;

if(num4==15)         //洗涤定时,15秒到

{

num4=0;                         //清0

flag++;                 //标志洗涤次数

}

if(num5==5)                         //强洗周期,5秒到

{

num5=0;

flag4++;         //强洗标志加1

if(flag4==2)

flag4=0;

}

if(num6==3)                        //弱洗周期        ,3秒到

{

num6=0;

flag5++;            //弱洗标志加1

if(flag5==2)

flag5=0;

}

}

}

void int0() interrupt 0           //外部中断0 ,K3键

{

num2++;          //K3按下计数加1 ,num2为1运行,num2为2暂停

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

你可能感兴趣的:(全自动洗衣机matlab仿真)