轮式移动机器人的设计报告
void qianjin() {
M1A=1; M1B=0; M2A=1; M2B=0; }
void houtui() {
M1A=0; M1B=1; M2A=0; M2B=1; }
void zuozhuan() {
M1A=1; M1B=0; M2A=0; M2B=1; }
void youzhuan() {
M1A=0; M1B=1; M2A=1; M2B=0; }
16 轮式移动机器人的设计报告
void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us { i=i/10; while(--i); }
void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)
delay_nus(900); //延时 1ms,同时进行补偿 }
void ControlCar(unsigned char ConType) //定义电机控制子程序 {
tingzhi();
switch(ConType) //判断用户设定电机形式 {
case 1: //前进 //判断用户是否选择形式1 {
qianjin(); break; }
case 2: //后退 //判断用户是否选择形式2 {
houtui(); //M2电机反转 break; }
case 3: //左转 //判断用户是否选择形式3 {
zuozhuan(); //M2电机正转 }
17
break;
轮式移动机器人的设计报告
case 4: //右转 //判断用户是否选择形式4 {
youzhuan(); //M1电机正转 //M2电机反转 }
case 8: //停止 //判断用户是否选择形式8 break;
{
tingzhi(); break; // } } }
void main() //{
bit RunFlag=0; // //RunShow=0; //
ControlCar(8); // while(1) // { Start:
LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR; SB1=FontIR;
if(FontIR == 0) // {
ControlCar(8); // delay_nms (300); ControlCar(2); delay_nms (1000); ControlCar(3);
退出当前选择 主程序入口 定义小车运行标志位 初始化显示状态 初始化小车运行状态 程序主循环 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 如果前面避障传感器检测到障碍物 停止 //停止300MS 防止电机反相电压冲击 导致系统复位 //后退
//后退1500MS
//
18
轮式移动机器人的设计报告
delay_nms (1800); goto NextRun;
}
if(FontIR == 1 ) {
ControlCar(1); //右侧没有信号时,开始向左转一定的角度 delay_nms (10);
goto NextRun;
}
goto Start; NextRun: ControlCar(1); } 循迹程序
#include
sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 sbit FontLled=P1^0;
sbit LeftIR=P3^5; //定义前方左侧红外探头端口 sbit RightIR=P3^6; //定义前方右侧红外探头端口 sbit FontIR=P3^7; //定义前方正前方红外探头端口
sbit M1A=P0^0; //定义左侧电机驱动A端 sbit M1B=P0^1; //定义左侧电机驱动B端
sbit M2A=P0^2; //定义右侧电机驱动A端 sbit M2B=P0^3; //定义右侧电机驱动B端
sbit B1=P0^4; //定义语音识识别传感器端口
19
轮式移动机器人的设计报告
sbit SB1=P0^6; //定义蜂鸣器端口
void tingzhi() {
M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; // M2B=0; }
void qianjin() {
M1A=1; 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; }
将M2电机A端初始化为0 20