51单片机怎么保证二项电机的转动方向?
我的想法是先按一次正向按钮电机开始正向转动,到一定距离时停止一段时间,再按反向按钮让电机反向转动。
但是现在每次按按钮,电机的转动方向都会不同而且是随机的,这是为什么?
#include<reg51.h>
#define MotorTabNum 5
unsigned char T0_NUM;
sbit K1 = P3^1; // 正向
sbit K2 = P3^0; //反向
sbit K3 = P3^2; //停止
sbit FX = P2^4; // 方向
sbit CLK = P2^6; // 脉冲
int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char g_MotorSt = 0;
unsigned char g_MotorDir = 0;
unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};
signed char g_MotorNum = 0;
void delayms(xms);
void mDelay(unsigned int DelayTime);
void T0_Init();
void KeyScan(void);
void main(void)
{
T0_Init();
FX = 0;
while(1)
{
KeyScan();
}
}
void T0_Init()
{
TMOD = 0x01;
TH0 = (65535-1)/256;
TL0 = (65535-1)%256;
EA = 1;
ET0 = 1;
}
void T0_time() interrupt 1
{
// TR0 = 0;
TH0 = (65535-1)/256;
TL0 = (65535-1)%256;
T0_NUM++ ;
if(T0_NUM >= MotorTab[g_MotorNum])
{
T0_NUM = 0;
CLK=CLK^0x01;
}
}
void KeyScan(void)
{
if(K1 == 0)
{
delayms(10);
if(K1 == 0)
{
g_MotorSt = g_MotorSt ^ 0x01;
TR0 = 1;
FX =0;
g_MotorNum = 7;
}
}
if(K2 == 0)
{
delayms(10);
if(K2 == 0)
{
g_MotorDir = g_MotorDir ^ 0x01;
TR0 = 1;
FX = 1;
g_MotorNum = 7;
}
}
if(K3==0)
{
delayms(10);
if(K3==0)
{
TR0 = 0;
}
}
}
void delayms(xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}