📄 9.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint flag1;
uint ID,ID1,ID2,ID3;
uchar a,b,c;
sbit P_chu=P2^6;
sbit P_jin=P2^7;
sbit dianji_Z=P1^6;
sbit dianji_F=P1^7;
sbit P_bee =P3^4;
sbit P_hsw=P3^5;
sbit P_msw=P3^6;
sbit P_lsw=P3^7;
sbit key1_0=P1^0;
sbit key1_1=P1^1;
sbit ready=P1^2;
sbit key1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P2_7=P2^7;
sbit P2_6=P2^6;
sbit P2_5=P2^5;
sbit P2_4=P2^4;
sbit P2_3=P2^3;
sbit P2_2=P2^2;
sbit P2_1=P2^1;
sbit P2_0=P2^0;
code char led[]={0x88,0xeb,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90,0xff}; //0到10的数组led
//******************* 蜂鸣器响五次 ***********//
void delay1(uchar t)
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<t;j++);
}
void delay2(uchar t)
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<t;j++);
}
void speak()
{
uchar k,i;
int m;
for(i=0;i<5;i++)
{
k=0;
k++;
for(m=0;m<500;m++)
{
P_bee=0;
delay1(3);
P_bee=1;
delay1(4);
P_bee=0;
delay1(3);
}
delay2(255);
delay2(255);
if(k==4) P_bee=1;
k=4;
while(k--);
}
}
void speak1()
{
uchar k,i;
int m;
for(i=0;i<1;i++)
{
k=0;
k++;
for(m=0;m<100;m++)
{
P_bee=0;;
delay1(3);
P_bee=1;
delay1(5);
}
if(k==4) P_bee=1;
k=4;
while(k--);
}
}
void disp(uchar m) //数码管显示
{
P0= led[m];
}
void delay1ms(void) //延时1ms子程序
{
uchar i,j;
for(i=2;i>0;i--)
for(j=248;j>0;j--);
}
void delay02s(void) //延时200ms子程序
{
uchar i;
for(i=200;i>0;i--)
{
delay1ms();
}
}
void delay8s()
{
unsigned char i,j,k;
for(i=0;i<200;i++)
for(j=0;j<100;j++)
for(k=0;k<130;k++);
}
void delay2s()
{
unsigned char i,j,k;
for(i=0;i<100;i++)
for(j=0;j<65;j++)
for(k=0;k<100;k++);
}
void delay10s()
{
uchar i,j,k;
for(i=0;i<200;i++)
for(j=0;j<100;j++)
for(k=0;k<160;k++);
}
void delay1s(void) //一秒延时
{
uchar h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
void key_sw() //水位设定
{
while(1)
{
if(key1_1==0)
{
delay1ms();
if(key1_1==0)
{
speak1();
ID1++;
if(ID1==4)
{
ID1=1;
}
while(key1_1==1) ;
}
switch(ID1)
{
case 1: //低水位
flag1=1;
disp(flag1);
P2_3=0;
P2_4=1;
P2_5=1;
delay02s();
break;
case 2: //中水位
flag1=2;
disp(flag1);
P2_3=1;
P2_4=0;
P2_5=1;
delay02s();
break;
case 3: //高水位
flag1=3;
disp(flag1);
P2_3=1;
P2_4=1;
P2_5=0;
delay02s();
break;
}
}
if(key1_3==0)
{
delay1ms();
if(key1_3==0)
speak1();
disp(10);
break;
}
}
}
void clynumber() //电机循环转动次数设定
{
while(1)
{
if(key1_1==0)
{
delay1ms();
if(key1_1==0)
{
speak1();
ID2++;
if(ID2==10)
{
ID2=1;
}
while(key1_1==1) ;
}
switch(ID2)
{
case 1:
disp(1);
delay02s();
break;
case 2:
disp(2);
delay02s();
break;
case 3:
disp(3);
delay02s();
break;
case 4:
disp(4);
delay02s();
break;
case 5:
disp(5);
delay02s();
break;
case 6:
disp(6);
delay02s();
break;
case 7:
disp(7);
delay02s();
break;
case 8:
disp(8);
delay02s();
break;
case 9:
disp(9);
delay02s();
break;
}
}
if(key1_3==0)
{
delay1ms();
if(key1_3==0)
speak1();
disp(10);
break;
}
}
}
void rewash() //洗衣过程重复次数
{
while(1)
{
if(key1_1==0)
{
delay1ms();
if(key1_1==0)
{
speak1();
ID3++;
if(ID3==6)
{
ID3=1;
}
while(key1_1==1);
}
switch(ID3)
{
case 1:
disp(1);
delay02s();
break;
case 2:
disp(2);
delay02s();
break;
case 3:
disp(3);
delay02s();
break;
case 4:
disp(4);
delay02s();
break;
case 5:
disp(5);
delay02s();
break;
}
}
if(key1_3==0)
{
delay1ms();
if(key1_3==0)
speak1();
disp(10);
break;
}
}
}
//***** 按设定水位进水子程序 *******//
void awjs()
{
P3=0xff;
if(flag1==1)
{
while(!P_lsw)
{} ;
speak1();
delay02s();
P_jin=0;
}
else if(flag1==2)
{
while(!P_msw)
{};
speak1();
delay02s();
P_jin=0;
}
else if(flag1==3)
{
while(!P_hsw)
{};
speak1();
delay02s();
P_jin=0;
}
}
//************************************************//
void dianjiZ() //正转
{
dianji_Z=1;
dianji_F=0;
}
void dianjiF() //反转
{
dianji_Z=0;
dianji_F=1;
}
void dianjiT() //停转
{
dianji_Z=0;
dianji_F=0;
}
void celynum() //电机四个节拍转动子程序
{
dianjiZ();
delay8s();
dianjiT();
delay2s();
dianjiF();
delay8s();
dianjiT();
delay2s();
}
void tuoshui() //脱水子程序
{
dianjiZ();
delay10s();
dianjiT();
delay2s();
dianjiZ();
delay10s();
dianjiT();
}
//**********************************//
void main()
{ //初始化
P_jin=0;
P_chu=0;
dianji_F=0;
dianji_Z=0;
ID=0;
ID1=0;
ID2=0;
ID3=0;
disp(0);
delay02s();
while(1)
{
if(key1_0==0)
{
delay1ms();
if(key1_0==0)
{
speak1();
ID++;
if(ID==4)
{
ID=1;
}
while(key1_0==1) ;
}
switch(ID)
{
case 1:
//disp(1);
P2_0=0;
key_sw();
delay02s();
break;
case 2:
//disp(2);
P2_1=0;
P2_0=1;
clynumber();
delay02s();
break;
case 3:
// disp(3);
P2_2=0;
P2_1=1;
rewash();
delay02s();
break;
}
}
if(key1_3==0)
{
delay1ms();
if(key1_3==0)
speak1();
P2_2=1;
break;
}
}
while(1)
{
if(ready==0) //准备就绪,开始进水洗衣
{
delay1ms();
if(ready==0)
{ speak1();
disp(0); //数码管显零,示意洗衣机已设定完毕正进入洗衣步骤
delay2s();
for(a=0;a<ID3;a++) //总洗衣次数循环
{
P_chu=0;
P_jin=1; //打开进水阀开始进水
P3=0xff;
delay2s();
awjs(); //调用按设定水位进水子程序
delay2s();
for(b=0;b<ID2;b++) //电机循环转动次数
{
celynum();
P2_0=0;
delay2s();
disp(b+1); //显示电机已经循环转动次数
}
delay2s();
P2_0=1;
delay2s();
disp(10);
P_chu=1; //打开出水阀排水
while(P_lsw==1); //排水未排到低水位以下时等待排水完
speak1();
delay8s();
delay2s();
delay8s();
delay2s();
tuoshui(); //开始脱水
P2_1=0;
delay2s();
disp(a+1); //显示进水排水次数
delay2s();
P2_1=1;
}
disp(10);
speak(); //蜂鸣器响五次
P2_2=0;
delay2s();
disp(ID3); //显示最终洗衣次数
delay2s();
delay2s();
P_chu=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -