51单片机按键控制舵机旋转_按键控制两个舵机转动,入职阿里啦

195 阅读2分钟

1.舵机的与单片机的连接

2.PWM波的简单了解

3.程序示例

4.开发程序难点

---------------------------------------------------------------------------------------------------------------------------------

1.舵机的与单片机的连接

如图所示,舵机正极接单片机vcc,负极接gnd,signal的连接可自定义。

---------------------------------------------------------------------------------------------------------------------------------

2.PWM波的简单了解

51单片机通过按键来控制舵机正反转,需要通过PWM波来实现,本文仅对如何使用PWM波控制舵机旋转做出解释。

    对于一般的舵机来说,所对应的PWM波的周期为200ms,即单片机信号口输出200ms为一个周期。设信号口输出‘1’的时间为 x ms,剩余时间均输出‘0’,x/200的比值即为占空比的值。单片机通过控制占空比的值来控制舵机的旋转。

    对于常见的舵机来说,占空比的值与对应的角度有以下关系:

    0.5ms/200ms = 0 度

    1.0ms/200ms = 45 度

    1.5ms/200ms = 90 度

    2.0ms/200ms = 135 度

    2.5ms/200ms = 180 度

    在51单片机中,通过定时器来计时,通过信号输出口输出‘1’或‘0’来控制舵机的旋转。


3.程序示例

#include<reg52.h>  

sbit key1 = P3^2;  
sbit key2 = P3^3;
sbit pwm1 = P2^0;  

unsigned int target =12,percent = 0;  

void Timer0Initial();  
void initial_Timer();  
void delay(unsigned int x);  
void keyscan();  

void keyscan()  
{
delay(30);
if(key1 == 0)  
{  
delay(10);  
if(key1 == 0)  
{  
if(target >= 5)  
target -= 1;   
}    
}  

if(key2 == 0)  
{  
delay(10);  
if(key2 == 0)  
{  
if(target <= 25)  
target += 1;   
}  
}  


void initial()  
{  
key1 = 1;  
key2 = 1;  
initial_Timer();  
}  

void Timer0Initial()  
{  
TH0 = (65536-65)/256;  
TL0 = (65536-65)%256;  


void initial_Timer()  
{  
EA = 1; 
ET0 = 1; 
TMOD = 0x01;
Timer0Initial();  
TR0 = 1;
}  

void delay(unsigned int x)  
{  
unsigned int i,j;  
for(i=x;i>0;i--)  
for(j=110;j>0;j--); 

void main()  
{  
initial();  
while(1)  
{  
keyscan();  
}  
}

void Timer0() interrupt 1 using 0  

percent+=1;
if(percent<=target)
pwm1=1;

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!