当前位置:首页 > 51单片机控制多路舵机
/********************************************************************** 该实验例程是实现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
共分享92篇相关文档