标题: 想问单片机步进电机IF函数的问题,我想在IF函数加个停止函数 [打印本页]

作者: 记得好好学习    时间: 2018-8-7 16:56
标题: 想问单片机步进电机IF函数的问题,我想在IF函数加个停止函数
单片机源码

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
#define MotorData P2                    //步进电机控制接口定义
sbit A=P1^0;
sbit F=P1^1;
uchar phasecw[4] ={0x40,0x20,0x10,0x08};//正转 电机导通相序 D-C-B-A
uchar phaseccw[4]={0x08,0x10,0x20,0x40};//反转 电机导通相序 A-B-C-D
//ms延时函数                j

void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)                                       
  for(j=0;j<112;j++);
}
//顺时针转动
void MotorCW(void)
{
uchar i;
for(i=0;i<4;i++)
  {
   MotorData=phasecw[ i];
   Delay_xms(4);//转速调节
  }
}
//逆时针转动
void MotorCCW(void)
{
uchar i;
for(i=0;i<4;i++)
  {
   MotorData=phaseccw[ i];
   Delay_xms(4);//转速调节
  }
}
//停止转动
void MotorStop(void)
{
MotorData=0x00;
}
//主函数
void main(void)
{        
uint i;
Delay_xms(50);//等待系统稳定
while(1)
{                 
         if(A==0)                       //想在这设个 停止函数    就让他转两圈就不再转   等待下一次指令

{
  for(i=0;i<500;i++)
  {
   MotorCW();   //顺时针转动
  }
  MotorStop();  //停止转动
  Delay_xms(500);
                   }
                   else if (F==0)      
                   {
  for(i=0;i<500;i++)
  {
   MotorCCW();  //逆时针转动
  }
  MotorStop();  //停止转动
  Delay_xms(500);  
}         
}                  
}
         

作者: 111252    时间: 2018-8-7 18:25
我觉得转两圈停止很难实现,因为你得精确测量步进电机的转数,如果是转一定时间就跟容易实现
作者: 记得好好学习    时间: 2018-8-7 20:16
111252 发表于 2018-8-7 18:25
我觉得转两圈停止很难实现,因为你得精确测量步进电机的转数,如果是转一定时间就跟容易实现

怎么设置转一定时间
作者: 111252    时间: 2018-8-8 16:21
记得好好学习 发表于 2018-8-7 20:16
怎么设置转一定时间

可以用定时器中断来设置一定时间,但我觉得你的程序主函数中有些问题应该再加个按键控制会更好,我现在也刚好正在学用单片机控制步进电机,我们可以交流一下吗?qq2074262016
作者: 记得好好学习    时间: 2018-8-10 12:23
111252 发表于 2018-8-8 16:21
可以用定时器中断来设置一定时间,但我觉得你的程序主函数中有些问题应该再加个按键控制会更好,我现在也 ...

我只是简单的应用下   还没学  不过我们可以加个好友  可以一起学习




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1