单片机自动洗衣机程序.docx
《单片机自动洗衣机程序.docx》由会员分享,可在线阅读,更多相关《单片机自动洗衣机程序.docx(28页珍藏版)》请在冰点文库上搜索。
单片机自动洗衣机程序
#include
#defineWrite_Data1
#defineWrite_Command0
unsignedcharcodetable[]={"BZJJDDPSJSXDPXTSQR"};
unsignedcharsc,minc,park,park1,h,min,s,ms5,sound,p,X,Y,Z,Key_temp,mino,mint,ho,ht,i,jj,sct,sco,minct,minco,t[4],ts,st,so;
unsignedcharKey_process();
voidrun1();
voidrun2();
voidrun3();
voidrun4();
voidshow();
voidbegin();
voidp_trevise();
voiddelay(unsignedintn);
sbitE=P3^3;//液晶使能端(E)
sbitRW=P3^5;//液晶读写选择端(RW)
sbitRS=P3^6;//液晶数据指令选择端(RS)
sbitp26=P2^6;sbitp10=P1^0;sbitp11=P1^1;sbitp12=P1^2;sbitp13=P1^3;
voidCheck_Busy(void)
{
P0=0xff;//P0口作为输入
delay
(1);
RS=0;
RW=1;
E=1;
delay
(1);
while(P0&0X80);
E=0;
RW=0;
P0=0X00;
}
voidWrite_Lcd(bitCom_Data,unsignedcharDat)
{
Check_Busy();
if(Com_Data)//若为写数据指令
RS=1;
else
RS=0;
RW=0;
P0=Dat;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidInit_Lcd(void)//初始化
{
E=0;
RW=0;
RS=0;
Write_Lcd(Write_Command,0x38);//设置16x2显示,5x7点阵,8位数据接口
Write_Lcd(Write_Command,0x0c);//开显示,不显示光标
Write_Lcd(Write_Command,0x06);//地址指针加1,且光标加1,整屏显示不移动
Write_Lcd(Write_Command,0x01);//清屏
}
voidmain()
{
Write_Lcd(Write_Command,0x01);
EA=1;//开总中断
ET0=1;//开内部中断0
TMOD=0x11;
TH0=0xe1;//计数器0高八位
TL0=0x48;//计数器0低八位
TR0=1;
sound=0;
X=0;//默认为标准状态
Y=0;//默认为强洗
Z=0;//默认为高水位
Init_Lcd();
while
(1)
{
Write_Lcd(Write_Command,0x80+0x40);
Write_Lcd(Write_Data,ht+48);//小时高位
Write_Lcd(Write_Data,ho+48);//小时低位
Write_Lcd(Write_Data,10+48);//冒号
Write_Lcd(Write_Data,mint+48);//分钟高位
Write_Lcd(Write_Data,mino+48);//分钟低位
Write_Lcd(Write_Data,10+48);//冒号
Write_Lcd(Write_Data,st+48);//秒高位
Write_Lcd(Write_Data,so+48);//秒低位
Key_temp=Key_process();//键扫描
switch(Key_temp)
{
case0:
begin();break;
case4:
begin();break;
case8:
begin();break;
case12:
begin();break;
case1:
Y=1;break;
case5:
Z=1;break;
case6:
begin();break;
case15:
p_trevise();break;//设置北京时间
default:
break;
}
}
}
voidbegin()
{X=Key_temp
switch(X)
{
case0:
run1();break;//转到标准洗衣程序
case4:
run2();break;//转到经济洗衣程序
case8:
run3();break;//转到单独洗衣程序
case12:
run4();break;//转到排水洗衣程序
default:
break;
}
}
voiddelay(unsignedintn)//延时函数
{
unsignedchari,j;
j=100;
j=n*j;
for(i=0;i}
voidShow_Lcd1()//标准
{
unsignedchari;
Write_Lcd(Write_Command,0x80);
for(i=0;i<2;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd2()//经济
{
unsignedchari;
Write_Lcd(Write_Command,0x80);
for(i=2;i<4;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd3()//单独
{
unsignedchari;
Write_Lcd(Write_Command,0x80);
for(i=4;i<6;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd4()//排水
{
unsignedchari;
Write_Lcd(Write_Command,0x84);
for(i=6;i<8;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd41()//洗衣程序里的排水
{
unsignedchari;
Write_Lcd(Write_Command,0x80);
for(i=6;i<8;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd5()//进水
{
unsignedchari;
Write_Lcd(Write_Command,0x84);
for(i=8;i<10;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd6()//洗涤
{
unsignedchari;
Write_Lcd(Write_Command,0x84);
for(i=10;i<12;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd7()//漂洗
{
unsignedchari;
Write_Lcd(Write_Command,0x84);
for(i=12;i<14;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd8()//脱水
{
unsignedchari;
Write_Lcd(Write_Command,0x84);
for(i=14;i<16;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd9()//强洗
{
unsignedchari;
Write_Lcd(Write_Command,0x87);
for(i=16;i<17;i++)
Write_Lcd(Write_Data,table[i]);
}
voidShow_Lcd10()//弱洗
{
unsignedchari;
Write_Lcd(Write_Command,0x87);
for(i=17;i<18;i++)
Write_Lcd(Write_Data,table[i]);
}
unsignedcharKey_process()//键盘扫描程序
{
staticunsignedcharKey_temp=0xff;
unsignedchartemp;
P1&=0xf0;//P1口低四位作为数字输入时应往相应引脚写0
P2&=0xf0;//置列扫描信号为0
temp=P1&0x0f;
Key_temp=0xff;
if(temp!
=0x0f)//P1口低四位不全为1,则有键被按下11110000
{
delay
(1);//延时消抖
if(temp==(P1&0x0f))//消抖后再判断键值
{
P2|=0x07;//P2.3为0
switch(P1&0x0f)
{
case0x0e:
Key_temp=0;break;
case0x0d:
Key_temp=4;break;
case0x0b:
Key_temp=8;break;
case0x07:
Key_temp=12;break;
}
while(p11==0||p10==0||p12==0||p13==0);
P2&=0xf0;
P2|=0x0b;//P2.2为0
switch(P1&0x0f)
{
case0x0e:
Key_temp=1;break;
case0x0d:
Key_temp=5;break;
case0x0b:
Key_temp=9;break;
case0x07:
Key_temp=13;break;
}
while(p11==0||p10==0||p12==0||p13==0);
P2&=0xf0;
P2|=0x0d;//P2.1为0
switch(P1&0x0f)
{
case0x0e:
Key_temp=2;break;
case0x0d:
Key_temp=6;break;
case0x0b:
Key_temp=10;break;
case0x07:
Key_temp=14;break;
}
while(p11==0||p10==0||p12==0||p13==0);
P2&=0xf0;
P2|=0x0e;//P2.0为0
switch(P1&0x0f)
{
case0x0e:
Key_temp=3;break;
case0x0d:
Key_temp=7;break;
case0x0b:
Key_temp=11;break;
case0x07:
Key_temp=15;break;
}
while(p11==0||p10==0||p12==0||p13==0);
}
}
returnKey_temp;
}
voidrun1()
{
EA=1;//开总中断
ET0=1;//开内部中断0
TMOD=0x11;
TH0=0xe1;//计数器0高八位
TL0=0x48;//计数器0低八位
TR0=1;
sound=0;
Show_Lcd1();
if(Y==1)
Show_Lcd10();
else
Show_Lcd9();
while
(1)
{
if(Z==1)
{
minc=21;
sc=0;
while
(1)
{
show();//显示北京时间
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=1;
jj=2;
while(jj);
sound=0;break;
}
switch(minc)
{
case20:
Show_Lcd5();break;
case19:
Show_Lcd6();break;
case14:
Show_Lcd4();break;
case13:
Show_Lcd5();break;
case12:
Show_Lcd7();break;
case8:
Show_Lcd4();break;
case7:
Show_Lcd5();break;
case6:
Show_Lcd7();break;
case2:
Show_Lcd4();break;
case1:
Show_Lcd8();break;
}
if(minc==0&&sc==0)
{
Write_Lcd(Write_Command,0x01);
sound=1;
jj=2;
while(jj);
sound=0;
main();
}
}
}
else
{
minc=27;
sc=0;
while
(1)
{
show();
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=1;
jj=2;
while(jj);
sound=0;break;
}
switch(minc)
{
case26:
Show_Lcd5();break;
case25:
Show_Lcd6();break;
case19:
Show_Lcd4();break;
case17:
Show_Lcd5();break;
case15:
Show_Lcd7();break;
case11:
Show_Lcd4();break;
case9:
Show_Lcd5();break;
case7:
Show_Lcd7();break;
case3:
Show_Lcd4();break;
case1:
Show_Lcd8();break;
}
if(minc==0&&sc==0)
{
Write_Lcd(Write_Command,0x01);
sound=1;
jj=2;
while(jj);
sound=0;
main();
}
}
}
}
}
voidrun2()
{
EA=1;//开总中断
ET0=1;//开内部中断0
TMOD=0x11;
TH0=0xe1;//计数器0高八位
TL0=0x48;//计数器0低八位
TR0=1;
sound=0;
Show_Lcd2();
if(Y==1)
Show_Lcd10();
else
Show_Lcd9();
while
(1)
{
if(Z==1)
{
minc=15;
sc=0;
while
(1)
{
show();
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=1;
jj=2;
while(jj);
sound=0;break;
}
switch(minc)
{
case14:
Show_Lcd5();break;
case13:
Show_Lcd6();break;
case8:
Show_Lcd4();break;
case7:
Show_Lcd5();break;
case6:
Show_Lcd7();break;
case2:
Show_Lcd4();break;
case1:
Show_Lcd8();break;
}
if(minc==0&&sc==0)
{
Write_Lcd(Write_Command,0x01);
sound=1;
jj=2;
while(jj);
sound=0;
main();
}
}
}
else
{
minc=19;
sc=0;
while
(1)
{
show();
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=1;
jj=2;
while(jj);
sound=0;break;
}
switch(minc)
{
case18:
Show_Lcd5();break;
case16:
Show_Lcd6();break;
case11:
Show_Lcd4();break;
case9:
Show_Lcd5();break;
case7:
Show_Lcd7();break;
case3:
Show_Lcd4();break;
case1:
Show_Lcd8();break;
}
if(minc==0&&sc==0)
{
Write_Lcd(Write_Command,0x01);
sound=1;
jj=2;
while(jj);
sound=0;
main();
}
}
}
}
}
voidrun3()
{
EA=1;//开总中断
ET0=1;//开内部中断0
TMOD=0x11;
TH0=0xe1;//计数器0高八位
TL0=0x48;//计数器0低八位
TR0=1;
sound=0;
Show_Lcd3();
if(Y==1)
Show_Lcd10();
else
Show_Lcd9();
while
(1)
{
if(Z==1)
{
minc=6;
sc=0;
while
(1)
{
show();
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=1;
jj=2;
while(jj);
sound=0;break;
}
switch(minc)
{
case5:
Show_Lcd5();break;
case4:
Show_Lcd6();break;
}
if(minc==0&&sc==0)
{
Write_Lcd(Write_Command,0x01);
sound=1;
jj=2;
while(jj);
sound=0;
main();
}
}
}
else
{
minc=7;
sc=0;
while
(1)
{
show();
Key_temp=Key_process();
switch(Key_temp)
{
case9:
park=!
park;break;
case13:
main();break;
case2:
park1=!
park1;
sound=