// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // 包含头文件(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