轮式移动机器人的设计报告
void youzhuan() {
M1A=1; M1B=0; M2A=0; M2B=1; }
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
21
轮式移动机器人的设计报告
{
houtui(); //M2电机反转 break; }
case 3: //左转 //判断用户是否选择形式3 {
zuozhuan(); //M2电机正转 break;
}
case 4: //右转 // {
youzhuan(); //M1 //M2 break; }
case 8: //停止 // {
tingzhi(); break; // } } }
void main() //{
bit RunFlag=0; // //RunShow=0; //
ControlCar(8); // while(1) // { Start:
LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR;
判断用户是否选择形式4 电机正转 电机反转 判断用户是否选择形式8 退出当前选择 主程序入口 定义小车运行标志位 初始化显示状态 初始化小车运行状态 程序主循环 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 22
轮式移动机器人的设计报告
SB1=LeftIR;
if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进 {
ControlCar(1); //左侧没有信号时,开始向右转一定的角度 delay_nms (10);
goto NextRun;
}
if(LeftIR == 0 && RightIR == 1) {
ControlCar(3); // delay_nms (10);
goto NextRun;
}
if(LeftIR == 1 && RightIR == 0) {
ControlCar(4); // delay_nms (10);
goto NextRun;
}
goto Start; NextRun: ControlCar(8); } }
右侧没有信号时,开始向左转一定的角度 右侧没有信号时,开始向左转一定的角度 23
轮式移动机器人的设计报告
第五章 总结
通过此次课程设计,使我更加扎实的掌握了有关智能小车设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在单片机这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵,而是通过自己的双手去实践。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可。
参考文献
[1] 杨永辉.《现代电子技术》[J] .智能小车的多传感器数据融合.2005
[2] 何立民.《单片机与嵌入式系统应用》[J].基于HCS12的小车智能控制系统设计.2007 [3] 谭浩强.《C程序设计》.北京:清华大学出版社,2005,7 [4] 张立.《电子世界》[J].电动小车的循迹.2004
[5] 武庆生,仇梅.单片机原理与应用(M).电子科技大学出版,1998,12 [6] 徐科军.传感器与检测技术[M].电子工业出版社,2007 [7] 刘瑞新.单片机原理及应用教程 .机械工业出版社,2003,7 [8] 刘湘涛,江世明.单片机原理与应用[M].电子工业出版社,2006 [9] 何立民.单片机初级教程[M].北京航空航天大学出版社,1999 [10] 熊建云. Protel99 SE.北京:机械工业出版社,2007
[11] 郑郁正.单片机原理及应用.四川大学出版杜,2003 [12] 卢静,陈非凡,张高飞等.基于单片机的无刷直流电动机控制系统设计.北京机械工业学院学报,2002,10 [13] 张燕,曾光宇.光电式传感器的应用与发展[J].科技情报开发与经济,2007
24
轮式移动机器人的设计报告
附录1程序清单
#include
sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 sbit FontLled=P1^7;
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; //定义语音识识别传感器端口 sbit SB1=P0^6; //定义蜂鸣器端口
sbit IRIN=P3^3; //定义红外接收端口
unsigned char code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 unsigned char code RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F}; unsigned char IRCOM[7];
static unsigned int LedFlash; //定义闪动频率计数变量 bit EnableLight=0; //定义指示灯使能位 #define ShowPort P2 //定义数码管显示端口 unsigned char temp = 1; void tingzhi() {
M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; //将M2电机A端初始化为0 M2B=0; }
void qianjin() {
M1A=1;
25