久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機全自動洗衣機程序與Proteus仿真圖
[打印本頁]
作者:
JN0717
時間:
2022-5-13 17:14
標題:
51單片機全自動洗衣機程序與Proteus仿真圖
51單片機全自動洗衣機仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(106 KB, 下載次數: 60)
下載附件
2022-5-14 01:42 上傳
單片機源程序如下:
#include<reg52.h>
#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暫停
if(num2==3)
num2=1;
}
復制代碼
Keil5代碼與Proteus8.8仿真下載:
51單片機全自動洗衣機.zip
(323.04 KB, 下載次數: 89)
2022-5-13 17:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一本一道久久a久久精品综合蜜臀
|
japanhdxxxx裸体
|
av入口
|
成人午夜在线视频
|
欧美成人激情视频
|
日韩欧美在线一区
|
欧美精品在线播放
|
欧美v在线观看
|
午夜激情免费
|
久草资源在线
|
国产一级免费在线观看
|
免费同性女女aaa免费网站
|
亚洲精品国产精品国自产在线
|
亚洲成人午夜在线
|
日韩中文在线视频
|
国产一区视频在线
|
欧美激情一区二区三区
|
亚洲自拍偷拍免费视频
|
成人免费观看男女羞羞视频
|
国产免费播放视频
|
欧美日韩久久久
|
日韩美女一区二区三区在线观看
|
毛片高清
|
成人影院在线视频
|
美女黄视频网站
|
91观看
|
99精品久久久久久中文字幕
|
久久久精品综合
|
日本三级在线视频
|
国产在线精品一区二区三区
|
欧美激情区
|
国产免费看
|
欧美精品一区二区三区四区五区
|
91一区二区三区
|
女女百合av大片一区二区三区九县
|
国内精品伊人久久久久网站
|
a级免费观看视频
|
一区二区三区免费看
|
中文字幕亚洲视频
|
久久在线看
|
国产一区二区三区在线看
|