#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P36=P3^6;
sbit P37=P3^7;
sbit P27=P2^7;
sbit Key=P0^2;
uchar Current_Level,Dest_Level;
uint i=0,M=0,N=0;
void DelayMS(uint dly);
void Key_scan(void);
void DcMonitor(void)
{
if(Current_Level<Dest_Level)
{
M=Dest_Level-Current_Level;
P27=1;
P36=1;
P37=0;
Key_scan();
for(i=N;i>0;i--)
{
Current_Level++;
}
}
else if(Current_Level>Dest_Level)
{
M=Current_Level-Dest_Level;
P27=1;
P36=0;
P37=1;
Key_scan();
for(i=N;i>0;i--)
{
Current_Level--;
}
}
else
{
P27=0;
P36=0;
P37=0;
}
}
void Key_scan(void)
{
while(N<M)
{while(Key==0)
{
DelayMS(10);
if(Key==1)
break;
while(Key==0);
N++;
}
}
}
void DelayMS (uint dly)
{
uint a,b;
for(a=dly;a>0;a--)
for(b=247;b>0;b--);
}
void main()
{
P27=0;
P36=0;
P37=0;
if(P1!=0XFF)
{
switch(P1)
{
case 0XFE:Dest_Level=5;DcMonitor();break;
case 0XFD:Dest_Level=4;DcMonitor();break;
case 0XFB:Dest_Level=3;DcMonitor();break;
case 0XF7:Dest_Level=2;DcMonitor();break;
case 0XEF:Dest_Level=1;DcMonitor();break;
}
}
}
我想模拟的过程是这样的:按下K1,电机开始转动,右边的开关采集到一个低电平信号之后,电机停止转动,再按下K5,电机又开始转动,开关采集到4个低电平信号之后,电机停止转动,再按下K3,电机反向转动,开关采集到两个信号之后,电机停止转动。这个有点类似电梯的控制,程序应该怎么改才能实现这样的效果啊,求各位帮助,一起讨论!!!
|