?? 洗衣機源程序.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]; /*定義數(shù)據(jù)存儲區(qū) */
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};
/*顯示數(shù)據(jù)*/
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[]="選擇漂洗次數(shù) ";
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返回 ";
/*子函數(shù)*/
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(); /*鍵盤函數(shù)*/
uint ifkey(void);
void delay1(void);
void delaymm(void);
void adc0809 (uchar idata *x); /* ADC0809采樣函數(shù) */
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();
}
/*單片機功能子函數(shù)*/
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() /*運行函數(shù)*/
{ 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;
}
/*選擇漂洗次數(shù)*/ 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 + -