单片机控制电机的转向问题

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--);
}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问