📄 洗衣机源程序.c
字号:
/*全自动洗衣机程序清单*/
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/* LCD address*/
#define w_c_add XBYTE[0x2070]
#define w_d_add XBYTE[0x2071]
#define r_s_add XBYTE[0x2072]
#define r_d_add XBYTE[0x2073]
/*keybord address*/
#define COM XBYTE[0x2021]
#define DAT XBYTE[0x2020]
#define IN0 XBYTE[0x2030] /* 通道0地址 */
/*定义变量*/
static uchar idata ad[8]; /*定义数据存储区 */
uchar bdata status;
sbit busy=status^7;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p30=P3^0;
sbit p31=P3^1;
uint st=0;
uint dlbjdj; /*步进电机延时时间*/
uint key;
bit yes=1; /*倒计时标记位*/
uchar count;
/*控制字*/
uchar idata plus[10]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};
uchar idata minu[10]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x00};
/*显示数据*/
uchar idata number[]={0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x20,0x20,0x20,0x20,0x20,0x20};
uchar code welcom0[]="欢迎使用洗衣机! ";
uchar code welcom1[]="制作者 ";
uchar code welcom2[]=" ";
uchar code welcom3[]=" ";
uchar code menu[]= "主菜单 ";
uchar code menu0[]="请选择工作模式 ";
uchar code menu1[]="1 手动 2 自动 ";
uchar code shuiwei[]="请选择水位 ";
uchar code yiji[]="1 一级 ";
uchar code erji[]="2 二级 ";
uchar code sanji[]="3 返回 ";
uchar code water0[]="上水...... ";
uchar code water1[]="上水完毕 ";
uchar code water2[]="下水...... ";
uchar code water3[]="下水完毕 ";
uchar code xidi[]="剩余时间 秒 ";
uchar code tuoshui0[]="脱水.... ";
uchar code tuoshui1[]="脱水完毕 ";
uchar code jinpao0[]="浸泡..... ";
uchar code jinpao1[]="浸泡完毕 ";
uchar code piaoxicishu0[]="选择漂洗次数 ";
uchar code piaoxicishu1[]="1.一次 2.二次 ";
uchar code piaoxicishu2[]="3.返回 ";
uchar code shuaigan0[]="甩干...... ";
uchar code shuaigan1[]="甩干完毕 ";
uchar code zidong0[]="自动洗衣中....";
uchar code zidong1[]="自动洗衣完毕 ";
uchar code zidong2[]="欢迎下次使用 ";
uchar code handwash[]="自选工作菜单 ";
uchar code piaoxi0[]="漂洗.... ";
uchar code piaoxi1[]="漂洗完毕 ";
uchar code qiangxi0[]="强洗.... ";
uchar code qiangxi1[]="强洗完毕 ";
uchar code qingxi0[]="轻洗..... ";
uchar code qingxi1[]="轻洗完毕 ";
uchar code ruoxi0[]="弱洗...... ";
uchar code ruoxi1[]="弱洗完毕 ";
uchar code xidicaidan[]="洗涤强度菜单 ";
uchar code fangshi0[]="1 强轻弱 2轻弱 ";
uchar code fangshi1[]="3 返回 ";
uchar code space[]=" ";
uchar code list21[]="1 加水 2浸泡 ";
uchar code list22[]="3 洗涤 4漂洗 ";
uchar code list23[]="5 甩干 6返回 ";
/*子函数*/
void initial();
void run();
void Welcome();
void mainmenu();
void mainlyinterface();
void IntensitySelectMenu();
void washtime();
void choose();
void delay(uint n);
void dlms(uint n);
void ctrl(bit cf,uint n);
void lcd_busy(void);
void clear();
void display(uint m,uchar *p);
void display1(uchar time);
uint getkey(); /*键盘函数*/
uint ifkey(void);
void delay1(void);
void delaymm(void);
void adc0809 (uchar idata *x); /* ADC0809采样函数 */
void adc0809A(uchar idata *x);
void delay1() /*延时程序*/
{ int x=100000;
while(x--);
}
void T0_srv(void) interrupt 1 using 2 /*T0中断程序*/
{
TH0=-25000/256;
TL0=-25000%256;
count++;
if(count==10)
{count=0;
yes=1;
}
while(!p30);
}
void stop() interrupt 2 using 1
{
st=1;
}
void main() /*主程序入口*/
{
initial();
run();
}
/*单片机功能子函数*/
void initial() /*初始化*/
{ TH0=-25000/256;
TL0=-25000%256;
TMOD=0X01;
ET0=1;
TR0=1;
EA=1;
IT0=1;
EX0=1;
Welcome();
delay(2);
mainmenu();
}
void run() /*运行函数*/
{ uchar sum=0;
uint getkey1;
uint getkey2;
uint getkey3;
uint getkey4;
uint flag1=1;
uint flag2=1;
uint flag3=1;
uint flag4=1;
while(1)
{
while(INT0) {;}
key=getkey();
switch(key)
{
/*手动操作*/ case 1:{
clear();
mainlyinterface();
while(flag1)
{
getkey1=getkey();
switch(getkey1)
{
/*设定水位并上水*/ case 1:{
clear();
choose();
while(flag4)
{
getkey4=getkey();
switch(getkey4)
{
case 1:{
p31=0;
clear();
display(0x90,water0);
delay(2);
while(!p31) /*上水检验*/
{adc0809(ad);}
clear();
display(0x90,water1);
delay(2);
choose();
break;
}
case 2:{ p31=0;
clear();
display(0x90,water0);
delay(2);
while(!p31)
{adc0809(ad);}
delay(3);
clear();
display(0x90,water1);
delay(2);
choose();
break;
}
default:{ flag4=0;
mainlyinterface();
break;
}
}
}
}
/*浸泡选择*/ case 2:{
clear();
display(0x80,jinpao0);
while(sum<10)
{
display1(sum);
while(!yes);
yes=0;
sum++;
}
sum=0;
clear();
display(0x90,jinpao1);
delay(2);
clear();
mainlyinterface();
break;
}
/*选择洗涤强度*/ case 3:{
IntensitySelectMenu();
while(flag2)
{
getkey2=getkey();
switch(getkey2)
{
case 1:{
clear();
display(0x80,qiangxi0);/*显示强度*/
dlbjdj=40;
while(sum<10)
{
display1(sum); /*倒计时显示*/
while(!yes)
{ctrl(0,10);
ctrl(1,10);}
yes=0;
sum++;
}
sum=0;
clear();
display(0x90,qiangxi1);
delay(2);
clear();
sum=4;
display(0x80,qingxi0);
dlbjdj=55;
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,7);
ctrl(1,7);}
yes=0;
sum++;
}
sum=4;
clear();
display(0x90,qingxi1);
delay(2);
clear();
display(0x80,ruoxi0);
dlbjdj=70;
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,7);
ctrl(1,7);}
yes=0;
sum++;
}
sum=0;
clear();
display(0x90,ruoxi1);
delay(2);
clear();
IntensitySelectMenu();
break;
}
case 2:{ sum=4;
display(0x80,qingxi0);
dlbjdj=55;
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,7);
ctrl(1,7);}
yes=0;
sum++;
}
sum=4;
clear();
display(0x90,qingxi1);
delay(2);
clear();
display(0x80,ruoxi0);
dlbjdj=70;
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,6);
ctrl(1,6);}
yes=0;
sum++;
}
sum=4;
clear();
display(0x90,ruoxi1);
delay(2);
clear();
IntensitySelectMenu();
break;
}
default:{
flag2=0;
mainlyinterface();
break;
}
}
}
break;
}
/*选择漂洗次数*/ case 4:{
washtime();
while(flag3)
{getkey3=getkey();
delay(1);
switch(getkey3)
{
case 1:{
p31=0;
clear();
display(0x90,water0);
delay(3);
while(!p31)
{adc0809(ad);}
clear();
display(0x90,water1);
delay(3);
clear();
dlbjdj=50;
display(0x80,piaoxi0);
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,10);
ctrl(1,10);}
yes=0;
sum++;
}
sum=0;
clear();
display(0x90,piaoxi1);
delay(2);
clear();
p31=1;
display(0x80,water2);
while(p31)
{adc0809A(ad);}
p31=1;
clear();
display(0x80,water3);
delay(2);
mainlyinterface();
break;
}
/* case 2:{
p31=0;
clear();
display(0x90,water0);
delay(3);
while(!p31)
{adc0809(ad);}
clear();
display(0x90,water1);
delay(3);
clear();
dlbjdj=50;
display(0x80,piaoxi0);
while(sum<10)
{
display1(sum);
while(!yes)
{ctrl(0,10);
ctrl(1,10);}
yes=0;
sum++;
}
sum=0;
clear();
display(0x90,piaoxi1);
delay(2);
clear();
p31=1;
display(0x80,water2);
while(p31)
{adc0809A(ad);}
p31=1;
clear();
display(0x80,water3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -