基于51单片机+SG90舵机
Posted 皮卡丘吉尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于51单片机+SG90舵机相关的知识,希望对你有一定的参考价值。
基本介绍
舵机的分类
大致分为以下三种吧 只是我现在用过就三种 。
180° 有限位 (不上电 只能转180度 真正转也就是180° )
180° 无限位 (不上电 能转360° 但是真正转也就是180°)
360° 无限位 (这个就是上电不上电都能转360°以上)
我这里用的是 180° 无限位的舵机
首先看看一下图片:
接线
接线其实很简单。
51单片机 | SG90舵机 |
---|---|
VCC | VCC(红色) |
GND | GND(棕色) |
P1.0 | 信号线 (橙色) |
代码
我用的是STC89C52
main.c
#include <reg52.h>
#include "delay.h"
unsigned int count; //次数标识
unsigned int angle=5; //角度标识
sbit pwm =P1^0 ; //PWM信号输出
/*定时器初始化函数*/
void Timer0_Init(void) //100微秒@11.0592MHz
{
TMOD |= 0x01; //设置定时器模式
TL0 = 0xA4; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
}
/*串口初始化函数*/
void Uart_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES = 1;
EA = 1;
}
/*串口发送一字节函数*/
void Uart_SendData(unsigned char dat )
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
/*串口发送字符串函数*/
void Uart_SendString(char *s)
{
while (*s)
{
Uart_SendData(*s++);
}
}
/*程序入口*/
void main(void)
{
//angle与对应角度关系
//4 5 6 ...... 19 20
//0 11 22 ...... 166 177
Uart_Init();
Timer0_Init();
Uart_SendString("舵机正在旋转。\\r\\n");
for(angle=4;angle<21;angle++)//从0到177度,步进11度
{
delay_ms(2);
}
delay_ms(2000);
for(angle=21;angle>4;angle--)//从177到0度,步进11度
{
delay_ms(2);
}
Uart_SendString("舵机正在往复旋转。\\r\\n");
while(1)
{
}
}
/*串口中断服务函数*/
void Uart_Isr() interrupt 4
{
if (RI)
{
RI = 0;
}
}
/*定时器中断服务函数*/
void Timer0_Isr() interrupt 1
{
TL0 = 0xA4; //设置定时初值
TH0 = 0xFF; //设置定时初值
if(count< angle) //判断次数是否小于角度标识
pwm=1; //确实小于,PWM输出高电平
else
pwm=0; //大于则输出低电平
count=(count+1); //0.1ms次数加1
count=count%160; //保持周期为20ms,普通51单片机定时100us有误差,经示波器测量约为50Hz
}
delay.c
#include <reg52.h>
#include "delay.h"
#include "intrins.h"
//延时约1ms
void delay_ms(unsigned int ms)
{
unsigned int a,b;
for(a=ms;a>0;a--)
for(b=114;b>0;b--);
}
delay.h
#ifndef __DELAY_H
#define __DELAY_H
#include <reg52.h>
void delay_ms(unsigned int ms);
#endif
基于 51单片机的其他项目
基于51单片机+遥控灯
基于51单片机+LCD1602显示
基于51单片机+红外遥控解码+LCD1602显示
基于51单片机+DHT11温湿度+LCD1602显示
基于51单片机+DS18B20温度测温器+LCD1602显示
基于51单片机+SYN6288语音播报
基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶
基于51单片机+ESP8266模块(HTTP)上传温湿度到oneNET APP显示+LCD1602显示
如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈o( ̄︶ ̄)o
继续加油!
以上是关于基于51单片机+SG90舵机的主要内容,如果未能解决你的问题,请参考以下文章
这个单片机控制舵机的程序 舵机会抖动 哪位大侠帮我改一下c程序?