我自己编的一个程序,想让舵机正转45度延时10ms后反转45度然后停下来,可是舵机一直重复刚才的动作,怎么让它执行一次就停下来。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit pwm1=P1^0;
unsigned char i,j,t1,t2;
void delay500us(uint x) //误差 -0.868055555556us //0.5ms
{
unsigned char a,b;
while(x--)
for(b=1;b>0;b--)
for(a=227;a>0;a--);
}
void pwm360zhengzhuan(t1)
{for(i=t1;i>0;i--) //输出1ms的PWM波
{
pwm1 = 1; //舵机先转向-45度
delay500us(2);//1MS
pwm1 = 0;
delay500us(38);//19MS
}
delay500us(10 );//延时5MS
for(j=10;j>0;j--)//
{
pwm1 = 1; //延时后 舵机转向0度
delay500us( 3 );//1.5MS
pwm1= 0 ;
delay500us( 37 );//18.5MS
}
delay500us(10);
pwm1=0;
}
void pwm360fanzhuan(t2)
{for(i=t2;i>0;i--) //输出1ms的PWM波
{
pwm1 = 1; //舵机先转向+45度
delay500us(4);//1MS
pwm1 = 0;
delay500us(36);//19MS
}
delay500us(10 );//延时5MS
for(j=10;j>0;j--)//
{
pwm1 = 1; //延时后 舵机转向0度
delay500us( 3 );//1.5MS
pwm1= 0 ;
delay500us( 37 );//18.5MS
}
delay500us(10);
pwm1=0;
}
void main()
{
pwm360zhengzhuan(20);
delay500us(20);
pwm360fanzhuan(30);
pwm1=0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>