51 sg90舵机程序代码
时间: 2024-12-30 13:27:44 浏览: 12
### SG90伺服电机控制示例代码
对于SG90舵机,在51单片机上的控制主要依赖于PWM信号。下面提供一段用于51单片机控制SG90舵机的C语言代码:
```c
#include <reg52.h>
sbit SERVO = P1^0; // 定义舵机连接端口
void delay_us(unsigned int us){
while(us--) {
_nop_();
}
}
void delay_ms(unsigned int ms){
unsigned int i;
while(ms--){
for(i=0;i<127;i++){
;
}
}
}
// 设置角度函数
void set_angle(int angle) {
float pulse_width;
pulse_width = (angle * 2000 / 180.0f) + 500;
// 发送高电平时间
SERVO = 1;
delay_us((unsigned int)pulse_width);
// 剩余时间为低电平,周期保持在20ms
SERVO = 0;
delay_us(20000 - (unsigned int)pulse_width);
}
void main(void) {
TMOD = 0x01; // 使用定时器0模式1
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TR0 = 1; // 启动定时器0
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
while (1) { // 主循环
set_angle(0); // 舵机转到0度位置
delay_ms(1000); // 等待一秒
set_angle(90); // 转向90度中间位置
delay_ms(1000);
set_angle(180); // 最终转向180度最大偏移量
delay_ms(1000);
}
}
```
这段代码实现了基本的角度设定功能,并让舵机按照指定的时间间隔依次指向三个不同方向的位置[^1]。
阅读全文