用c语言写一个51单机机控制舵机代码
时间: 2023-03-13 10:44:38 浏览: 144
下面是一个简单的C语言代码,可用于控制51单片机控制舵机:
#include <reg51.h>
unsigned char servo_angle;
void servo_control()
{
servo_angle = 0;
P1 = servo_angle; // 输出函数,P1口输出舵机脉宽
while(servo_angle < 180)
{
servo_angle ++;
P1 = servo_angle;
delay(20); // 20ms延时
}
servo_angle = 180;
P1 = servo_angle;
while(servo_angle > 0)
{
servo_angle --;
P1 = servo_angle;
delay(20);
}
}
相关问题
用C语言写51单片机控制舵机的代码
#include <reg51.h>
sbit servo=P1^0; //舵机控制引脚
void delay(unsigned int i) //延时函数
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
while(1)
{
servo=1; //控制舵机的引脚电平为高电平
delay(1000); //延时1ms
servo=0; //控制舵机的引脚电平为低电平
delay(19000); //延时19ms
}
}
用c语言写一个51单片机通过pwm波控制舵机的代码
以下代码为使用C语言对51单片机进行PWM波控制舵机的程序:
#include <REG52.h>
sbit PWM_Out = P1^0; //PWM输出口为P1.0口
sbit Servo_Out = P2^0; //舵机输出口为P2.0口
void PWM_Init(void) //PWM初始化函数
{
TMOD |= 0x01; //使用定时器0的模式1
TH0 = 0xFF; //定时器初值,使PWM频率为50Hz
TL0 = 0x9C; //定时器初值,使PWM频率为50Hz
ET0 = 1; //使能定时器0中断
EA = 1; //总中断使能
}
void PWM_SetDuty(unsigned char Duty) //定义PWM脉宽占空比的值
{
unsigned int highTime = 0;
highTime = (unsigned int)(Duty/256.0*5000/20);
TH0 = (65536 - highTime) / 256;
TL0 = (65536 - highTime) % 256;
}
void Servo_Control(unsigned char angle) //定义控制舵机转动角度的函数
{
PWM_SetDuty(500 + 11 * angle);
Servo_Out = 1;
delay_us(1000);
Servo_Out = 0;
delay_ms(18);
}
void main(void)
{
PWM_Init(); //调用PWM初始化函数
while(1)
{
Servo_Control(0); //让舵机转动到初始位置
delay_ms(1000); //延时1秒
Servo_Control(90); //让舵机转动到中间位置
delay_ms(1000); //延时1秒
Servo_Control(180); //让舵机转动到结束位置
delay_ms(1000); //延时1秒
}
}
在此代码中,使用定时器0的模式1来形成PWM波,通过改变PWM波的脉宽占空比来控制舵机的转动角度。其中,计算脉宽占空比的公式为:PWMDuty = Duty / 256.0 * 5000 / 20,其中Duty为脉宽占空比的值(0~255),5000为定时器的时钟频率,20为PWM的频率。根据舵机的工作原理可知,舵机总共可转动180度,脉宽占空比的值控制舵机转动到的具体角度,脉宽占空比的最小值为500,最大值为2500。
请注意:此代码是供给您参考的样例代码,如果您的51单片机的型号不同,具体实现可能会有所不同。
阅读全文