轮式移动机器人的设计报告
M1B=0; M2A=1; M2B=0; }
void houtui() {
M1A=0; M1B=1; M2A=0; M2B=1; }
void zuozhuan() {
M1A=0; M1B=1; M2A=1; M2B=0; }
void youzhuan() {
M1A=1; M1B=0; M2A=0; M2B=1; }
void Delay1ms(unsigned int i) {
unsigned char j,k; do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); }
void delay_nus(unsigned int i) //
延时:i>=12 ,i的最小延时单12 us 26
轮式移动机器人的设计报告
{ i=i/10; while(--i); }
void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)
delay_nus(900); //延时 1ms,同时进行补偿 }
void delayms(unsigned char x) //0.14mS{
unsigned char i; // while(x--) // {
for (i = 0; i<13; i++) {} //14mS } }
void Delay() //{
unsigned int DelayTime=30000; // while(DelayTime--); // return; //}
void ControlCar(unsigned char ConType) //{
tingzhi();
switch(ConType) // {
case 1: //前进 // {
//tingzhi();
击主板 导致系统复位 //Delay1ms(50); LeftLed = 0 ; qianjin();
break;
}
case 2: //后退 // {
// tingzhi();
延时程序 定义临时变量 延时时间循环 延时 定义延时子程序 定义延时时间变量 开始进行延时循环 子程序返回 定义电机控制子程序 判断用户设定电机形式 判断用户是否选择形式1 //进入前进之前 先停止一段时间 防止电机反向电压冲
判断用户是否选择形式2
//进入后退之前 先停止一段时间 防止电机反向 27
轮式移动机器人的设计报告
电压冲击主板 导致系统复位 // Delay1ms(50); LeftLed = 1 ; }
case 3: //左转 //判断用户是否选择形式3 {
//tingzhi(); }
case 4: //右转 //判断用户是否选择形式4 {
// tingzhi(); // Delay1ms(50); }
case 8: //停止 //判断用户是否选择形式8 {
tingzhi(); } } }
void ControlCar_yaokong(unsigned char ConType) //定义电机控制子程序 switch case 语句 ) {
tingzhi();
switch(ConType) //判断用户设定电机形式 {
case 1: //前进 //判断用户是否选择形式1 {
tingzhi();
//进入前进之前 先停止一段时间 防止电机反向电压冲
击主板 导致系统复位
Delay1ms(150); LeftLed = 0 ; qianjin();
28
(红外遥控单独设置一个
break; //退出当前选择 youzhuan(); //M1电机正转 break;
//M2电机反转
//进入右转之前 先停止一段时间 防止电机反向
电压冲击主板 导致系统复位
// Delay1ms(50);
zuozhuan(); //M2电机正转 break;
//进入左转之前 先停止一段时间 防止电机反向
电压冲击主板 导致系统复位
houtui(); //M2电机反转 break;
轮式移动机器人的设计报告
break; }
case 2: //后退 //判断用户是否选择形式2 {
tingzhi();
//进入后退之前 先停止一段时间 防止电机反向
电压冲击主板 导致系统复位 Delay1ms(150); LeftLed = 1 ; houtui(); //M2电机反转 break;
}
case 3: //左转 // {
tingzhi();
电压冲击主板 导致系统复位
Delay1ms(150);
zuozhuan(); //M2 break;
}
case 4: //右转 // {
tingzhi();
电压冲击主板 导致系统复位
Delay1ms(150); youzhuan(); //M1 break;
}
case 8: //停止 // {
tingzhi(); break; // } } }
void Robot_Avoidance() //{
LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR; SB1=FontIR;
if(FontIR == 0) // {
ControlCar(8); //
判断用户是否选择形式3
//进入左转之前 先停止一段时间 防止电机反向
电机正转 判断用户是否选择形式4
//进入右转之前 先停止一段时间 防止电机反向
电机正转 //M2电机反转
判断用户是否选择形式8 退出当前选择
机器人避障子程序 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 如果前面避障传感器检测到障碍物 停止 29
轮式移动机器人的设计报告
delay_nms (300); } else {
ControlCar(1); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }
ControlCar(1); }
//机器人循迹子程序
void Robot_Traction() //机器人循迹子程序 {
LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态 FontLled= FontIR; SB1=LeftIR;
if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进 {
ControlCar(1); //左侧没有信号时,开始向右转一定的角度 delay_nms (10); }
else if(LeftIR == 0 && RightIR == 1) {
ControlCar(3); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }
else if(LeftIR == 1 && RightIR == 0) {
ControlCar(4); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }
ControlCar(8); }
void main() //主程序入口 {
bit RunFlag=0; //定义小车运行标志位
LedFlash=3000; //对闪灯数据进行初始化
30
ControlCar(2); delay_nms (1000); ControlCar(3); delay_nms (1800);
//停止300MS 防止电机反相电压冲击 导致系统复位 //后退
//后退1500MS //