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

2019-07-15 15:52发布

#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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
williamzhang0
1楼-- · 2019-07-15 16:49
没有看明白是什么回事
williamzhang0
2楼-- · 2019-07-15 22:46
楼主出来解说一下吧
lp582034855
3楼-- · 2019-07-15 23:07
谢谢楼主的无私分享啊吖啊啊

一周热门 更多>