// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 包含头文件(Includes)
// 基本资源定义(Definition of basic resources)
// 机器人型号:HGR-3M-C-1
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
#include <reg52.h>
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 宏定义(Acer definition)
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
#define uchar unsigned char
#define uint  unsigned int
#define HIGH 1                      //高电平(Logic high)
#define LOW 0                       //低电平(Logic low)
#define FALSE 0                     //假
#define TRUE ~FALSE                 //真
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 函数声明(Function declaration)
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
extern void delay_8us();            //把delay_8us()声明为外部函数
extern void delay_20us();           //把delay_20us()声明为外部函数
extern void delay_200us();          //把delay_200us()声明为外部函数
extern void delay_490us();          //把delay_490us()声明为外部函数
extern void delay_500us();          //把delay_500us()声明为外部函数
extern void delay_1ms();            //把delay_1ms()声明为外部函数
extern void delay_2ms();            //把delay_2ms()声明为外部函数
extern void delay_5ms();            //把delay_5ms()声明为外部函数
extern void delay_10ms();           //把delay_10ms()声明为外部函数
extern void delay_200ms();          //把delay_200ms()声明为外部函数
extern void delay_500ms();          //把delay_500ms()声明为外部函数
extern void delay_1000ms();         //把delay_1000ms()声明为外部函数
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 全局变量定义(Global variables defined)
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
uchar position[24]={0};             //用于记录24个舵机的位置
/*
        数组对应端口说明:
         ━━━━━>>      P1.0          z1舵机     汇编存储器  40H
         position[1]       ━━━━━>>      P1.1          z2舵机                 41H
         position[2]       ━━━━━>>      P1.2          z3舵机                 42H
         position[3]       ━━━━━>>      P1.3          z4舵机                 43H
         position[4]       ━━━━━>>      P1.4          z5舵机                 44H
         position[5]       ━━━━━>>      P1.5          z6舵机                 45H
         position[6]       ━━━━━>>      P1.6          z7舵机                 46H
         position[7]       ━━━━━>>      P1.7          z8舵机                 47H
         position[8]       ━━━━━>>      P2.0          p1舵机                 48H
         position[9]       ━━━━━>>      P2.1          p2舵机                 49H
         position[10]      ━━━━━>>      P2.2          p3舵机                 4AH
         position[11]      ━━━━━>>      P2.3          p4舵机                 4BH
         position[12]      ━━━━━>>      P2.4          p5舵机                 4CH
         position[13]      ━━━━━>>      P2.5          p6舵机                 4DH
         position[14]      ━━━━━>>      P2.6          p7舵机                 4EH
         position[15]      ━━━━━>>      P2.7          p8舵机                 4FH
         position[16]      ━━━━━>>      P3.0
         position[17]      ━━━━━>>      P3.1
         position[18]      ━━━━━>>      P3.2
         position[19]      ━━━━━>>      P3.3
         position[20]      ━━━━━>>      P3.4
         position[21]      ━━━━━>>      P3.5
         position[22]      ━━━━━>>      P3.6
         position[23]      ━━━━━>>      P3.7
*/
uchar kouchu[8];
uchar uart[30]={0};
uchar paixu_ncha[8]=0;      //提供排序空间
//关于扫尾值的参数
uchar zsax=10 ;                //14h,z平面sa修正参数
uchar psax=8;                //15h,p平面sa修正参数     交互2
uchar zsag;                 //16h,z平面sa过渡参数
uchar psag=27;                 //17h,p平面sa过渡参数
uchar uartin;
uchar uartout;
unsigned char add;
//红外线接收处理    红外线一共是4个字节的数据:包括,地址、地址的重复、数据、和数据的按位取反
//变量定义:
char     inf_array[2]      = 0;     //红外线接收队列
char     inf_dizhi         = 0;     //确认最新数据
char     inf_dizhichou     = 0;
char     inf_shuju         = 0;
char     inf_shujuf        = 0;
char     inf_dizhi_buf     = 0;     //缓冲区数据,有可能随时变化,不可相信
char     inf_dizhichou_buf = 0;
char     inf_shuju_buf     = 0;
char     inf_shujuf_buf    = 0;
char     inf_shunxu        = 0;     //输入次序,记录目前红外线接收的次序。
int      inf_zanshi        = 0;     //红外线数据暂时存储,在使用前应注意其值
char     inf_zanshi1       = 0;     //另一个暂时数据,用来做校验
char bdata  inf_mode       = 0;     //红外线状态及控制变量,按位使用
sbit     inf_mode_en       = inf_mode^7;
sbit     inf_mode_new      = inf_mode^6;
sbit     inf_mode_cuowu    = inf_mode^0;
sbit     P3_2              = P3^2;
sbit     P3_3              = P3^3;
sbit     P3_4              = P3^4;
sbit     TEST              = P2^1;
sbit     fengming          = P0^0;
/***********************************************************************************/
#define  kaishizhi_l       100      //此值为引导码最低阈值
#define  kaishizhi_h       230      //此值为引导码最高阈值
#define  inf_lingzhi_l     0x07     //此值为"0"码最低阈值
#define  inf_lingzhi_h     0x17     //此值为"0"码最高阈值
#define  inf_yizhi_l       0x18     //此值为"1"码最低阈值
#define  inf_yizhi_h       0x27     //此值为"1"码最高阈值
#define  inf_code_0        0x0F
#define  inf_code_1        0x0E
#define  inf_code_2        0x99     //正常应该是0x10但是不知道为什么不成
#define  inf_code_3        0x01
#define  inf_code_4        0x02
#define  inf_code_5        0x03
#define  inf_code_6        0x04
#define  inf_code_7        0x05
#define  inf_code_8        0x06
#define  inf_code_9        0x07
#define  inf_code_10       0x08
#define  inf_code_11       0x09
#define  inf_code_12       0x0A
#define  inf_code_13       0x00
#define  inf_code_14       0x24
#define  inf_code_15       0x20
#define  inf_code_16       0x1E
#define  inf_code_17       0x18
#define  inf_code_18       0x1A
#define  inf_code_19       0x16
#define  inf_code_20       0x0B
#define  inf_code_21       0x12
#define  inf_code_22       0x10
#define  inf_code_23       0x11
#define  inf_code_24       0x0C
#define  inf_code_25       0x28
#define  inf_code_26       0x17
#define  inf_code_27       0x13
/*************************************************************************************/
// ─────────────────────────────────────────
// 函数原型:void initial_mcu()
// 函数名称:初始化函数(Initialization MCU Functions)
// 功    能:单片机初始化
// 参    数:
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void initial_mcu( )
{
         P0    = 0x01;              //四个口全赋值为零
         P1    = 0x00;
         P2    = 0x00;
//       P3    = 0x01;
         PSW   = 0x00;              //选择00H->07H为工作寄存器组
         ACC   = 0x00;              //A B寄存器为零
         B     = 0x00;
//       PCON  = 0x00;
//       TCON  = 0x00;
         SCON  = 0x50;
         TMOD  = 0x20;
//       TH1   = 0xe8;          //11.0592晶振,1200波特率
//      TL1   = 0xe8;
       TH1   = 0xe6;            //12M晶振 ,1200波特率
       TL1   = 0xe6;
        TR1 =1;                //启动定时器T1
         ES=1;                  //允许串行口中断
         PS=1;                  //设计串行口中断优先级
         EA=1;      
         uartin=0;
         uartout=0;
        
}
//───────────────────────────────────────
//初始化红外线接收变量函数
void init_inf(void)
{
    inf_array[0]=0xFF;
    inf_array[1]=0xFF;
    inf_dizhi_buf     = 0;
    inf_dizhichou_buf = 0;
    inf_shuju_buf     = 0;
    inf_shujuf_buf    = 0;
    inf_dizhi         = 0;
    inf_dizhichou     = 0;
    inf_shuju         = 0;
    inf_shujuf        = 0;
    inf_shunxu        = 0;
    inf_mode_en       = 1;      //开红外线接收软件模块
    inf_mode_cuowu    = 0;      //清除错误
    /*我们需要使用两部分的硬件资源,
    一是定时器1,
    二是外部中断0,
    下面是分别的初始化:*/
    P3_3 = 1;
    P3_4 = 1;
    //初始化定时器1:
    TMOD  = TMOD & 0x0F;        //初始化定时器1的计数方式为方式1
    TMOD  = TMOD | 0x10;
    TH1   = 0x1F;               //定时器高位
    TL1   = 0xFF;               //定时器低位
    TR1   = 0;                  //关定时器1计数
    IE    = IE | 0x88;          //总中断和定时器1要打开
    //初始化外部中断1:
    IT1   = 1;                  //INT1的处罚方式为下降沿触发
    IE    = IE | 0x84;          //总中断和外部中断1要打开
}
// ─────────────────────────────────────────
// 函数原型:void sorting( )
// 函数名称:排序子程序(Sorting Subroutine)
// 功    能:对所有通道口的数值进行排序。
// 参    数:
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void sorting( )
{
    uchar i=0,j=0,x=0;
          kouchu[0]=0xFE;
          kouchu[1]=0xFD;
          kouchu[2]=0xFB;
          kouchu[3]=0xF7;
          kouchu[4]=0xEF;
          kouchu[5]=0xDF;
          kouchu[6]=0xBF;
          kouchu[7]=0x7F;
    
    //冒泡法排序
    for(i=0;i<=6;i++)
         for(j=i+1;j<=7;j++)
         {
                  if(paixu_ncha[i]<paixu_ncha[j])
                  {                                       //交换数据
                           x=paixu_ncha[j];
                           paixu_ncha[j]=paixu_ncha[i];
                           paixu_ncha[i]=x;
                           x=kouchu[j];
                           kouchu[j]=kouchu[i];
                           kouchu[i]=x;
                  }
         }
}
// ─────────────────────────────────────────
// 函数原型:void N_value( )
// 函数名称:N差子程序(N poor Subroutine)
// 功    能:对临近数值做差,求出相对差值,用于延时。
// 参    数:
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void N_value( )
{       uchar i;
         for(i=0;i<=6;i++)
         {
                  paixu_ncha[i]=paixu_ncha[i]-paixu_ncha[i+1];
         }
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// 函数原型:void PWM_16()
// 函数名称:16路舵机输出子程序(16 Subroutine output Servos )
// 功    能:对临近数值做差,求出相对差值,用于延时。控制端口P1、P2
// 入口参数:foot,表示步数
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void PWM_16()
{        uchar i=0,j=0;
         for(i=0;i<=7;i++)          //给排序数组赋值
         {
              paixu_ncha[i]=position[i];
         }
         sorting( );                //调用排序函数
         N_value( );                //调用N差函数
         P1=0xff;                   //使口P1全部拉高
         
         delay_500us();             //调用延时490us函数
         for(i=0;i<8;i++)           //延时输出到口P1(八路)
         {
                  for(j=0;j<paixu_ncha[7-i];j++)
                  {
                           delay_8us();
                  }
                  P1=P1&kouchu[7-i];
         }
         for(i=0;i<8;i++)          //给排序数组赋值
         {
                  paixu_ncha[i]=position[i+8];
         }
         sorting( );                //调用排序函数
         N_value( );                //调用N差函数
         P2=0xff;                   //使口P2全部拉高
         
         delay_500us();             //调用延时490us函数
         for(i=0;i<8;i++)           //延时输出到口P1(八路)
         {        for(j=0;j<paixu_ncha[7-i];j++)
                  {
                           delay_8us();
                  }
                  P2=P2&kouchu[7-i];
         }
         for(i=0;i<1;i++)
         delay_500us();
     }
// ─────────────────────────────────────────
// 函数原型:sao_wei(uchar saowei)
// 函数名称:扫尾子程序
// 功    能:控制舵机转动的速度和加速度
// 影    响:
// 入口参数:saowei,表示扫尾系数
// 返 回 值:无
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void sao_wei(uchar saowei)
{
  uchar i;
  for(i=0;i<saowei;i++)
  delay_500us();
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
/************************************************************************************/
/************************************************************************************/
//所谓函数群指的是一群实现功能相似或相反的函数集合
/************************************************************************************/
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                           /*复位函数群*/
// 函数原型:void initial_position(uchar type,uchar time)
// 函数名称:初始位置调整子程序
// 功    能:按照入口参数的类型,选择不同的初始位置并调节。
// 参    数:type<-用于决定初始位置类型(局部变量)。
//           time<-用于确定初始位置的调整时间(局部变量)。
// 返 回 值:无
// 函数编号:壹
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void initial_position(uchar type,uchar time)                 
{        uchar i,j,k;
         for(i=0;i<time;i++)
                  for(j=0;j<type;j++)
                           for(k=0;k<30;k++)
                           {
                           /*P1口*/                 //  标准   
                           position[0]=131;         //z1舵机  160       左腿
                           position[1]=45;          //Z2舵机  47        
                           position[2]=129;         //z3舵机  135    
                           position[3]=86;          //Z4舵机  80        右腿   
                           position[4]=175;         //Z5舵机  158            
                           position[5]=91;          //Z6舵机  128       
                           position[6]=225;         //Z7舵机  220       左肩
                           position[7]=5;           //Z8舵机            右肩 
                           /*P2口*/ 
                           position[8]=105;         //p1舵机  104       左脚板  
                           position[9]=82;          //p2舵机  104       
                           position[10]=125;        //p3舵机  146       右脚板
                           position[11]=111;        //p4舵机  146       
                           position[12]=190;        //p5舵机   180
                           position[13]=108;        //p6舵机 
                           position[14]=25;         //p7舵机    40   
                           position[15]=120;        //p8舵机             
                           /*p3口*/
                           position[23]=110;
                           PWM_16();
                          // sao_wei(100);  
                           }
                     // while(1);
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                           /*复位函数群*/
// 函数原型:void initial_position1(uchar type,uchar time)
// 函数名称:初始位置调整子程序1
// 功    能:当下蹲以后,双腿会出现不对称现象,故加二次调整初始位置
// 参    数:type<-用于决定初始位置类型(局部变量)。
//           time<-用于确定初始位置的调整时间(局部变量)。
// 返 回 值:无
// 函数编号:壹
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void initial_position1(uchar type,uchar time)                 
{        uchar i,j,k;
         for(i=0;i<time;i++)
                  for(j=0;j<type;j++)
                           for(k=0;k<30;k++)
                           {
                           /*P1口*/                 //  标准   
                           position[0]=97;          //z1舵机  160    左腿
                           position[1]=143;         //Z2舵机  47        
                           position[2]=181;         //z3欢纡  135    
                           position[3]=138;         //Z4舵机  80     右腿   
                           position[4]=92;          //Z5舵机  158        
                           position[5]=60;          //Z6舵机  128    
                           position[6]=190;         //Z7舵机         左肩
                           position[7]=30;          //Z8舵机         右肩 
                           /*P2口*/ 
                           position[8]=147;         //p1舵机  104    左脚板  
                           position[9]=138;         //p2舵机  104  
                           position[10]=175;        //p3舵机  146    右脚板
                           position[11]=109;        //p4舵机  146    
                           position[12]=166;        //p5舵机 
                           position[13]=100;        //p6舵机 
                           position[14]=60;         //p7舵机       
                           position[15]=130;        //p8舵机        
                           /*p3口*/
                           position[23]=110;
                           PWM_16();
                          // sao_wei(100);  
                           }
                    //   while(1);
}
// 函数原型:void fw_hand(uchar type,uchar time)
// 函数名称:双手复位子程序  
// 功    能:双手复位
// 参    数:type<-用于决定初始位置类型(局部变量)。
//           time<-用于确定初始位置的调整时间(局部变量)。
// 返 回 值:无
// 函数编号:贰
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void fw_hand(uchar type,uchar time)                 
{        uchar i,j,k;
         for(i=0;i<time;i++)
                  for(j=0;j<type;j++)
                           for(k=0;k<30;k++)
                           {
                          
                           position[6]=220;         //220 Z7舵机       左肩
                           
                           position[7]=27;          //Z8舵机           右肩 
                           
                           position[12]=195;        //p5舵机 
                           position[13]=95;         //p6舵机 
                           position[14]=55;         //p7舵机       
                           position[15]=160;        //p8舵机        
                           PWM_16();
                           }
}                             
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                                    /*下蹲和起立函数群*/
// 函数原型:void xd_zu1(uchar foot))
// 函数名称:下蹲第1族子程序。
// 功    能:
// 参    数:foot, 表示积分步数。
// 返 回 值:无
// 函数编号:一
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void xd_zu1(uchar foot)
{        
         uchar i,j;
         j=foot/2+zsax;                    //z平面扫尾值初始化计算公式  28/2+6=20
       for(i=0;i<foot;i++)
            {
               position[0]--;              //z1   190+28=218   左腿下蹲
               position[1]++;              //z2   91+2*28=147
               position[1]++;
               position[2]++;              //z3   133-28=105
               
               position[3]++;              //z4   101-28=73    右腿下蹲
               position[4]--;              //z5   158-2*28=102
               position[4]--;
               position[5]--;              //z6   149+28=177
               PWM_16();
               if(j>5)
                 {
                   j--;
                   sao_wei(j);            //调用扫尾值计算子程序,最后zsag=5
                   zsag=j;
                 } 
               else 
                 {
                   sao_wei(5);
                   zsag=5;
                 }
            }
}   
// 函数原型:void xd_zu2(uchar foot))
// 函数名称:下蹲第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值:无
// 函数编号:二
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void xd_zu2(uchar foot)
{        
         uchar i,j;
         j=zsag;                           //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
               position[0]--;              //z1   218+28=246   左腿下蹲
               position[1]++;              //z2   147+2*28=203
               position[1]++;
               position[2]++;              //z3   105-28=77
               position[3]++;              //z4   73-28=45     右腿下蹲
               position[4]--;              //z5   102-2*28=46
               position[4]--;
               position[5]--;              //z6   177+28=205
               PWM_16();
               if(j<32)
                 {
                   j++;
                   sao_wei(j);             //调用扫尾值计算子程序  zsagwei为32
                   zsag=j;
                 } 
               else 
                 {
                   sao_wei(32);
                   zsag=32;
                 }
            }
}  
// 函数原型: void ql_zu1(uchar foot))
// 函数名称: 起立第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 三
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ql_zu1(uchar foot)
{        
         uchar i,j;
         j=zsag;                          //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;             //z1   左褪起立
                position[1]--;             //z2
                position[1]--;
                position[2]--;             //z3
                position[3]--;             //z4   右腿起立
                position[4]++;             //z5
                position[4]++;
                position[5]++;             //z6
                PWM_16();
               if(j>35)
                 {
                   j--;
                   sao_wei(j);             //调用扫尾值计算子程序
                   j=zsag;
                 } 
               else 
                 {
                    sao_wei(35);
                    zsag=5;
                  }
            }
}
// 函数原型:void ql_zu2(uchar foot)
// 函数名称:起立第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 四
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ql_zu2(uchar foot)
{        
         uchar i,j=0;
         j=zsag;                          //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;             //z1   左褪起立
                position[1]--;             //z2
                position[1]--;
                position[2]--;             //z3
                position[3]--;             //z4    右腿起立
                position[4]++;             //z5
                position[4]++;
                position[5]++;             //z6
                PWM_16();
               if(j<32)
                 {
                   j++;
                   sao_wei(j);            //调用扫尾值计算子程序
                   zsag=j;
                 } 
               else 
                 {
                   sao_wei(32);
                   zsag=32;
                 }
            }
}   
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                          /*侧身+摆手函数群*/                          
// 函数原型:void l_cs_r_bs_zu1(uchar foot)
// 函数名称:向左侧身+右摆手第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 五
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void l_cs_r_bs_zu1(uchar foot)
{        
         uchar i,j;
         j=psag;                          //p平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[8]--;            //p1   134-30=104  左腿
                position[9]++;            //p2   134-30=04
                position[10]--;           //p3   176-30=146  右腿
                position[11]++;           //p4   176-30=146
                position[12]++;            //p5   
                
                position[14]++;            //p7  
                PWM_16();
               if(j>5)
                 {
                   j--; 
                 
                   sao_wei(j);
                   psag=j;                  //psag为20~5
                 }  
               else 
                 {
                  sao_wei(5);
                  psag=5;
                 }
            }
}
// 函数原型:void l_cs_r_bs_zu2(uchar foot)
// 函数名称:向左侧身+右摆手第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 六
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void l_cs_r_bs_zu2(uchar foot)
{        
         uchar i,j;
          j=10;            //p平面扫尾值初始化计算公式  15&127+8=135
         for(i=0;i<foot;i++)
            {
                position[8]--;            //p1   104-30=74  左腿
                position[9]++;            //p2   104-30=74
                position[10]--;           //p3   146-30=116 右腿
                position[11]++;           //p4   146-30=116
                position[12]++;            //p5  摆手   
                position[14]++;            //p7   
                PWM_16();
               if(j<32)                   
                 {
                   j++; 
                   sao_wei(j);            //psag为5到20
                   psag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  psag=32;
                 }
            }
}
// 函数原型:void r_cs_l_bs_zu1(uchar foot)
// 函数名称:向右侧身+左摆手第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 七
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void r_cs_l_bs_zu1(uchar foot)
{        
         uchar i,j;
         j=psag;                          //p平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[8]++;            //p1    74+30=104  左腿    
                position[9]--;            //p2    74+30=104
                position[10]++;           //p3    116+30=146 右腿
                position[11]--;           //p4    116+30=146
                position[12]--;            //p5   摆手 
                position[14]--;            //p7  
                PWM_16();
               if(j>6)
                 {
                   j--;
                   sao_wei(j);
                   psag=j;                   //psag为20~5
                 } 
               else 
                 {
                   sao_wei(6);
                   psag=5;
                 }
            }
}
// 函数原型:void r_cs_l_bs_zu2(uchar foot)
// 函数名称:向右侧身+左摆手第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 八
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void r_cs_l_bs_zu2(uchar foot)
{       
         uchar i,j;
         j=psag;                          //p平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[8]++;            //p1   104+30=134  左腿
                position[9]--;            //p2   104+30=134
                position[10]++;           //p3   146+30=176  右腿
                position[11]--;           //p4   146+30=176
                position[12]--;            //p5   摆手                
                position[14]--;            //p7  
                PWM_16();
               if(j<20)
                 {
                   j++;                  
                   sao_wei(j);
                   psag=j;                  //psag为5~20
                 } 
               else 
                 {
                  sao_wei(20);
                  psag=20;
                 }
            }
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                                  /*抬腿和落腿函数群*/
// 函数原型:void lt_up_zu1(uchar foot)
// 函数名称:左腿抬起第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 九
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lt_up_zu1(uchar foot)
{        
         uchar i,j;                       //z平面扫尾值初始化计算公式
          j=(foot/2)+zsax; 
         for(i=0;i<foot;i++)
            {
                position[0]--;            //z1
                position[1]++;            //z2 
                position[1]++;           
                position[2]++;            //z3
                PWM_16();
               if(j>5)
                 {
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void lt_up_zu2(uchar foot)
// 函数名称:左腿抬起第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lt_up_zu2(uchar foot)
{        
         uchar i,j;
          j=zsag;                         //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]--;            //z1
                position[1]++;            //z2 
                position[1]++;           
                position[2]++;            //z3
                PWM_16();
               if(j<32)
                 {
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// 函数原型:void rt_up_zu1(uchar foot)
// 函数名称:右腿抬起第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十一
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rt_up_zu1(uchar foot)
{        
         uchar i,j;
          j=zsag;                        //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[3]++;           //z4
                position[4]--;           //z5
                position[4]--;
                position[5]--;           //z6
                PWM_16();
               if(j>5)
                 {
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void rt_up_zu2(uchar foot)
// 函数名称:右腿抬起第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十二
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rt_up_zu2(uchar foot)
{        
         uchar i,j;
          j=zsag;                       //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[3]++;           //z4
                position[4]--;           //z5
                position[4]--;
                position[5]--;           //z6
                PWM_16();
               if(j<32)
                 {
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// 函数原型:void lt_dw_zu1(uchar foot)
// 函数名称:左腿落下第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十三
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lt_dw_zu1(uchar foot)
{        
         uchar i,j;
          j=zsag;                      //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;         //z1
                position[1]--;         //z2
                position[1]--;
                position[2]--;         //z3
                PWM_16();
               if(j>5)
                 {
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void lt_dw_zu2(uchar foot)
// 函数名称:左腿落下第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十四
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lt_dw_zu2(uchar foot)
{        
         uchar i,j;
          j=zsag;                     //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;         //z1
                position[1]--;         //z2
                position[1]--;
                position[2]--;         //z3
                PWM_16();
               if(j<32)
                 {
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// 函数原型:void rt_dw_zu1(uchar foot)
// 函数名称:右腿落下第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十五
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rt_dw_zu1(uchar foot)
{        
         uchar i,j;                    //z平面扫尾值过渡
          j=zsag;
         for(i=0;i<foot;i++)
            {
                position[3]--;         //z4
                position[4]++;         //z5
                position[4]++;
                position[5]++;         //z6
                PWM_16();
               if(j>5)
                 {
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void rt_dw_zu2(uchar foot)
// 函数名称:右腿落下第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十六
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rt_dw_zu2(uchar foot)
{        
         uchar i,j;
          j=zsag;                       //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[3]--;         //z4
                position[4]++;         //z5
                position[4]++;
                position[5]++;         //z6
                PWM_16();
               if(j<32)
                 {
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                                 /*前进中腿抬起和落下函数群*/
// 函数原型:void ft_ru_zu1(uchar foot)
// 函数名称:前进中右腿抬起第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十七
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ru_zu1(uchar foot)
{        
         uchar i,j;
         j=(foot/2)&127+zsax;             //z平面扫尾值初始化计算公式   j=133
         for(i=0;i<foot;i++)
            {
                position[0]++;           //z1  246-10=236  左腿
                position[2]++;           //z3  77-10=67
                position[3]++;           //z4  45-2*10=25  右腿
                position[3]++;
                position[4]--;           //z5  46-2*10=26
                position[4]--;
                PWM_16();
               if(j>5)
                 {
                   j--;
                   j--; 
                   sao_wei(j);           // 最后zsag=113        抖动
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void ft_ru_zu2(uchar foot)
// 函数名称:前进中右腿抬起第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十八
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ru_zu2(uchar foot)
{        
         uchar i,j;
         j=zsag;                         //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;           //z1  236-10=226   左腿
                position[2]++;           //z3  67-10=57
                position[3]++;           //z4  25-2*10=5    右腿
                position[3]++;         
                position[4]--;           //z5  26-2*10=6
                position[4]--;
                PWM_16();
               if(j<32)
                 {
                   j++;
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// 函数原型:void ft_rd_zu1(uchar foot)
// 函数名称:前进中右腿落下第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 十九
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_rd_zu1(uchar foot)
{        
         uchar i,j;
         j=zsag;                        //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;          //z1    226-10=216   左腿
                position[2]++;          //z3    57-10=47
             
                position[4]++;          //z5    6+2*10=26
                position[4]++;          
                position[5]++;          //z6    205-2*10=185
                position[5]++;
                PWM_16();
               if(j>5)
                 {
                   j--;
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void ft_rd_zu2(uchar foot)
// 函数名称:前进中右腿落下第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_rd_zu2(uchar foot)
{        
         uchar i,j;
         j=zsag;                       //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]++;          //z1   216-10=206  左腿
                position[2]++;          //z3   47-10=37
             
                position[4]++;          //z5   26+2*10=46  右腿
                position[4]++;          
                position[5]++;          //z6   185-2*10=165
                position[5]++;
                PWM_16();
               if(j<32)
                 {
                   j++;
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=53;
                 }
            }
}
// 函数原型:void ft_lu_zu1(uchar foot)
// 函数名称:前进中左腿抬起第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十一
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_lu_zu1(uchar foot)
{        
         uchar i,j;
         j=zsag;                           //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[0]--;             //z1    206+20=226   左腿
                position[0]--;
                position[1]++;             //z2    203+20=223
                position[1]++;
                
                position[3]--;             //z4    5+10=15     右腿
                position[5]--;             //z6    165+10=175
                PWM_16();
               if(j>5)
                 {
                   j--;
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void ft_lu_zu2(uchar foot)
// 函数名称:前进中左腿抬起第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十二
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_lu_zu2(uchar foot)
{        
         uchar i,j;
         j=zsag;                          //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                
                position[0]--;             //z1   226+20=246   左腿
                position[0]--;
                position[1]++;             //z2   223+20=243
                position[1]++;
                position[3]--;             //z4   15+10=25     右腿
                position[5]--;             //z6   175+10=185
                PWM_16();
               if(j<32)
                 {
                   j++;
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(32);
                  zsag=32;
                 }
            }
}
// 函数原型:void ft_ld_zu1(uchar foot)
// 函数名称:前进中左腿落下第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十三
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ld_zu1(uchar foot)
{        
         uchar i,j;
         j=zsag;                          //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[1]--;            //z2     243-20=223   左腿
                position[1]--;
                position[2]--;            //z3     37+20=57
                position[2]--;
                
                position[3]--;            //z4     25+10=35     右腿
                position[5]--;            //z6     185+10=195
                PWM_16();
               if(j>5)
                 {
                   j--;
                   j--; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(5);
                  zsag=5;
                 }
            }
}
// 函数原型:void ft_ld_zu2(uchar foot)
// 函数名称:前进中左腿落下第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十四
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ld_zu2(uchar foot)
{        
         uchar i,j;
         j=zsag;                           //z平面扫尾值过渡
         for(i=0;i<foot;i++)
            {
                position[1]--;            //z2     223-20=203   左腿
                position[1]--;
                position[2]--;            //z3     57+20=77 
                position[2]--;
                
                position[3]--;            //z4     35+10=45      右腿  
                position[5]--;            //z6     195+10=205
                PWM_16();
               if(j<53)
                 {
                   j++;
                   j++; 
                   sao_wei(j);
                   zsag=j;
                 } 
               else 
                 {
                  sao_wei(53);
                  zsag=53;
                 }
            }
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                               /*侧身+抬落腿+摆手函数群*/
// 函数原型:void  lc_ru(uchar foot)
// 函数名称:左侧身+抬右腿+右摆手子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十五
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lc_ru_r_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                         //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[0]++;           //z1
                position[2]++;           //z3
                position[3]++;           //z4
                position[3]++;
                position[4]--;           //z5
                position[4]--;
                
                position[8]--;           //p1
                position[9]++;           //p2
                position[10]--;          //p3
                position[11]++;          //p4
                position[12]++;          //p5   
               
                position[14]++;          //p7   
              
                PWM_16();
               if(j<40)
                 {
                   j+=2;               
                   sao_wei(j);
                   psag=j;             //psag为20~30
                 } 
               else 
                 {
                  sao_wei(40);
                  psag=30;
                 }
            }
}
// 函数原型:void  rc_rd_l_bs(uchar foot)
// 函数名称:右侧身+落右腿+左摆手子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十六
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rc_rd_l_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                             //p平面扫尾过渡值,舍弃z平面过渡值              
         for(i=0;i<foot;i++)
            {
                position[0]++;               //z1
                position[2]++;               //z3
                position[4]++;               //z5
                position[4]++;
                position[5]++;               //z6
                position[5]++;
                
                position[8]++;              //p1
                position[9]--;              //p2
                position[10]++;             //p3
                position[11]--;             //p4
                position[12]--;            //p5                 
                position[14]--;            //p7   
                
                PWM_16();
               if(j>20)
                 {
                   j--;               
                   sao_wei(j);
                   psag=j;                   //psag为30~20
                 } 
               else 
                 {
                  sao_wei(20);
                  psag=20;
                 }
            }
}
// 函数原型:void  rc_lu_l_bs(uchar foot)
// 函数名称:右侧身+抬左腿+左摆手子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十七
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void rc_lu_l_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                               //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[3]--;                 //z4
                position[5]--;                 //z6
                position[0]--;                 //z1
                position[0]--;
                position[1]++;                 //z2
                position[1]++;
               
                position[8]++;                 //p1
                position[9]--;                 //p2
                position[10]++;                //p3
                position[11]--;                //p4
                position[12]--;            //p5                 
                position[14]--;            //p7   
              
                PWM_16();
               if(j<30)
                 {
                   j++;                  
                   sao_wei(j);
                   psag=j;                    //psag为20~30
                 } 
               else 
                 {
                  sao_wei(30);
                  psag=30;
                 }
            }
}
// 函数原型:void  lc_ld_r_bs(uchar foot)
// 函数名称:左侧身+落左腿+右摆手子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十八
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void lc_ld_r_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                            //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[3]--;              //z4
                position[5]--;              //z6
                position[1]--;              //z2
                position[1]--;
                position[2]--;              //z3
                position[2]--;
                
                position[8]--;              //p1
                position[9]++;              //p2
                position[10]--;             //p3
                position[11]++;             //p4
                position[12]++;            //p5                 
                position[14]++;            //p7   
              
                PWM_16();
               if(j>20)
                 {
                   j--;
                  
                   sao_wei(j);
                   psag=j;                    //psag为30~20
                 } 
               else 
                 {
                  sao_wei(20);
                  psag=20;
                 }
            }
}
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
                                /*抬落腿前进+摆手函数群*/
// 函数原型:void  ft_ru_zu2_bs(uchar foot)
// 函数名称:抬右腿前进+摆手第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 二十九
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ru_zu2_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                          //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[0]++;            //z1
                position[2]++;            //z3
                position[3]++;            //z4
                position[3]++;
                position[4]--;            //z5
                position[4]--;
 
                position[6]--;            //z7
                position[7]--;            //z8
              
                PWM_16();
               if(j<40)
                 {
                   j++;
                  
                   sao_wei(j);
                   zsag=j;            //psag=30~40
                 } 
               else 
                 {
                  sao_wei(40);
                  zsag=40;
                 }
            }
}
// 函数原型:void  ft_rd_zu1_bs(uchar foot)
// 函数名称:落右腿前进+摆手第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 三十
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_rd_zu1_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                           //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[0]++;             //z1
                position[2]++;             //z3
                position[4]++;             //z5
                position[4]++;
                position[5]++;             //z6
                position[5]++;
                position[6]--;            //z7
                position[7]--;            //z8
              
                PWM_16();
               if(j>30)
                 {
                   j--;
                 
                   sao_wei(j);
                   psag=j;             //psag=40~30
                 } 
               else 
                 {
                  sao_wei(30);
                  psag=30;
                 }
            }
}
// 函数原型:void  ft_lu_zu2_bs(uchar foot)
// 函数名称:抬左腿前进+摆手第2族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 三十一
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_lu_zu2_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                              //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[3]--;                //z4
                position[5]--;                //z6
                position[0]--;                //z1
                position[0]--; 
                position[1]++;                //z2
                position[1]++;
                position[6]++;            //z7
                position[7]++;            //z8 
              
                PWM_16();
               if(j<40)
                 {
                   j++;
                   
                   sao_wei(j);
                   psag=j;             //psag为30~40
                 } 
               else 
                 {
                   sao_wei(40);
                   psag=40;
                 }
            }
}
// 函数原型:void  ft_ld_zu1_bs(uchar foot)
// 函数名称:落左腿前进+摆手第1族子程序
// 功    能:
// 参    数: foot, 表示积分步数。
// 返 回 值: 无
// 函数编号: 三十二
// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
void ft_ld_zu1_bs(uchar foot)
{        
         uchar i,j;
         j=psag;                              //p平面扫尾过渡值,舍弃z平面过渡值
         for(i=0;i<foot;i++)
            {
                position[3]--;                //z4
                position[5]--;                //z6
                position