洗衣机c语言程序

使用说明:
a.先选择“强“”弱”-----按“选择”键切换灯到到“强”,再按“增加、确定”键
b.洗衣时间定时-----切换到洗衣时间,在按“增加、确定”键或“减少”键,OK后切换
到脱水时间,同样设定脱水时间和洗涤次数。
设定好后,切换到准备,按“增加、确定”键开始工作。
开始工作时,P2.0的灯亮(其实是代替电子水龙头的“开”),
这时候等待水满,这里我是手动给他一个高电平(点FULL的逻辑开关),这时开始洗衣,
洗衣时间减到0时,次数减1,再洗(洗衣时间恢复,---即洗衣时间是指每次的洗衣时间,
不是总的时间)
当次数减到0时P2.1的灯亮(其实是代替电子水龙头的“关”),
这时候等待水放完,这里我再手动给他一个高电平(点empty的逻辑开关),这时开始脱水,
电机启动,等到脱水时间减到0时,p2.7的灯亮(灯是代替喇叭的),等待下一次洗衣。
按“启动”键,系统复位。开始下一次洗衣的设定。
******************************************************************************/
#include
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[2]={0,0};
unsigned char dispbitcnt;

unsigned char second;
unsigned char minite;
unsigned int tcnt;
unsigned char mstcnt;
unsigned char i,j;

sbit full=P2^5;
sbit empty=P2^6;
unsigned char temp;

unsigned char startok;

unsigned char ID;
unsigned char keye;
unsigned char ready;

unsigned char uwtime;
unsigned char hwtime;
unsigned char count;
char utime;
char htime;
char cnt;

unsigned char strong;
unsigned char weak;
unsigned char power;

