步进电机驱动 高手进来帮忙了

2020-01-26 12:50发布

以下能驱动两相四线步进电机正转反转

按键1正转 键2反转   功能正常
我想让按键按下后能转且持续2秒转动后停止。最好两键能互锁。

小白能力有限 望各位高手不吝赐教。 特此感谢了

#include <reg52.h>
sbit EN=P1^6;                       //使能   
sbit A1=P1^7;
sbit B1=P1^5;
sbit Key1=P3^7;                     //按键!
sbit Key2=P3^5;                     //按键!

void D_MS(void){
        unsigned int i=80;         //速度
        for(;i>0;i--)           
                ;               
}

void RRM(void){                                   //正转
        EN=1;  
        A1=1;
        D_MS();
        B1=1;
        D_MS();
        A1=0;
        D_MS();
        B1=0;
        D_MS();       
        EN=0;
}

void LLM(void){                                  //反转
        EN=1;
        B1=0;
        D_MS();
        A1=0;
        D_MS();
        B1=1;
        D_MS();
        A1=1;
        D_MS();
        EN=0;

}

void main(void){
        A1=0;
        B1=0;
        EN=0;
        while(1){
               
                if(Key1==0){
                        D_MS();
                        while(Key1==0){
                                RRM();
                        }
                }
                if(Key2==0){
                        D_MS();
                        while(Key2==0){
                                LLM();
                        }
                }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
luozyou
1楼-- · 2020-01-27 10:43
本帖最后由 luozyou 于 2013-10-30 08:41 编辑

谢谢大家的热情帮助 已经搞定了,原来可以这么用,现在把我写的贴出来请大家优化优化,现在都能正常使用了。

双键控制正反转且维持1秒左右:
#include <reg52.h>
sbit EN=P1^6;                       //使能   
sbit A1=P1^7;
sbit B1=P1^5;

sbit Key1=P3^7;                     //按键!
sbit Key2=P3^5;                     //按键!

void D_MS(void){
        unsigned int i=80;         //速度
        for(;i>0;i--)           
                ;               
}

void RRM(void){                                   //正转
        EN=1;
        A1=1;
        D_MS();
        B1=1;
        D_MS();
        A1=0;
        D_MS();
        B1=0;
        D_MS();
        EN=0;
}

void LLM(void){                                  //反转
        EN=1;
          B1=0;
        D_MS();
        A1=0;
        D_MS();
        B1=1;
        D_MS();
        A1=1;
        D_MS();
        EN=0;

}

void main(void){   
        int j=80;         //持续时间改目前我的板上大概一秒钟足够了
        A1=0;
        B1=0;
        EN=0;
        while(1) {
                if(Key1==0){
                        D_MS();
                if(Key1==0){
                {
                        for(;j>0;j--)           
                                  LLM();
                                if(j==0)
                                j=80;
                        else
                                {
                         j=j--;       
                         }
                        }
                        }
                         }
                                 if(Key2==0){
                        D_MS();
                if(Key2==0){
                        {
                        for(;j>0;j--)           
                        RRM();
                        if(j==0)
                        j=80;
                                else
                                {
                         j--;       
                         }
                        }
                        }
                         }
                }
                 }

下面的是单键控制正反转的按一下正转 再按一下反转

#include <reg52.h>
sbit EN=P1^6;                       //使能   
sbit A1=P1^7;
sbit B1=P1^5;

sbit Key1=P3^7;                     //按键!
sbit Key2=P3^5;                     //按键!

void D_MS(void){
        unsigned int i=80;         //速度
        for(;i>0;i--)           
                ;               
}

void RRM(void){                                   //正转
        EN=1;
        A1=1;
        D_MS();
        B1=1;
        D_MS();
        A1=0;
        D_MS();
        B1=0;
        D_MS();
        EN=0;
}

void LLM(void){                                  //反转
        EN=1;
          B1=0;
        D_MS();
        A1=0;
        D_MS();
        B1=1;
        D_MS();
        A1=1;
        D_MS();
        EN=0;

}

void main(void){   
        int j=80,count=0;         ///持续循环及按键计数
        A1=0;
        B1=0;
        EN=0;
        while(1) {
                if(Key1==0){
                        D_MS();
                if(Key1==0){
                        count = (count+1)%2;
                        switch(count)
                        {
                        case 0:;
                        {
                        for(;j>0;j--)           
                        RRM();
                        if(j==0)
                        j=80;
                                else
                                {
                         j--;       
                         }
                        }
       
                        break;
                        case 1:
                        {
                        for(;j>0;j--)           
                                  LLM();
                                if(j==0)
                                j=80;
                        else
                                {
                         j=j--;       
                         }
                        }
                        break;
                        count=0;
                       
                } }
        }  }}

现在暂时没有按键互锁,大家再支支招帮忙出出主意
xou822
2楼-- · 2020-01-27 16:34
额  楼主你的程序都写出来了加个中断也不难啊

或者你就一直死循环检查按键,检查到了就开始转动并且转动i次。。。。
luozyou
3楼-- · 2020-01-27 18:16
 精彩回答 2  元偷偷看……

一周热门 更多>