基于51单片机的避障小车设计(2)

2019-01-07 14:08

单片机原理及系统课程设计报告

够进一步增加测速模块以及速度显示,该避障小车的功能将更加强大。

在本次设计过程中遇到不少问题,在王思明老师和同学的帮助和配合下才顺利的完成了本次课程设计。王思明老师给予了我们极大的帮助,不仅从知识方面引导了我们的设计思路,同时,在人生观上也给了我们不少的启示。

6 参考文献

[1] 王思明.单片机原理及应用系统设计[M].北京:科学出版社,2012 [2] 胡辉.单片机原理与应用[M].北京:中国水利水电出版社,2007:10-38. [3] 林志琦.单片机原理接口及应用[M].北京:中国水利水电出版社,2007:25-54. [4] 赵克林.C语言实例教程[M].北京:人民邮电出版社,2007:48-96.

[5] 姜承昊.应用与制造新技术新工艺[M].北京:中国科学技术文献出版社,2008:37-95.

5

单片机原理及系统课程设计报告

附录1

开始程序初始化NTime>=100ms?Y延时变量归零启动检测程序计算距离SS<20cm?Y小车停止NNS>30cm?Y小车前行判别方向并动作

图2 系统总流程图

6

单片机原理及系统课程设计报告

附录2

//名称:基于51单片机的避障小车

#include #include #define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度 #define ECHO P2_4 //超声波接口定义 #define TRIG P2_5 //超声波接口定义 #define Left_moto_go{P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两电机向前走 #define Left_moto_back{P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两电机向后转 #define Left_moto_Stop{P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}//右边两电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}//右边两电机向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两电机停转 unsigned char const discode[]

={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};//定义表 unsigned char const positon[3]={ 0xfe,0xfd,0xfb}; unsigned char disbuff[4]={ 0,0,0,0,};

unsigned char posit=0; //全局变量 unsigned char pwm_val_left = 0; //变量定义 unsigned char push_val_left =14; //舵机归中,产生约,1.5MS 信号 unsigned long S=0; unsigned long S1=0; unsigned long S2=0; unsigned long S3=0; unsigned long S4=0; unsigned int time=0; //时间变量 unsigned int timer=0; //延时基准变量 unsigned char timer1=0; //扫描时间变量

/************************************************************************/ void delay(unsigned int k) //延时函数,输入外循环变量k {

unsigned int x,y; //总延时时间,(若晶振12MHZ)延时时间(t=2*k)ms for(x=0;x

/************************************************************************/ void Display(void) //扫描数码管 { if(posit==0) {P0=(discode[disbuff[posit]])&0x7f;} //产生点

7

单片机原理及系统课程设计报告

else {P0=discode[disbuff[posit]];} if(posit==0) {P2_1=0;P2_2=1;P2_3=1;} if(posit==1) {P2_1=1;P2_2=0;P2_3=1;} if(posit==2) {P2_1=1;P2_2=1;P2_3=0;} if(++posit>=3) posit=0; }

/************************************************************************/ void StartModule() //启动测距信号 { TRIG=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TRIG=0; }

/***************************************************/ void Conut(void) //计算距离 {

8

单片机原理及系统课程设计报告

while(!ECHO); //当RX为零时等待 TR0=1; //开启计数 while(ECHO); //当RX为1计数并等待 TR0=0; //关闭计数 time=TH0*256+TL0; //读取脉宽长度 TH0=0; TL0=0; S=(time*1.7)/100; //算出来是CM disbuff[0]=S00/100; //更新显示 disbuff[1]=S000/10; disbuff[2]=S00 ; }

/************************************************************************/ void run(void) //前速前进 { Left_moto_go ; //左电机往前走 Right_moto_go ; //右电机往前走 }

/************************************************************************/ void backrun(void) //前速后退 { Left_moto_back ; //左电机往前走 Right_moto_back ; //右电机往前走 }

/************************************************************************/ void leftrun(void) //左转 { Left_moto_back ; //左电机往前走 Right_moto_go ; //右电机往前走 }

/************************************************************************/ void rightrun(void) //右转 { Left_moto_go ; //左电机往前走 Right_moto_back ; //右电机往前走 }

/************************************************************************/ void stoprun(void) //停止前进 { Left_moto_Stop ; //左电机停走 Right_moto_Stop ; //右电机停走

9


基于51单片机的避障小车设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版小学六年级上册分数乘除法练习题2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: