設(shè)計(jì)一個(gè)全自動(dòng)洗衣機(jī)控制器,洗滌時(shí)間為10-30分,可預(yù)置,并顯示時(shí)間一分。
洗滌時(shí)按進(jìn)水-洗滌-放水-脫水順序工作,洗滌三次后結(jié)束,并聲音提示。
洗滌時(shí)間分配:第一次為總預(yù)置時(shí)間的1/2,第二次為總時(shí)間的1/3,第三次為總時(shí)間1/6。
洗滌時(shí)分正反轉(zhuǎn)交替工作。
it k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit smg1=P2^0;//數(shù)碼管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit smg5=P2^4;
sbit smg6=P2^5;
sbit beep=P1^0;//蜂鳴器
sbit out1=P1^6;
sbit out2=P1^7;
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9,無(wú)小數(shù)點(diǎn)
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//顯示0~9,有小數(shù)點(diǎn)
uchar time=0,mode=0;//系統(tǒng)變量
uchar fen=10,miao=0,set=10;//計(jì)時(shí)
uchar flag=0,sec=0;//方向控制
uchar beep_time=0;
uchar cishu=0,biaozhi=0;//計(jì)數(shù)
//加水20s,放水20s,甩干30s
//延時(shí)函數(shù)
void delay(uint i)
{
while(i--);
}
//主函數(shù)
void main()
{
uchar k=0;
P3=0xfb;
TMOD|=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時(shí)器
while(1)
{
//顯示
if(mode==0)//設(shè)置模式
{
P0=smgduan0[set/10];smg3=0;delay(50);smg3=1;
P0=smgduan0[set%10];smg4=0;delay(50);smg4=1;
}
else//洗衣模式
{
P0=smgduan0[cishu];smg1=0;delay(50);smg1=1;
P0=smgduan0[fen/10];smg3=0;delay(50);smg3=1;
P0=smgduan1[fen%10];smg4=0;delay(50);smg4=1;
P0=smgduan0[miao/10];smg5=0;delay(50);smg5=1;
P0=smgduan0[miao%10];smg6=0;delay(50);smg6=1;
}
//按鍵檢測(cè)
if(mode==0)
{
if(!k1 &&(k!=1))//加
{
k=1;
if(set<30)
set++;
}
if(!k2 &&(k!=2))//減
{
k=2;
if(set>10)
set--;
}
}
if(!k3 &&(k!=3))//開始
{
k=3;
mode=1;
TR0=1;
fen=set;
miao=0;
}
if(!k4 &&(k!=4))//暫停
{
k=4;
TR0=!TR0;
P3=0xfd;
}
if(!k5 &&(k!=5))//停止
{
k=5;
TR0=0;
mode=0;
P3=0xfb;
cishu=0;
beep_time=0;
}
if(k1 && k2 && k3 && k4 && k5)
{
k=0;
}
}
}
//定時(shí)器0中斷
void Timer0() interrupt 1
{
uint i,j;
if(mode==1)
{
if(time<19)//1s
time++;
else
{
time=0;
if(miao>0)//秒計(jì)時(shí)
miao--;
else
{
if(fen>0)//計(jì)時(shí)
{
miao=59;
fen--;
}
else
{
mode=3;//結(jié)束
}
}
i=fen*60+miao;
j=set*60;
//加水
if((i>j-20)||((i<j/2)&&(i>j/2-20))||((i<j/6)&&(i>j/6-20)))
{
P3=0xf7;
out1=1;
out2=1;
if(biaozhi==0)
{
biaozhi=1;
cishu++;
}
}
資料借鑒于此紛傳
閱讀全文