單片機(jī)控制洗衣機(jī)C程序設(shè)計(jì)
#include
#define waterin P1_6
#define waterout P1_5
#define swim P1_7
bit flag;
char Count,t,waterinflag,wateroutflag,swimflag; // 用于中斷程序的計(jì)數(shù)
unsigned char second;
void Timeinit(void)
{
//秒表初始化
Count=0; t=0; second=0; flag=0;
// 開(kāi)定時(shí)器1,設(shè)定為工作方式2, 讓定時(shí)中斷時(shí)自動(dòng)加載定時(shí)的初值
IE=0x8a; //允許中斷,選中T0,T1中斷
TMOD=0x21; //定時(shí)器0,使用TR0啟動(dòng)方式,選中工作方式1,定時(shí)器1,使用TR1啟動(dòng)方式,工作方式2
TH1=0x06; //設(shè)置定時(shí)初值 256-250=6 (250us,要實(shí)現(xiàn)10ms就要40次)
TL1=0x06;
TR1=1;
}
//用T1定時(shí)的秒表中斷程序,工作方式2
void Miao(void) interrupt 3
{
Count++;
if(Count==40){
Count=0;
t++; //百分秒
if(t==100){
flag=1;
t=0;
if(second==10) second=0;
else second++;
}
}
}
void Initcover() { //蓋子的中斷程序
EA=1;
ET1=0;
EX1=1;
}
void coverinterrupt() interrupt 2 {
waterin=1;
waterout=1;
swim=1;
while (P3_3==0) ;
waterin=waterinflag;
waterout=wateroutflag;
swim=swimflag;
}
main() { //洗衣機(jī)工作過(guò)程
int i=0;
Initcover();
waterout=1;
wateroutflag=1;
swim=1;
swimflag=1;
P3_2=1;
if (P1_0==1) {
waterin=0;
waterinflag=0;
while(P3_2==1) {
waterin=1;
waterinflag=1;
for (i=0;i<10;i++) {
Timeinit();
while (second!=10) {
swim=0;
swimflag=0;
if(flag) {
flag=0;
P1=~(second*2);
waterin=waterinflag;
waterout=wateroutflag;
swim=swimflag;
}
}
P1=0xff;
waterin=waterinflag;
waterout=wateroutflag;
swim=swimflag;
Timeinit();
while (second!=3) {
swim=1;
swimflag=1;
if(flag) {
flag=0;
P1=~(second*2);
waterin=waterinflag;
waterout=wateroutflag;
swim=swimflag;
}
}
}
Timeinit();
while (second!=10 ) {
waterout=0;
wateroutflag=0;
if(flag) {
flag=0;
P1=~(second*2);
waterin=waterinflag;
waterout=wateroutflag;
swim=swimflag;
}
}
waterout=1;
wateroutflag=1;
}
}
}}