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