51单片机控制多路舵机Word文件下载.docx
《51单片机控制多路舵机Word文件下载.docx》由会员分享,可在线阅读,更多相关《51单片机控制多路舵机Word文件下载.docx(9页珍藏版)》请在冰点文库上搜索。
uint16pwm[9]={1500,1500,1500,1500,1500,1500,1500,1500,1500};
//定时器取定时值从这里取
sbitpwm16=P5^3;
sbitpwm15=P1^5;
sbitpwm14=P1^6;
sbitpwm13=P1^7;
sbitpwm12=P4^3;
sbitpwm11=P3^2;
sbitpwm10=P3^3;
sbitpwm9=P3^4;
sbitpwm8=P0^5;
sbitpwm7=P0^6;
sbitpwm6=P0^7;
sbitpwm5=P4^6;
sbitpwm4=P4^1;
sbitpwm3=P4^5;
sbitpwm2=P4^4;
sbitpwm1=P2^7;
/**************************************************************************************************
函数名:
main()
功能:
入口函数
备注:
/***************************************************************************************************/
voidmain()
{
uint8i=0;
P0M1=0;
//设置P口为强推免输出模式,下同
P0M0=0XFF;
P1M1=0;
P1M0=0XFF;
P2M1=0;
P2M0=0XFF;
P3M1=0;
P3M0=0XFF;
P4M1=0;
P4M0=0XFF;
P5M1=0;
P5M0=0XFF;
P4SW|=0X70;
Timer_init();
//定时器初始化
Timer0(31);
//通过一个定时值进入定时循环
while
(1)
{
for(i=1;
i<
9;
i++)//pos[0]位置
pwm[i]=pos[0][i];
delay(1000);
i++)//pos[1]位置
pwm[i]=pos[1][i];
//舵机在两个角度之间摆动
}
}
delay(uint16time)
软件延时函数
参数:
time定时值,其大小与延时长短成正比
voiddelay(uint16time)
uint16i;
uint16j;
for(i=0;
1000;
i++)
for(j=0;
j<
time;
j++);
timer_init()
定时器初始化函数
1T
voidTimer_init()
EA=1;
//开总中断
AUXR|=0xC0;
//T0,T1工作在1T
TMOD|=0x11;
//T0工作在方式1,16位
ET0=1;
//开定时器0中断
timer0(uint32us)
定时器0定时函数
us,毫秒。
精确定时。
晶振12M,工作模式1T
voidTimer0(uint32us)
{
uint32valu;
valu=us*12;
//工作在1T,最大定时时间2700us
valu=valu;
valu=0xffff-valu;
//
TH0=valu>
>
8;
TL0=(valu<
<
8)>
TR0=1;
//T0开始工作
T0zd(void)interrupt1
定时器0中断函数
控制8个舵机
voidT0zd(void)interrupt1
staticuint8i=1;
switch(i)//
{
case1:
{
pwm1=1;
Timer0(pwm[1]);
//定时
}break;
case2:
pwm1=0;
//pwm1变低
Timer0(2500-pwm[1]);
//定时
case3:
pwm2=1;
//pwm2变高
Timer0(pwm[2]);
//定时时常为pwm[2]
case4:
pwm2=0;
//pwm2变低
Timer0(2500-pwm[2]);
case5:
pwm3=1;
//pwm3变高
Timer0(pwm[3]);
//定时时常为pwm[3]
case6:
pwm3=0;
//pwm3变低
Timer0(2500-pwm[3]);
case7:
pwm4=1;
//pwm4变高
Timer0(pwm[4]);
case8:
pwm4=0;
//pwm4变低
Timer0(2500-pwm[4]);
case9:
pwm5=1;
//pwm5变高
Timer0(pwm[5]);
case10:
pwm5=0;
//pwm5变低
Timer0(2500-pwm[5]);
case11:
pwm6=1;
//pwm6变高
Timer0(pwm[6]);
case12:
pwm6=0;
//pwm6变低
Timer0(2500-pwm[6]);
case13:
pwm7=1;
//pwm7变高
Timer0(pwm[7]);
case14:
pwm7=0;
//pwm7变低
Timer0(2500-pwm[7]);
case15:
pwm8=1;
//pwm8变高
Timer0(pwm[8]);
case16:
pwm8=0;
//pwm8变低
Timer0(2500-pwm[8]);
i=0;
default:
break;
i++;
}