题目:设置过程,有一个水位选择按键,选择6个水位之一,相应的有六个水位检测点,仿真时用六个开关表示。有一个程序选择按键,选择8个程序之一。一个启动/停止键,按照所选程序自动洗衣。(2)洗衣过程,模拟完成其中两个自动洗衣程序——标准洗和轻柔洗的执行过程。打开进水电磁阀,(电磁阀用一个LED灯模拟),人工闭合开关表示水位到了该开关代表的水位检测器,关闭进水电磁阀,然后电机(proteus里面有)反复正转、反转,并用PWM波控制电机转速,轻柔洗转速慢,换向快,甩干转速最快......,直到洗完。为缩短演示时间,应把各步骤时间缩短。
程序:
#include <REG51F.H>
//#include<reg52.h>
//#include <math.h>
//#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sw=P1^3;
sbit ms=P1^5;
sbit qt=P1^7;
sbit aa=P1^6;
sbit bb=P1^4;
sbit cc=P0^7;
sbit p0_5=P0^5;
sbit p0_4=P0^4;
sbit p0_3=P0^3;
sbit p0_2=P0^2;
sbit p0_1=P0^1;
sbit p0_0=P0^0;
uint g,m,l;
uchar i,j,k;
void delay(void)
{
for (g=0;
g<1000;
g++);
}
void init_T2(void)
{
T2CON =0;
T2MOD =0;
RCAP2H =(65536-50000)/256;
RCAP2L =(65536-50000)%256;
TH2 =(65536-50000)/256;
TL2 =(65536-50000)%256;
ET2 = 1;
PT2 = 1;
TR2 = 1;
}
void swxz(void)
{
if(sw==0)
{
delay();
if(sw==0)
i++;
if(i==7)
i=1;
while(sw==0);
}
switch(i)
{
case 1:{p0_0=0;p0_1=1;p0_2=1;p0_3=1;p0_4=1;p0_5=1;}
break;
case 2:{p0_0=1;p0_1=0;p0_2=1;p0_3=1;p0_4=1;p0_5=1;}
break;
case 3:{p0_0=1;p0_1=1;p0_2=0;p0_3=1;p0_4=1;p0_5=1;}
break;
case 4:{p0_0=1;p0_1=1;p0_2=1;p0_3=0;p0_4=1;p0_5=1;}
break;
case 5:{p0_0=1;p0_1=1;p0_2=1;p0_3=1;p0_4=0;p0_5=1;}
break;
case 6:{p0_0=1;p0_1=1;p0_2=1;p0_3=1;p0_4=1;p0_5=0;}
break;
default:break;
}
}
void swjc(void)
{
switch(i)
{
case 1:{if(P3==0x03)
{EA=1;k=4;}}
break;
case 2:{if(P3==0x07)
{EA=1;k=4;}}
break;
case 3:{if(P3==0x0f)
{EA=1;k=4;}}
break;
case 4:{if(P3==0x1f)
{EA=1;k=4;}}
break;
case 5:{if(P3==0x3f)
{EA=1;k=4;}}
break;
case 6:{if(P3==0x7f)
{EA=1;k=4;}}
break;
default:{EA=0;P3=0xff;};
}
}
void qdtz(void)
{
if(qt==0)
{
delay();
if(qt==0)
k++;
while(qt==0);
}
switch(k)
{
case 2:cc=0;
break;
case 5:{aa=1;bb=1;EA=0;i=10;j=10;}
break;
default:cc=1;
}
}
void biaozhun(void)
{
qdtz();
swjc();
}
void qita(void)
{}
void msxz(void) //Ä£ê½Ñ¡Ôñoˉêy
{
if(ms==0)
{
delay();
if(ms==0)
{
j++;
if(j==9)
j=1;
}
while(ms==0);
}
switch(j)
{
case 1:{P2=0xfe;biaozhun();}
break;
case 2:{P2=0xfd;qita();}
break;
case 3:{P2=0xfb;qita();}
break;
case 4:{P2=0xf7;qita();}
break;
case 5:{P2=0xef;qita();}
break;
case 6:{P2=0xdf;qita();}
break;
case 7:{P2=0xbf;qita();}
break;
case 8:{P2=0x7f;qita();}
break;
default:P2=0xff;
}
}
void main(void) //Ö÷oˉêy
{
i=0,j=0,k=1,l=1,m=0,aa=1,bb=1,cc=1;
init_T2();
while(1)
{
swxz();
msxz();
if(m==1)
{
aa=1;
bb=0;
}
if(m==40)
{
l++;
aa=~aa;
bb=~bb;
m=2;
}
if(l==10)
{
i=7;
EA=0;
aa=1;
bb=1;
}
}
}
void dingshi(void) interrupt 5
{
m++;
TF2=0;
}
|