智能小车系统设计(循迹-超声波-遥控)(共18页)_第1页
智能小车系统设计(循迹-超声波-遥控)(共18页)_第2页
智能小车系统设计(循迹-超声波-遥控)(共18页)_第3页
智能小车系统设计(循迹-超声波-遥控)(共18页)_第4页
智能小车系统设计(循迹-超声波-遥控)(共18页)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上<<计算机控制技术综合训练>>任务书 年 季学期学 生 姓 名学 号专 业 方 向班 级题 目 名 称智能小车系统设计2一、设计内容及技术要求:(一)、任务描述利用智能小车系统设计2所提供部件(综合训练目前共有3种智能小车模型),组装小车模型,编写检测、控制程序,实现以单片机为控制系统核心的智能小车系统设计。(二)、控制任务和要求 基本任务:1.完成小车的组装工作2.小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移3.小车具有循迹(自己设计跑道)及避障功能4.三周设计任务完成后,不必拆分小车,将小车归还老师并如实汇报

2、功能部件运转情况,便于老师及时维护,为下一组同学的设计做好准备进阶任务:1.实现舵机转动下的超声波壁障功能,并且可以正确显示前方物体的距离2.与按键功能配合,正确有序显示小车位移、速度及与前方障碍物距离3.小车具有无线遥控功能4.与其它组的小车模型配合可以完成交替领跑任务二、课程设计总结报告要求:1.完整的设计任务书:封面(设计题目、指导教师、专业班级、姓名、学号、时间); 摘要及关键词(35):设计总体概述(采用何种硬件,利用何种方法,设计何种东西,实现了何种功能) 目录(按目录格式书写,页码要标清) 第一章 绪言 (本设计的内容与实现的基本原理,设计的特点及可以最终可以实现的功能,可以达到

3、的性能指标) 第二章 方案论证(对所提供的硬件理解并画出系统结构图,为实现该任务所采取软件设计思路及核心算法) 第三章 硬件设计(按照结构框图对各功能部分进行分别介绍,如系统CPU部分、数据采集部分、程序控制部分、人机接口部分等) 第四章 软件设计(整体设计思路,各独立程序功能、原理介绍包括流程图,如主程序、各子程序及中断服务程序) 第五章 设计总结(对整个设计过程的总结、体会,还包括设计中遇到的问题及解决的办法,以及想要实现却未能完成的功能) 参考文献:著作格式:作者.书名.版次.出版地:出版者,出版年; 期刊格式:作者.文章名.期刊名,年,卷(期):起止页 注:字数10000字左右,不得抄

4、袭和雷同,使用学生作业纸(16开) 2.手绘硬件连接2图一张、手绘软件流程2图一张。三、设计进度:第一周:熟悉掌握系统要求,完成硬件设计、调试。第二周:完成软件设计,用仿真器完成软、硬件联调,最终实现单片机在目标系统中的 合理运行第三周:完善设计,完成说明书编写,答辩。指导教师签字:附录:电信学院课程设计报告要求1、 设计题目;2、 目录;3、 本设计的基本原理;4、 简要说明本设计内容、用途及特点;5、 本设计达到的性能指标;6、 设计方案的选择;7、 写出各部分设计过程、工作原理、元器件选择;8、 绘制图纸(手绘2号图纸);9、 设计参考文献;10、 附录;11、 设计总结体会;12、 设

5、计说明书不得少于10000字。智能小车运行图显示速度,距离,超声波探测距离经过调试,小车完美实现了如下功能1小车具有无线遥控功能,小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移。2.小车具有循迹及避障功能,实现了舵机转动下的超声波壁障功能,并且可以正确有序显示小车位移、速度及与前方障碍物距离。3.与其它组的小车模型配合可以完成交替领跑任务。4小车所有模式切换均由遥控器控制。流程图硬件原理图附件一:智能小车系统程序#include <AT89x51.H> #include <intrins.h>sbit AA=P30; sbit DD=P31

6、;sbit BB=P32;sbit CC=P22;sbit LCM_RW=P24; /定义LCD引脚sbit LCM_RS=P23;#define RX P2_0#define TX P2_1#define LCM_E P2_5#define Sevro_moto_pwm P2_7/接舵机信号端输入PWM信号调节速度#define LCM_Data P0#define Busy 0x80 /用于检测LCM状态字中的Busy标识#define Left_1_led P3_7 /P3_7接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#define XUNJI_left_led P3_6

