weixin_43372515 2019-12-13 20:20 采纳率: 100%
浏览 368

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

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


  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
    • ¥15 求解 yolo算法问题
    • ¥15 虚拟机打包apk出现错误
    • ¥30 最小化遗憾贪心算法上界
    • ¥15 用visual studi code完成html页面
    • ¥15 聚类分析或者python进行数据分析
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。