//延时1ms子程序****************************************************************
void delay1ms(void)
{
unsigned char i,j;
for(i=2;i>0;i--)
for(j=248;j>0;j--);
}
//延时200ms子程序****************************************************************
void delay02s(void)
{
unsigned char i;
for(i=200;i>0;i--)
{
delay1ms();
}
}
void main(void)
{
rst:TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR1=1;
ET0=1;
TH1=0x06;
TL1=0x06;
ET1=1;
EA=1;
P0_5=0;
P0_6=0;
P0_7=0;
P2=0;

startok=0;
ID=0;
keye=1;
ready=0;

uwtime=0;
hwtime=0;
count=0;

utime=0;
htime=0;
c

nt=0;

strong=0;
weak=0;
power=0;

while(1)
{
//洗衣模式选择//
if(keye==1)
{
if(P0_0==0)
{
delay1ms();
//选择键功能//
if(P0_0==0)
{
ID++;
if(ID==6)
{
ID=0;
}
while(P0_0==1);
}
switch(ID)
{
case 0:
ready=1;
strong=0;
weak=0;
hwtime=0;
uwtime=0;
count=0;
dispbuf[0]=10;
dispbuf[1]=10;
P0_5=0;
P0_6=0;
P0_7=0;
delay02s();
break;
case 1: //strong; 强洗
strong=1;
weak=0;
hwtime=0;
uwtime=0;
count=0;
dispbuf[0]=power%10;
dispbuf[1]=power/10;
P0_5=0;
P0_6=0;
P0_7=1;
delay02s();
break;
case 2: //weak; 弱洗
strong=0;
weak=1;
hwtime=0;
uwtime=0;
count=0;
dispbuf[0]=power%10;
dispbuf[1]=power/10;
P0_5=0;
P0_6=1;
P0_7=0;
delay02s();
break;
case 3: //hwtime; 洗衣时间
strong=0;
weak=0;
hwtime=1;
uwtime=0;
count=0;
dispbuf[0]=htime%10;
dispbuf[1]=htime/10;
P0_5=0;
P0_6=1;
P0_7=1;
delay02s();
break;
case 4: // uwtime; 脱水时间
strong=0;
weak=0;
hwtime=0;
uwtime=1;
count=0;
dispbuf[0]=utime%10;
dispbuf[1]=utime/10;
P0_5=1;
P0_6=0;
P0_7=0;
delay02s();
break;
case 5: //count; 洗

涤次数
strong=0;
weak=0;
hwtime=0;
uwtime=0;
count=1;
dispbuf[0]=cnt%10;
dispbuf[1]=cnt/10;
P0_5=1;
P0_6=0;
P0_7=1;
delay02s();
break;
}
}
//启动键功能//
if(P0_1==0) //启动
{
delay1ms();
if(P0_1==0)
{
if(ready==1) //准备OK
{
startok=1;
}
}
}
//加 -- 确定键功能//
if(P0_2==0)
{
delay1ms();
if(P0_2==0)
{
if(strong==1) //strong__强洗
{
power=1;
dispbuf[0]=power%10;
dispbuf[1]=power/10;
}
if(weak==1) //weak__弱洗
{
power=2;
dispbuf[0]=power%10;
dispbuf[1]=power/10;
}
if(hwtime==1) //hwtime__洗衣时间
{
delay02s();
htime++;
dispbuf[0]=htime%10;
dispbuf[1]=htime/10;
}
if(uwtime==1) //uwtime__脱水时间
{
delay02s();
utime++;
dispbuf[0]=utime%10;
dispbuf[1]=utime/10;
}
if(count==1) //count__洗涤次数
{
delay02s();
cnt++;
dispbuf[0]=cnt%10;
dispbuf[1]=cnt/10;
}
}
}
//减键功能//
if(P0_3==0)
{
delay1ms();
if(P0_3==0)
{
if(strong==1) //strong__强洗
{}
if(weak==1) //weak__弱洗
{}
if(hwtime==1) //hwtime__洗衣时间
{
delay02s();
htime--;
dispbuf[0]=htime%10;
dispbuf[1]=htime/10;
}
if(uwtime==1) //uwtime__脱水时间
{
delay02s();
utime--;

dispbuf[0]=utime%10;
dispbuf[1]=utime/10;
}
if(count==1) //count__洗涤次数
{
delay02s();
cnt--;
dispbuf[0]=cnt%10;
dispbuf[1]=cnt/10;
}
}
}
}
//确认执行洗衣//
st:while(startok==1)
{
keye=0;
P2_0=1; //进水水龙头开
ready=0;
strong=0;
weak=0;
hwtime=0;
uwtime=0;
count=0;
while(full==1) //水满
{
P0_5=1;
P0_6=1;
P0_7=0;
P2_0=0; //进水水龙头关
minite=htime;
TR0=1; //启动计时
while(minite!=0)
{}
TR0=0;
while(1)
{
P2_1=1; //出水水龙头开
full=0;
while(empty==1)
{
empty=0;
P2_1=0; //出水水龙头关
cnt--;
while(cnt!=0)
{goto st;}
P0_5=1;
P0_6=1;
P0_7=1;
minite=utime;
//强洗模式//
while(power==1)
{
TR0=1; //启动计时
P2_3=1; //强洗 电机开
P2_4=0;
while(minite==0)
{
TR0=0;
P2_3=0; //关电机
P2_0=0;
P2_1=0;
P2_7=1; //蜂鸣器发声
while(1)
{
for(i=0;i<=200;i++)
{
P2_7=~P2_7;
if(P1_0==0)
{
delay1ms();
if(P0_1==0)
{goto rst;}
}
}
}
}
}
//弱洗模式//
while(power==2)
{
TR0=1; //启动计时
P2_3=1;

P2_4=0;
while((minite/5)>=1) //弱洗 电机开
{
temp=P2_3;
P2_3=P2_4;
P2_4=temp;
}
while(minite==0)
{
TR0=0;
P2_3=0; //关电机
P2_4=0;
empty=0;
P2_0=0;
P2_1=0;
P2_7=1; //蜂鸣器发声
while(1)
{
for(i=0;i<=200;i++)
{
P2_7=~P2_7;
if(P1_0==0)
{
delay1ms();
if(P0_1==0)
{goto rst;}
}
}
}
}
}
}
}
}
}
}
}

//计时中断**********************************************************************
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
if(second==60)
{
second=0;
minite--;
}
dispbuf[0]=minite%10;
dispbuf[1]=minite/10;
}
}
//数码管扫屏**********************************************************************
void t1(void) interrupt 3 using 0
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
mstcnt++;
mstcnt=0;
P3=0xff; //关闭所有显示
P1=dispcode[dispbuf[dispbitcnt]];
P3=dispbitcode[dispbitcnt];
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
}

相关文档
最新文档