7、 /P3_6接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2#define XUNJI_right_led P3_5 /P3_5接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#define Right_2_led P3_4 /P3_4接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#define Left_moto_go P1_4=1,P1_5=0,P1_6=1,P1_7=0; /左边两个电机向前走#define Left_moto_back P1_4=0,P1_5=1,P1_6=0,P1_7=1; /左边两个电机向后转#define Left_moto_Sto

8、p P1_4=0,P1_5=0,P1_6=0,P1_7=0; /左边两个电机停转 #define Right_moto_go P1_0=1,P1_1=0,P1_2=1,P1_3=0;/右边两个电机向前走#define Right_moto_back P1_0=0,P1_1=1,P1_2=0,P1_3=1;/右边两个电机向后走#define Right_moto_Stop P1_0=0,P1_1=0,P1_2=0,P1_3=0;/右边两个电机停转 void LCMInit(void); /LCD初始化函数void DisplayOneChar(unsigned char X, unsigned

9、char Y, unsigned char DData); /LCD显示一个字符函数void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);/LCD显示一个字符串函数void Delay5Ms(void); /延时5毫秒函数void Delay400Ms(void); /延时400毫秒函数void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM); /LCD1602写数据函数void WriteCo

10、mmandLCM(unsigned char WCLCM,BuysC);/LCD写命令函数unsigned char ReadStatusLCM(void);unsigned char code Range ="V= cm/s S= . m" /LCD1602显示格式unsigned char code welcome ="= Welcome = "unsigned char code key="Press any key."unsigned char code ASCII13 = ".-M"unsigned ch

11、ar code table="Distance:000.0cm"unsigned char code table1="YAO KONG MO SHI "unsigned char code table2="=XUN JI MO SHI= "unsigned char pwm_val_left = 0;/变量定义unsigned char push_val_left =14;/舵机归中,产生约,1.5MS 信号unsigned int CH0=0; /循迹模式标志unsigned int CH1=0; /超声波模式标志unsigned

12、int t=0; /速度基准变量unsigned int timer=0;/延时基准变量unsigned int time=0;unsigned int pwm=250;unsigned int count1=0; /计左电机码盘脉冲值unsigned char timer1=0; /扫描时间变量unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0; unsigned long S=0;unsigned long V=0; /定义其速度unsigned long SS=0;unsigned cha

13、r disbuff4= 0,0,0,0,;unsigned char disbuff14= 0,0,0,0,;void WriteDataLCM(unsigned char WDLCM) /写数据ReadStatusLCM(); /检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1;void WriteCommandLCM(unsigned char WCLCM,BuysC) /写指令,BuysC为0时忽略忙检测if (BuysC) ReadStatusLC

14、M(); /根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;unsigned char ReadStatusLCM(void) /读状态LCM_Data = 0xFF; LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); /检测忙信号return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38

15、,0); /三次显示模式设置,不检测忙信号Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); /关闭显示WriteCommandLCM(0x01,1); /显示清屏WriteCommandLCM(0x06,1); / 显示光标移动设置WriteCommandLCM(0x0c,1); / 显示开及光标设置/按指定位置显示一个字符void Disp

16、layOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1if (Y) X |= 0x40; /当要显示第二行时地址码+0x40;X |= 0x80; /算出指令码WriteCommandLCM(X, 1); /发命令字WriteDataLCM(DData); /发数据/按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code

17、 *DData)unsigned char ListLength; ListLength = 0;Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1while (DDataListLength>0x19) /若到达字串尾则退出if (X <= 0xF) /X坐标应小于0xFDisplayOneChar(X, Y, DDataListLength); /显示单个字符ListLength+;X+;/5ms延时void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/400ms延时

18、void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);/*/ void Conut(void) /超声波距离计算函数 while(!RX); /当RX为零时等待 TR0=1; /开启计数 while(RX); /当RX为零时等待 TR0=0; time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/10+10; disbuff10=V%10; disbuff11=V/10; Disp

19、layListChar(0, 0, Range); DisplayOneChar(2, 0, ASCIIdisbuff11); DisplayOneChar(3, 0, ASCIIdisbuff10); disbuff10=SS/10%10; disbuff11=SS/100%10; disbuff12=SS/1000; DisplayOneChar(11, 0, ASCIIdisbuff12); DisplayOneChar(12, 0, ASCIIdisbuff11); DisplayOneChar(13, 1, ASCII10); DisplayOneChar(14, 0, ASCIId

20、isbuff10); disbuff0=S%10; disbuff1=S/10%10; disbuff2=S/100%10; disbuff3=S/1000; DisplayListChar(0, 1, table); DisplayOneChar(9, 1, ASCIIdisbuff3); DisplayOneChar(10, 1, ASCIIdisbuff2); DisplayOneChar(11, 1, ASCIIdisbuff1); DisplayOneChar(12, 1, ASCII10); DisplayOneChar(13, 1, ASCIIdisbuff0); /*/void

