云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 51单片机控制多路舵机

51单片机控制多路舵机

  • 62 次阅读
  • 3 次下载
  • 2025/6/14 18:32:13

/********************************************************************** 该实验例程是实现8个舵机在两个角度之间摆动。0度和90度

通过该例程,读者要学会 分时复用定时器 ,用1个定时器来产生多路PWM的思想。 ***********************************************************************/ #include <12c5a.H> //STC12C5A系列单片机

void delay(uint16 time); //软件延时函数 void Timer_init(); //定时器初始化函数 void Timer0(uint32 us); //定时器0定时函数

uint16 pos[2][9]={ //上一节中控制一个舵机这里只需要两个数。 {1500,1500,1500,1500,1500,1500,1500,1500,1500}, //此节扩展成8个舵机,则此处变为两个数组。。 {500,500,500,500,500,500,500,500,500} //数组中的1~8成员代表每一个舵机的两个位置。 };

uint16 pwm[9]={1500,1500,1500,1500,1500,1500,1500,1500,1500}; //定时器取定时值从这里取

sbit pwm16=P5^3; sbit pwm15=P1^5; sbit pwm14=P1^6; sbit pwm13=P1^7; sbit pwm12=P4^3; sbit pwm11=P3^2; sbit pwm10=P3^3; sbit pwm9=P3^4;

sbit pwm8=P0^5; sbit pwm7=P0^6; sbit pwm6=P0^7; sbit pwm5=P4^6; sbit pwm4=P4^1; sbit pwm3=P4^5; sbit pwm2=P4^4; sbit pwm1=P2^7;

/******************************************************************************

********************

函数名:main() 功能: 入口函数 备注:

/***************************************************************************************************/ void main() { uint8 i=0;

P0M1=0; P0M0=0XFF; P1M1=0; P1M0=0XFF; P2M1=0; P2M0=0XFF; P3M1=0; P3M0=0XFF; P4M1=0; P4M0=0XFF; P5M1=0; P5M0=0XFF; P4SW|=0X70;

//设置P口为强推免输出模式,下同

Timer_init(); //定时器初始化 Timer0(31); //通过一个定时值进入定时循环

while(1) { for(i=1;i<9;i++) //pos[0]位置 pwm[i]=pos[0][i]; delay(1000);

for(i=1;i<9;i++) // pos[1]位置 pwm[i]=pos[1][i]; delay(1000);

//舵机在两个角度之间摆动

} }

/**************************************************************************************************

函数名:delay(uint16 time) 功能: 软件延时函数

参数: time 定时值,其大小与延时长短成正比 备注:

/***************************************************************************************************/ void delay(uint16 time) { uint16 i; uint16 j; for(i=0;i<1000;i++) for(j=0;j

/************************************************************************************************** 函数名:timer_init()

功能: 定时器初始化函数 备注: 1T

/***************************************************************************************************/ void Timer_init() { EA=1; //开总中断 AUXR|=0xC0; //T0,T1工作在1T TMOD|= 0x11; //T0工作在方式1,16位 ET0 = 1; //开定时器0中断 }

/************************************************************************************************** 函数名:timer0(uint32 us) 功能: 定时器0定时函数

参数: us,毫秒。 精确定时。 备注: 晶振12M,工作模式1T

/***************************************************************************************************/ void Timer0(uint32 us) { uint32 valu; valu=us*12; //工作在1T,最大定时时间2700us valu=valu;

valu=0xffff-valu;

TH0=valu>>8; TL0=(valu<<8)>>8;

//

TR0 = 1; //T0开始工作 }

/**************************************************************************************************

函数名:T0zd(void) interrupt 1 功能: 定时器0中断函数 备注: 控制8个舵机

/***************************************************************************************************/ void T0zd(void) interrupt 1 { static uint8 i=1; switch(i) // { case 1: { pwm1=1;

Timer0(pwm[1]); //定时 } break; case 2: { pwm1=0; //pwm1变低 Timer0(2500-pwm[1]);// 定时 } break; case 3: { pwm2=1; //pwm2变高 Timer0(pwm[2]);// 定时时常为pwm[2] } break; case 4: { pwm2=0; //pwm2变低 Timer0(2500-pwm[2]);// 定时时常为pwm[2] } break; case 5: { pwm3=1; //pwm3变高 Timer0(pwm[3]);// 定时时常为pwm[3] } break;

搜索更多关于: 51单片机控制多路舵机 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

/********************************************************************** 该实验例程是实现8个舵机在两个角度之间摆动。0度和90度 通过该例程,读者要学会 分时复用定时器 ,用1个定时器来产生多路PWM的思想。 ***********************************************************************/ #include //STC12C5A系列单片机 void delay(uint16 time); //软件延时函数 void Timer_init(); //定时器初始化函数 void Timer0(uint32 us); //定时器0定时函数 uint16 pos[2][9

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com