微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 谁能帮我解释下这个程序吧,,,,谢谢了,,这是一个六个舵机控制机器人走路的程序

谁能帮我解释下这个程序吧,,,,谢谢了,,这是一个六个舵机控制机器人走路的程序

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uint unsigned int
sbit ctr3=P0^6;         //分时发射1  左边
sbit ctr2=P0^4;         //分时发射2 中间
sbit ctr1=P0^5;         //分时发射3  右边
sbit out=P1^6;         //激光接收管 信号端
sbit hi=P2^6;
sbit  f=P0^7; //蜂鸣器
sbit pwm1=P2^0; //舵机1
sbit pwm2=P2^4; //舵机2
sbit pwm3=P3^5; //舵机3
sbit pwm4=P3^7; //舵机4
sbit pwm5=P1^6; //舵机5
sbit pwm6=P1^7; //舵机6
char d,e,d1,p;
unsigned int a,b,c;//a是右边的,c是左边的,b是中间的
unsigned int set,m,angle; //set为舵机,电机转角标志位,angle为舵机打角
unsigned int angle1,angle2;//angle1,angle2为电机PWM变化打角
unsigned int aa,bb,cc,dd,ee,ff,aaa,bbb,ccc,ddd,eee,fff;//angle1,angle2为电机PWM变化打角
unsigned int a1,a2,a3,a4,a5;//angle1,angle2为电机PWM变化打角
void delay(uint); //延时函数
void pwmctr( );//电机打角函数
void anglectr( );//舵机打角函数
void angles();
/****中断初始化        */
void Time0_Init()  
{
TMOD=0X01;
IE=0X82;
TH0=(65536-130)/256;                 
TL0=(65536-130)%256;
TR0=1;
}

void main()
{
f=0;//关闭蜂鸣器
a=0;
b=0;
c=0;


set=0;
angle=62; //中值

angle1=62; //电机控制
angle2=200;

Time0_Init();
aa=30;//左上
bb=30;//左下   
ff=30;//左底  //

cc=30 ;//右上        
dd=30;// 右下        
ee=30 ;//右底        //        

  for(;;)
{
  pwmctr( );
anglectr( );
angles( );
  
  }         
}
void  angles( )
{
if(a5>0){
   a5=0;
   if(aa==aaa) aa=aaa;
  else if(aa<aaa) aa++;
  else if(aa>aaa) aa--;
  if(bb==bbb) bb=bbb;
  else if(bb<bbb) bb++;
  else if(bb>bbb) bb--;
  if(cc==ccc) cc=ccc;
  else if(cc<ccc) cc++;
  else if(cc>ccc) cc--;
  if(dd==ddd) dd=ddd;
  else if(dd<ddd) dd++;
  else if(dd>ddd) dd--;
    if(ee==eee) ee=eee;
  else if(ee<eee) ee++;
  else if(ee>eee) ee--;
  if(ff==fff) ff=fff;
  else if(ff<fff) ff++;
  else if(ff>fff) ff--;

                  }
}
void anglectr( )
{
if(a1>2) a2++,a5++,a1=0;
if(a2>240) a2=30;
  if(a2<40){
aaa=30;//左上
bbb=30;//左下   
fff=30;//左底  //

ccc=30 ;//右上        
ddd=30;// 右下        
eee=30 ;//右底        //
                  }
//====================
if(a2>40&&a2<80){

if(a2>70)aaa=37;//左上
   
if(a2<50){
fff=21;//左底  //
  bbb=32;//左下
  eee=40 ;//右底        //
                }
if(a2>55){

bbb=32;//左下

ccc=30 ;//右上        
ddd=35;// 右下        
eee=25 ;//右底        //
          }
        }        
        
//====================
if(a2>80&&a2<120){

if(a2>110)aaa=37;//左上
   
if(a2<90){

  ccc=37 ;//右上
  //eee=40;//右底        //
                }
if(a2>95){
  fff=29;//左底  //
  bbb=31;//左下

//ccc=30 ;//右上        
ddd=28;// 右下        
eee=30 ;//右底        //
          }
        }
        
        
        //====================
if(a2>120&&a2<160){

if(a2>150){aaa=25;//左上
                ccc=22 ;//右上
                   }

if(a2<130){

    fff=18;//左底  //
    bbb=32;//左下
  eee=36;//右底        //
                }
if(a2>135){

   bbb=24;//左下
   fff=31;//左底  //

        
ddd=29;// 右下        
//eee=30 ;//右底        //
          }
        }        
//=---------------------===================
        
if(a2>160&&a2<230){

if(a2<170){
   eee=23 ;//右底        //
    ddd=25;// 右下
                }
               
if(a2>170&&a2<185){
    bbb=31;//左下
  fff=22;//左底  //
                }  
        if(a2>185&&a2<200){
   ddd=38;// 右下
   eee=23 ;//右底        //
  
                }         

                  
           if(a2>200){aaa=35;//左上
                ccc=35 ;//右上

                   }
                        
   if(a2>220){
                     
                 
                    ddd=31;// 右下
            eee=35 ;//右底        //
                  
                          
                          bbb=38;//左下
           fff=30;//左底  //
                   }
          /*
   if(a2>230){
                     
                          
                          bbb=28;//左下
            ddd=28;// 右下
            eee=30 ;//右底        //
                   }         */
        
           
         }                  
        
        
//=---------------------===================        
        
if(a2>230){
aaa=30;//左上
bbb=30;//左下   
fff=30;//左底  //

ccc=30 ;//右上        
ddd=30;// 右下        
eee=30 ;//右底        //

}         
        /*
        */
}
void pwmctr( )         //电机控制
{
   
if(set<aa)
   pwm1=1;
else
  pwm1=0;
   //------------------------------
if(set<bb)
   pwm2=1;
else
  pwm2=0;
   //------------------------------
  if(set<cc)
   pwm3=1;
else
  pwm3=0;
   //------------------------------
  if(set<dd)
   pwm4=1;
else
  pwm4=0;
  //------------------------------
    if(set<ee)
   pwm5=1;
else
  pwm5=0;
   //------------------------------
  if(set<ff)
   pwm6=1;
else
   pwm6=0;
  //------------------------------

   
}
void delay(uint x)
  {
  uint i,j;
  for(i=x;i>0;i--)
    for(j=12;j>0;j--);
  }

void T0_time()interrupt 1  //中断
{
TH0=(65536-130)/256;                 //频率为100HZ,周期20MS
TL0=(65536-130)%256;
    if(set==100)  a1++;
        set++;
    if(set>400) set=0;   //电机2PWM

没有看明白是什么回事

小编出来解说一下吧

谢谢小编的无私分享啊吖啊啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top