21、 Conut0(void) /循迹模式显示 disbuff10=V%10; disbuff11=V/10; DisplayListChar(0, 0, Range); DisplayOneChar(2, 0, ASCIIdisbuff11); DisplayOneChar(3, 0, ASCIIdisbuff10); disbuff10=SS/10%10; disbuff11=SS/100%10; disbuff12=SS/1000; DisplayOneChar(11, 0, ASCIIdisbuff12); DisplayOneChar(12, 0, ASCIIdisbuff11); Di

22、splayOneChar(13, 0, ASCII10); DisplayOneChar(14, 0, ASCIIdisbuff10); DisplayListChar(0, 1, table2); /*/ void StartModule() /启动模块 TX=1; /启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop

23、_(); _nop_(); _nop_(); _nop_(); TX=0; /*/ /*void delayms(unsigned int ms)unsigned char i=100,j;for(;ms;ms-)while(-i)j=10;while(-j);*/void Timer_Count(void) /超声波高电平脉冲宽度计算函数 TR0=1; /开启计数 while(RX);/当RX为1计数并等待 TR0=0;/关闭计数 Conut();/计算/*/前速前进 void run(void) Left_moto_go ; /左电机往前走 Right_moto_go ; /右电机往前走/

24、*/前速后退 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 ; /右电机往前走/*/STOP void stoprun(void) Left_moto_Stop ; /左电机停走 Right_moto_Stop ; /右电机停走/*

25、/ void COMM( void ) V=0; push_val_left=5; /舵机向左转90度 timer=0; while(timer<=4000); /延时400MS让舵机转到其位置 4000 StartModule(); /启动超声波测距 Conut(); /计算距离 S2=S; push_val_left=23; /舵机向右转90度 timer=0; while(timer<=4000); /延时400MS让舵机转到其位置 StartModule(); /启动超声波测距 Conut();/计算距离 S4=S; push_val_left=14;/舵机归中 timer

26、=0; while(timer<=4000); /延时400MS让舵机转到其位置 StartModule(); /启动超声波测距 Conut(); /计算距离 S1=S; if(S2<300)|(S4<300) /只要左右各有距离小于,30CM小车后退 backrun(); /后退 timer=0; while(timer<=1000); if(S2>S4) rightrun(); /车的左边比车的右边距离小右转 timer=0; while(timer<=800); else leftrun();/车的左边比车的右边距离大左转 timer=0; while

27、(timer<=800); /*/void pwm_Servomoto(void) if(pwm_val_left<=push_val_left) Sevro_moto_pwm=1; else Sevro_moto_pwm=0;if (pwm_val_left>=100) pwm_val_left=0; /*/*TIMER1中断服务子函数产生PWM信号*/ void time1()interrupt 3 using 2 TH1=(65536-100)/256; /100US定时 TL1=(65536-100)%256; timer+; /定时器100US为准。在这个基础上延时

28、 pwm_val_left+; pwm_Servomoto(); t+; timer1+; if(t>=6000) V=count1; count1=0; t=0; if(timer1>=500)timer1=0; /*/ void intersvr1(void) interrupt 2 using 1 SS+;count1+;/*/void timer0()interrupt 1 using 0 /TIMER0计数 void main(void)Delay400Ms(); /启动等待,等LCM讲入工作状态LCMInit(); /LCM初始化Delay5Ms(); /延时片刻Dis

29、playListChar(0, 0, welcome);DisplayListChar(0, 1, key); TMOD=0X11;TH1=(65536-100)/256; /100US定时TL1=(65536-100)%256;TH0=0;TL0=0; TR1= 1;ET1= 1;ET0= 1;EX1=1; /开启外部中断0 IT1=1; /下降沿有效 IE1=0; EA = 1; push_val_left=14; /舵机归中while(1) if(AA=1&&BB=1) CH0=1; CH1=0; Conut0(); Delay400Ms(); if(AA=1&&CC=1) CH0=0; CH1=1; stoprun(); Delay400Ms(); if(timer>=800&&CH1=1)/80MS检测启动检测一次 800 timer=0; StartModule(); /启动检测 Conut(); /计算距离 if(S<300) /距离小于30CM stoprun(); /小车停止 COMM(); /方向函数 else if(S>400) /距离大于,40CM往前走

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论