步进电机停不下来
本帖最后由 召唤师 于 2020-4-11 13:43 编辑#include<reg52.h>
unsigned char beatcode[]={0xe,0xc,0xd,0x9,0xb,0x3,0x7,0x6}; //步进电机控制时序
void delay();
unsigned char temp;
unsigned char index=0;
unsigned long j=0;
unsigned int n=2;//转动圈数
intmain(){
while(n!=0){
temp=P1; //p1口低四位控制步进电机
temp=temp&0xF0;
temp=temp|beatcode;
P1=temp;
index++;
j++;
delay();
if(index==7)
{
index=0;
}
if(j==(n*4096)) //4096是转动一圈的脉冲数
{
n=0;
}
}
P1=P1|0x0f; //关闭电机所有相
return 0;
}
void delay(){
unsigned int i=200;
while(i--);
}
用这个程序就是电机会一直转,不会按设定的两圈去停止。 本帖最后由 召唤师 于 2020-4-11 20:26 编辑
用keil调试时,可以,但是实物不行,不知道为什么。 有结果了:得在return 0前加一个死循环:while(1);但是我还是没想明白为什么这么做。有懂的人说说看。 单片机在加电后就会一直执行你拷进去的代码;return后 再从mian 开始执行 ,如上 ,其实是它转了两圈 然后有执行这个代码又转了两圈,一直这样就像是一直转下去!!!所以最后加的死循环很重要。
页:
[1]