机器人控制程序(舵机型)机器人控制程序(舵机型)
这里给大家分享一个机器人控制程序(舵机型)。
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// 包含头文件(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