多路舵机控制程序.docx
《多路舵机控制程序.docx》由会员分享,可在线阅读,更多相关《多路舵机控制程序.docx(20页珍藏版)》请在冰豆网上搜索。
多路舵机控制程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uintorder1;
uintflag,a,i;
uinttemp;
ucharcodetable[]="Iget";
sbitPWM_OUT0=P2^7;
sbitPWM_OUT1=P2^6;
sbitPWM_OUT2=P2^5;
sbitPWM_OUT3=P2^4;
sbitPWM_OUT4=P2^2;
sbitPWM_OUT5=P2^1;
sbitPWM_OUT6=P2^0;
uintduoji[7];
voidzuoshou();
voidyoushou();
voiddelay10ms(uinttime)
{
uchara,b,c;
for(a=0;afor(b=0;b<10;b++)for(c=0;c<120;c++);}voidboteinit(){TMOD=0x21;TH1=0xfd;//波特率9600TL1=0xfd;ET0=0;//TR0=0;//ET1=1;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;flag=0;}voidbote(){boteinit();while(1){if(flag==1){ES=0;for(i=0;i<6;i++){SBUF=table[i];while(!TI);TI=0;}SBUF=a;while(!TI);TI=0;switch(a){case'h'://头左转10度duoji[3]=duoji[3]+100;break;case'i'://头右转10度duoji[3]=duoji[3]-100;break;case'o'://拿瓶子扔掉{ES=1;ET0=1;duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1800;duoji[1]=1200;duoji[2]=2000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;delay10ms(250);duoji[0]=1500;duoji[1]=1200;duoji[2]=2000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1500;duoji[1]=2000;duoji[2]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=2000;duoji[1]=2000;duoji[2]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);ES=0;ET0=0;}break;case'p'://拿瓶子扔掉{ES=1;ET0=1;duoji[0]=1200;duoji[1]=1200;duoji[2]=800;duoji[4]=600;duoji[5]=1200;duoji[6]=1150;delay10ms(200);/*duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;duoji[4]=1800;duoji[5]=1200;duoji[6]=800;//zhangshoudelay10ms(250);duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1000;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=1000;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=600;//delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);*/ES=0;ET0=0;}break;case'k'://抬左臂{ES=1;ET0=1;duoji[0]=1200;duoji[1]=2000;duoji[2]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);ES=0;ET0=0;}break;case'm'://抬右臂{duoji[0]=1200;duoji[1]=1200;duoji[2]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);ES=0;ET0=0;}break;case'w'://左右挥舞双臂{ES=1;ET0=1;duoji[0]=1200;duoji[1]=2000;duoji[2]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=2000;duoji[2]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);ES=0;ET0=0;}break;case's'://来回摆手{ES=1;ET0=1;duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;//duoji[3]=1000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=800;//duoji[3]=2000;duoji[4]=800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);ES=0;ET0=0;}break;case'x'://抬右手摆左手zuoshou();break;case'y'://抬左手摆右手youshou();break;/*case'z':SBUF='{';while(!TI);TI=0;for(i=0;i<6;i++){temp=duoji[i];if(temp>=1000){SBUF=(temp/1000+'0');while(!TI);TI=0;SBUF=(temp%1000/100+'0');while(!TI);TI=0;SBUF=(temp%100/10+'0');while(!TI);TI=0;SBUF=(temp%10+'0');while(!TI);TI=0;}elseif(temp>=100){SBUF=(temp/100+'0');while(!TI);TI=0;SBUF=(temp%100/10+'0');while(!TI);TI=0;SBUF=(temp%10+'0');while(!TI);TI=0;}elseif(temp>=10){SBUF=(temp/10+'0');while(!TI);TI=0;SBUF=(temp%10+'0');while(!TI);TI=0;}else{SBUF=(temp+'0');while(!TI);TI=0;}if(i!=5){SBUF=',';while(!TI);TI=0;}}SBUF='}';while(!TI);TI=0;SBUF=',';while(!TI);TI=0;break;*/}}//if(flag==1)break;flag=0;}/*ES=1;flag=0;ET0=1;TH0=(65536-18338)/256;//延时20msTL0=(65536-18338)%256;*/}voidser()interrupt4{RI=0;a=SBUF;flag=1;}voidtimer0(void)interrupt1using1{switch(order1){case1:PWM_OUT0=1;TH0=-duoji[0]/256;TL0=-duoji[0]%256;break;case2:PWM_OUT0=0;TH0=-(2621-duoji[0])/256;TL0=-(2621-duoji[0])%256;break;case3:PWM_OUT1=1;TH0=-duoji[1]/256;TL0=-duoji[1]%256;break;case4:PWM_OUT1=0;TH0=-(2621-duoji[1])/256;TL0=-(2621-duoji[1])%256;break;case5:PWM_OUT2=1;TH0=-duoji[2]/256;TL0=-duoji[2]%256;break;case6:PWM_OUT2=0;TH0=-(2621-duoji[2])/256;TL0=-(2621-duoji[2])%256;break;case7:PWM_OUT3=1;TH0=-duoji[3]/256;TL0=-duoji[3]%256;break;case8:PWM_OUT3=0;TH0=-(2621-duoji[3])/256;TL0=-(2621-duoji[3])%256;break;case9:PWM_OUT4=1;TH0=-duoji[4]/256;TL0=-duoji[4]%256;break;case10:PWM_OUT4=0;TH0=-(2621-duoji[4])/256;TL0=-(2621-duoji[4])%256;break;case11:PWM_OUT5=1;TH0=-duoji[5]/256;TL0=-duoji[5]%256;break;case12:PWM_OUT5=0;TH0=-(2621-duoji[5])/256;TL0=-(2621-duoji[5])%256;break;case13:PWM_OUT6=1;TH0=-duoji[6]/256;TL0=-duoji[6]%256;break;case14:PWM_OUT6=0;TH0=-(2621-duoji[6])/256;TL0=-(2621-duoji[6])%256;break;default:order1=0;break;}order1++;}voidInitPWM(void){order1=1;TMOD|=0x01;TH0=(65536-18338)/256;//延时20msTL0=(65536-18338)%256;EA=1;EX0=0;ET0=1;TR0=1;} voiddongzuoinit(){duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[3]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=800;duoji[3]=2000;duoji[4]=800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;duoji[3]=1000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;delay10ms(200);duoji[0]=1200;duoji[1]=2000;duoji[2]=1500;duoji[3]=2000;duoji[4]=1300;duoji[5]=450;duoji[6]=1150;delay10ms(200);duoji[0]=2000;duoji[1]=2000;duoji[2]=1500;duoji[3]=1500;duoji[4]=1300;duoji[5]=450;duoji[6]=600;delay10ms(200);duoji[0]=1200;duoji[1]=1200;duoji[2]=1400;duoji[3]=1500;duoji[4]=1300;duoji[5]=1200;duoji[6]=1150;delay10ms(200);}voidyoushou(){duoji[0]=1200;duoji[1]=1200;duoji[2]=2000;//duoji[3]=1000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150; }voidzuoshou(){duoji[0]=1200;duoji[1]=1200;duoji[2]=800;//duoji[3]=2000;duoji[4]=800;duoji[5]=1200;duoji[6]=1150;}voidzhangyoushou(){duoji[0]=1600;duoji[1]=1200;duoji[2]=2000;//duoji[3]=1000;duoji[4]=1800;duoji[5]=1200;duoji[6]=1150;}voidzhangzuoshou(){duoji[0]=1200;duoji[1]=1200;duoji[2]=800;//duoji[3]=
for(b=0;b<10;b++)
for(c=0;c<120;c++);
}
voidboteinit()
TMOD=0x21;
TH1=0xfd;//波特率9600
TL1=0xfd;
ET0=0;
//TR0=0;
//ET1=1;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
flag=0;
voidbote()
boteinit();
while
(1)
if(flag==1)
ES=0;
for(i=0;i<6;i++)
SBUF=table[i];
while(!
TI);
TI=0;
SBUF=a;
switch(a)
case'h':
//头左转10度
duoji[3]=duoji[3]+100;
break;
case'i':
//头右转10度
duoji[3]=duoji[3]-100;
case'o':
//拿瓶子扔掉
ES=1;ET0=1;
duoji[0]=1200;
duoji[1]=1200;
duoji[2]=2000;
duoji[4]=1800;
duoji[5]=1200;
duoji[6]=1150;
delay10ms(200);
duoji[0]=1800;
delay10ms(250);
duoji[0]=1500;
duoji[1]=2000;
duoji[2]=1500;
duoji[4]=1300;
duoji[0]=2000;
duoji[2]=1400;
ES=0;ET0=0;
}break;
case'p':
duoji[2]=800;
duoji[4]=600;
/*duoji[0]=1200;
duoji[6]=800;//zhangshou
duoji[6]=1000;
duoji[5]=450;
duoji[6]=600;//
delay10ms(200);*/
case'k':
//抬左臂
case'm':
//抬右臂
case'w':
//左右挥舞双臂
case's':
//来回摆手
//duoji[3]=1000;
//duoji[3]=2000;
duoji[4]=800;
case'x':
//抬右手摆左手
zuoshou();
case'y':
//抬左手摆右手
youshou();
/*case'z':
SBUF='{';while(!
TI);TI=0;
temp=duoji[i];
if(temp>=1000){SBUF=(temp/1000+'0');while(!
TI);TI=0;SBUF=(temp%1000/100+'0');while(!
TI);TI=0;SBUF=(temp%100/10+'0');while(!
TI);TI=0;SBUF=(temp%10+'0');while(!
TI);TI=0;}
elseif(temp>=100){SBUF=(temp/100+'0');while(!
elseif(temp>=10){SBUF=(temp/10+'0');while(!
else{SBUF=(temp+'0');while(!
if(i!
=5){SBUF=',';while(!
SBUF='}';while(!
SBUF=',';while(!
break;*/
//if(flag==1)break;
/*ES=1;flag=0;
ET0=1;
TH0=(65536-18338)/256;//延时20ms
TL0=(65536-18338)%256;*/
voidser()interrupt4
RI=0;
a=SBUF;
flag=1;
voidtimer0(void)interrupt1using1
switch(order1)
case1:
PWM_OUT0=1;
TH0=-duoji[0]/256;
TL0=-duoji[0]%256;
case2:
PWM_OUT0=0;
TH0=-(2621-duoji[0])/256;
TL0=-(2621-duoji[0])%256;
case3:
PWM_OUT1=1;
TH0=-duoji[1]/256;
TL0=-duoji[1]%256;
case4:
PWM_OUT1=0;
TH0=-(2621-duoji[1])/256;
TL0=-(2621-duoji[1])%256;
case5:
PWM_OUT2=1;
TH0=-duoji[2]/256;
TL0=-duoji[2]%256;
case6:
PWM_OUT2=0;
TH0=-(2621-duoji[2])/256;
TL0=-(2621-duoji[2])%256;
case7:
PWM_OUT3=1;
TH0=-duoji[3]/256;
TL0=-duoji[3]%256;
case8:
PWM_OUT3=0;
TH0=-(2621-duoji[3])/256;
TL0=-(2621-duoji[3])%256;
case9:
PWM_OUT4=1;
TH0=-duoji[4]/256;
TL0=-duoji[4]%256;
case10:
PWM_OUT4=0;
TH0=-(2621-duoji[4])/256;
TL0=-(2621-duoji[4])%256;
case11:
PWM_OUT5=1;
TH0=-duoji[5]/256;
TL0=-duoji[5]%256;
case12:
PWM_OUT5=0;
TH0=-(2621-duoji[5])/256;
TL0=-(2621-duoji[5])%256;
case13:
PWM_OUT6=1;
TH0=-duoji[6]/256;
TL0=-duoji[6]%256;
case14:
PWM_OUT6=0;
TH0=-(2621-duoji[6])/256;
TL0=-(2621-duoji[6])%256;
default:
order1=0;break;
order1++;
voidInitPWM(void)
order1=1;
TMOD|=0x01;
TL0=(65536-18338)%256;
EX0=0;
ET0=1;TR0=1;
voiddongzuoinit()
duoji[3]=1500;
duoji[3]=2000;
duoji[3]=1000;
duoji[6]=600;
voidyoushou()
voidzuoshou()
voidzhangyoushou()
duoji[0]=1600;
voidzhangzuoshou()
//duoji[3]=
下载文档到电脑,查找使用更方便
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
copyright@ 2008-2022 冰点文档网站版权所有
经营许可证编号:鄂ICP备2022015515号-1