|
#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,電機(jī)開始轉(zhuǎn)動(dòng),右邊的開關(guān)采集到一個(gè)低電平信號(hào)之后,電機(jī)停止轉(zhuǎn)動(dòng),再按下K5,電機(jī)又開始轉(zhuǎn)動(dòng),開關(guān)采集到4個(gè)低電平信號(hào)之后,電機(jī)停止轉(zhuǎn)動(dòng),再按下K3,電機(jī)反向轉(zhuǎn)動(dòng),開關(guān)采集到兩個(gè)信號(hào)之后,電機(jī)停止轉(zhuǎn)動(dòng)。這個(gè)有點(diǎn)類似電梯的控制,程序應(yīng)該怎么改才能實(shí)現(xiàn)這樣的效果啊,求各位幫助,一起討論!!!
|
|