毕业设计(论文)-基于单片机的智能往返小车的设计与实现.doc_第1页
毕业设计(论文)-基于单片机的智能往返小车的设计与实现.doc_第2页
毕业设计(论文)-基于单片机的智能往返小车的设计与实现.doc_第3页
毕业设计(论文)-基于单片机的智能往返小车的设计与实现.doc_第4页
毕业设计(论文)-基于单片机的智能往返小车的设计与实现.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

智能往返小车的设计与实现-电路+程序+论文学校:系别:专业:作者:指导老师:学号:班级:摘 要(关键词:智能 单片机传感器 寻迹 数码管)智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途,据本人推测这种这智能将很快运用于我们的生活之中。智能电动车就是其中的一个体现。所以,智能往返小车的设计将为今后智能汽车的研究与发展作下很好的模拟与铺垫,设计与实现其功能具有科技意义。本次设计的智能往返小车的实现功能:参考智能小车行驶路线示意图,小车从起跑线出发,沿引导线(白纸铺设)到达b点,此过程检测纸下的3块铁片,小车检测到薄铁发出声光指示并实时存储铁片数目;接着通过弯道到达c点并且检测到铁片停留5秒并且声光提示;最后绕过障碍物寻找光源到达仓库停止。停车后能够通过按键选择在数码管显示全过程所检测到铁片的数目和运行全过程的时间。本次设计的智能往返小车,采用stc89c52单片机作为小车的检测和控制核心。设计分为5个模块:前轮pwm 驱动电路、后轮 pwm 驱动电路、轨迹探测模块、障碍物探测模块、光源探测模块。前轮pwm 驱动电路用于转向控制;后轮pwm 驱动电路用于方向和速度控制;探测模块利用三个光感元件,对黑色轨道进行寻迹;障碍物探测模块用于对两个障碍物进行探测;光源探测模块利用三个光敏电阻制成,用于寻光并确定光源角度,以期获得较为精确的转向值。绕障方案利用障碍物较低这个重要条件,在 c 点出发后,先利用光敏电阻获得光源的方向是本设计的一大特色。本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。障碍物1障碍物21m1m2mr=0.8mcb5cm起跑线1.2m2.3m0.4m5cm5cm2cm5cm5cm2cm停车区0.4m12cm光源1.45m0.4m0.3m直道区弯道区2mo50cm障 碍 区引导线车库0.2m0.4m15cm12.5cm12.5cm5cm 智能小车行驶路线示意图目 录1设计任务61.1 要求61.2 说明62方案论证比较与选择72.1轨迹探测模块设计与比较72.2数据存储比较72.3障碍探测模块方案分析与比较82.4寻找光源方案分析与比较82.5距离检测方案比较92.6刹车机构功能方案比较102.7金属探测方案比较103硬件设计103.1总体设计103.2原理分析和说明114软件设计144.1软件设计特色说明144.2总体流程图155智能小车原理图165.1最小系统控制核心165.2外接控制电路接口165.3外接指示模块166智能小车pcb图176.1未敷铜pcb176.2敷铜pcb顶层186.3敷铜pcb底层197智能小车程序207.1 typedef定义变量文件“config.h”207.2 i/o引脚定义文件“iocfg.c”207.3寻迹模块函数声明文件“flollow.h”227.4寻迹模块函数定义文件“flollow.c”227.5电机驱动模块函数定义文件“stepmot.h”237.6电机驱动模块函数定义文件“stepmot.c”247.7金属检测模块函数声明文件“metaldtc.h”267.8金属检测模块函数定义文件“metaldtc.c”277.9蔽障模块函数声明文件“ultradtc.h”287.10蔽障模块函数定义文件“ultradtc.c”287.11光源检测模块函数声明文件“lightdtc.h”297.12光源检测模块函数定义文件“lightdtc.c”297.13数码管显示模块函数声明文件“segdisp.h”307.14数码管显示模块函数定义文件“segdisp.c”317.15按键模块函数声明文件“key.h”327.16按键模块函数定义文件“key.c”327.17延时函数声明文件“timedly.h”337.18延时函数定义文件“timedly.c”337.19系统主函数文件“system.c”348 结论389 致谢3910 参考文献4011 附录411. 设计任务:设计并制作了一个智能电动车,依照智能小车行驶路线示意图,其行驶路线及过程满足所需的要求。1.1 要求:1.1.1 基本要求:(1)电动车从起跑线出发(车体不得超过起跑线),沿引导线到达b点。在“直道区”铺设的白纸下沿引导线埋有13块宽度为15cm、长度不等的薄铁片。电动车检测到薄铁片时需立即发出声光指示信息,并实时存储、显示在“直道区”检测到的薄铁片数目。(2)电动车到达b点以后进入“弯道区”,沿圆弧引导线到达c点(也可脱离圆弧引导线到达c点)。c点下埋有边长为15cm的正方形薄铁片,要求电动车到达c点检测到薄铁片后在c点处停车5秒,停车期间发出断续的声光信息。(3)电动车在光源的引导下,通过障碍区进入停车区并到达车库。电动车必须在两个障碍物之间通过且不得与其接触。(4)电动车完成上述任务后应立即停车,但全程行驶时间不能大于90秒,行驶时间达到90秒时必须立即自动停车。1.1.2 发挥部分:(1)电动车在“直道区”行驶过程中,存储并显示每个薄铁片(中心线)至起跑线间的距离。(2)电动车进入停车区域后,能进一步准确驶入车库中,要求电动车的车身完全进入车库。(3)停车后,能准确显示电动车全程行驶时间。1.2 说明:(1)跑道上面铺设白纸,薄铁片置于纸下,铁片厚度为0.51.0mm。(2)跑道边线宽度5cm,引导线宽度2cm,可以涂墨或粘黑色胶带。示意图中的虚线和尺寸标注线不在绘制在白纸上。(3)障碍物1、2可由包有白纸的砖组成,其长、宽、高约为50cm12cm6cm,两个障碍物分别放置在障碍区两侧的任意位置。(4)电动车允许用玩具车改装,但不能由人工遥控,其外围尺寸(含车体上附加装置)的限制为:长度35cm,宽度15cm。(5)光源采用200w白炽灯,白炽灯泡底部距地面20cm,其位置如图所示。(6)要求在电动车顶部明显标出电动车的中心点位置,即横向与纵向两条中心线的交点。2. 方案论证比较与选择:2.1轨迹探测模块设计与比较方案一、使用简易光电传感器结合外围电路探测由于所采用光电传感器实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为该部件造成整个系统的不稳定。故最终未采用该方案。方案二、利用两只光电开关分别置于轨道的两侧,根据其接受到白线的先后来控制小车转向来调整车向,但测试表明,如果两只光电开关之间的距离很小,则约束了速度,如果着重于小车速度的提升,则随着车速的提升,则势必要求两只光电开关之间的距离加大,从而使得小车的行驶路线脱离轨道幅度较大,小车将无法快速完成准确的导向从而有可能导致寻迹失败。方案三、用三只光电开关一只置于轨道中间,两只置于轨道外侧,当小车脱离轨道时,即当置于中间的一只光电开关脱离轨道时,等待外面任一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。现场实测表明,虽然小车在寻迹过程中有一定的左右摇摆 (因为所购小车的内部结构决定了光电开光之间的距离到达不了精确计算值 1 厘米),但只要控制好行驶速度就可保证车身基本上接近于沿靠轨道行驶。综合考虑到寻迹准确性和行驶速度的要求,采用方案三。2.2数据存储比较方案一、采用外接rom进行存储采用外接rom进行存储是保存实验数据的惯用方法,其特点是在单片机断电之后仍然能保存住数据,但无疑将增大软硬开销和时间开销。方案二、直接用单片机内部的ram进行存储虽然不能在断电后保存数据,但可以在实验结束后根据按键显示相应值。而且本实验的数据存储不大,采用ram可以减少 io 接口的使用,便利 io接口分配,故此方案具有成本低、易实现的优点,更符合实际需求。鉴于方案二的以上优点,综合比较,本方案采用方案二。2.3障碍探测模块方案分析与比较考虑到在测障过程中小车车速及反应调向速度的限制, 小车应在距障碍物40cm的范围内做出反应,这样在顺利绕过障碍物的同时还为下一步驶入车库寻找到最佳的位置和方向。否则,如果范围太大,则可能产生障碍物的判断失误;范围过小又很容易造成车身撞上障碍物或虽绕过障碍物却无法实现理想定向方案。方案一、采用一只红外传感器置于小车中央一只红外传感器小车中央安装简易,也可以检测到障碍物的存在,但难以确定小车在水平方向上是否会与障碍物相撞,也不易让小车做出精确的转向反应。方案二、采用二只红外传感器分置于小车两边二只红外传感器分别置于小车的前端两侧,方向与小车前进方向平行,对小车与障碍物相对距离和方位能作出较为准确的判别和及时反应。但此方案过于依赖硬件、成本较高、 缺乏创造性, 而且置于小车左方的红外传感器用到的几率很小, 所以最终未采用。方案三、采用一只红外传感器置于小车右侧并与小车前进方向呈一固定角度基于对 c 点后行车地图中光源及障碍物尺寸、位置的分析,我们采用了从 c 点出发即获得光源对行车方向的控制, 在向光源行驶的过程之中检查障碍物并做出相应的反应,这样不仅只使用一只红外传感器就实现了避障,而且避免因小车自然转弯而导致的盲目方向控制,同时为后面以最简单直接的路线和在最短时间内驶入车库创造了机会。智能小车应以准确、智能见优,采用方案三。2.4寻找光源方案分析与比较方案一、采用多只方向性较强的光敏二极管作光源定位器若干定位器在水平面上按不同角度展开, 在寻找光源时根据每个定位器接收到的光线强弱(有无)得出实时车库方位。该方案若采用方向性较强的光敏二极管作为光源定位器,要么是需要很多的器件,要么是难以检测到光源的方向。方案二、采用一个光源定位器用深色不透光材料与光敏电阻制成的光源定位器有较理想的定向测试效果,2.5 米之外就可以确定电源的方向。当小车绕过障碍物之后,通过不停地旋转使定位器获得最大光线照射以确定光源方向,这种方案有一定的可行性,但寻找光源的过程必定带来不必要的大量时间开销,且寻找过程盲目性太大,不利于控制,又增加了一个电机,增大的电源方案选择或安装的难度。方案三、利用多只光源定位器在方案二所得数据的基础上,结合光敏电阻的敏感性,只用三到五只光敏电阻就可以达到目的,只是因其对光非常敏感,所以必需为每只光敏电阻加上黑色隔离板。虽然制作有一定难度,但其能见长度和相对简明的控制措施显示了很大的优越性。综合考虑以上方案,方案三更具准确性和独创性,故我们采用方案三。2.5距离检测方案比较方案一、通过测试得出小车平均速度 v,在行驶过程中将行驶时间与其乘积 t v 作为驶过的距离。但该方案受电池电量、路面介质等因素的影响,在大多数情况下均暴露出误差较大的缺点。故不予采用。方案二、在后轮内侧匀距贴上 m 个磁钢,车厢内装上霍尔开关。对轮子转速进行测量,由于低速下轮子与地面接触良好,设轮周长为 c,可以用霍尔开关输出脉冲数 n 乘以 c/m得出行驶距离。只要磁钢在后轮上的位置足够精确,霍尔开关固定牢靠,就可以获得较好的测试效果。但车子颠簸时,稳定性较差。方案三、在齿轮箱中安装透射式光电开关,测出变速齿轮的每秒转速,用变速比和车轮周长计算出线速度, 积分求行驶距离。 但在齿轮箱中使用光电开关,要求有足够的安装位置,不能影响传动机构的机械动作。其优点是工作稳定。综合以上方案优劣和小车的结构特点,本系统采用了方案二。2.6刹车机构功能方案比较方案一、自然减速式当系统发出停止信号时停止给驱动电机供电, 小车在无动力状态因阻力而自然变为静止。由于惯性,小车全速行驶时需 1.8秒后才能停止,因车轮滑行造成的误差较大。无法实现精确制动的目标。方案二、反转式当小车需要停车时给驱动电机以反转信号,利用轮胎与跑道的摩擦力抵消惯性效应。由于车速是渐减的,反向驱动信号长度也要渐减,否则小车可能反向行驶。使用此方案后全速刹车反应时间减少为 0.5s。本系统中采用方案二。2.7金属探测方案比较方案一、使用探测线圈和探测仪构成的金属探测器此类金属探测器利用探测线圈产生的交变磁场在接近金属材料时产生微弱变化这一原理,将变化信号放大处理进而实现探测金属的目的。由于该探测器结构复杂,在短期内不可能完成制作,为节省时间,我们放弃了该方案。方案二、使用电感式接近开关代替金属探测器电感式接近开关本身就是理想的传感器。当金属物体接近开关的感应区域,开关就能无接触,无压力、无火花、迅速作出反应。用它作为本次小车的金属传感器,简单易行、准确且抗干扰性能优越。本系统中采用方案二。3. 硬件设计:3.1总体设计3.1.1本设计需要器件清单元件数量元件数量元件数量接近开关1只电位器若干二极发光管若干光电开关5只单片机最小系统板一块12m晶振只霍尔开关1只光敏电阻若干51系列89c52 芯片一块玩具电动小车1辆集成电路芯片三个数码管2位电阻,电容若干蜂鸣器一个按键若干3.1.2设计模块图3.2 原理分析和说明3.2.1 键盘显示模块说明及示图设计使得原本需要14个io接口的键盘显示少用了9个单片机io接口,虽然该设计的优势在本实验中没有完全体现出来,但若在现代工业设计中应用此方案,在对引脚需要较大的产品中其优点将体现得淋漓尽致。3.2.2 元件安装方位图3.2.3 光敏电阻分布位置图3.2.4 小车动力系统为达到满意的控速性能, 动力系统中的驱动电路使用了自制的 pwm模块并配以组合门电路加以保护。在行驶过程中有可能变热的部分电路也涂上了低熔点胶给予保护,有效的保证了整套系统的工作稳定性。3.2.5 车顶状态彩灯直接由单片机控制的车顶状态彩灯简单易行,却使得小车更加人性化。3.2.6 四电源供电系统为确保在行驶过程小车各部件均能正常工作且相互之间不收影响, 我们使用了四组电源为不同模块提供工作电压。其中:三组 9v电源分别为测距光电开关供电,经整流稳压后单独为单片机最小系统及其附属部件供电,及为霍尔开关、寻迹光电开关供电,一组 6v电源为电机供电。如此安排满足了多次测试大量用电的需求。3.2.7 结合实际的传感器采集方式安排鉴于小车使用的传感器较多,不可能也没必要让所有的传感器都采用中断方式,由于霍尔传感器和金属探测器应用于实时检测,我们安排它们工作在中断方式下,让应用于分时检测的其他传感器工作在查询方式下。这样不仅贴合实际,更有效地节省了单片机的引脚空间。3.2.8 独具自动返回跑道能力的寻迹方式小车的寻迹模块采用三只光电开关。一只置于轨道中间,两只置于轨道外侧,当置于中间的一只光电开关检测不到黑线且外侧两传感器任一只检测到黑线后, 做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。这种寻迹方式的独到之处在于, 当小车因车速过快而使所有传感器脱离轨道时小车能根据最近一次转弯记录自动判别正确的运动轨迹,从而自动返回轨道。4. 软件设计:4.1软件设计特色说明4.1.1 不同占空比脉冲驱动电动机以往方案都是用事先定义好的 0、1 脉冲置于 rom 中以查表获得脉冲的方法,但是这种办法不但不方便于操作,还占用了rom单元,在使用上不具优越性。而本次方案在软件设置上,每个全脉冲都由 40 个 10ms 脉冲组成,前面全都是 1,后面都是 0,高脉冲,即1 的个数由 ram中 5ah 单元中摆放的数值来决定,所有脉冲均通过计数器中断来控制,中断每 10ms询查一下 5bh单元,当5bh中数小于5ah 中数时,脉冲置 1,否则置0,每次 5bh 中数值加 1,加到40就清 0。这样就减少了许多rom空间的使用,减少了软件延时控制的麻烦,通过设置 5ah单元中的数来设置档,即我们有 40 个档可调。4.1.2 越障程序的设计特色之处在于,本设计充分利用了障碍物高度为 6cm 且光源高 20cm 这个重要条件,在从 c 点出发之初就寻找光源,以通过查询三个光敏电阻的阻值变化来确定车身与光源的方位,在无其它参照物的情况下通过光源来确定小车的运动方向控制。在这个过程中首先不断追踪光源的方位,锁定光源后立即检测前方是否有障碍物,当检测到障碍物时即刻放弃追踪光源而左转躲避,直至不再探测到障碍物又重新追踪光源,如此循环,就可达到安全迅速地进入车库的目的。在一开始就将探测障碍物与寻找光源同时进行,经计算和实验论证,本方案能大幅度提高避障和寻光源的速度,降低寻找路线的盲目性。4.1.3 主程序分段无论是在网上还是在一些参考资料上, 许多软件大多的运行控制都是由一个主程序的循环来进行的,但本软件在主程序上也采取了分段的方式。在主程序间根据不同的功能区间来进行跳转,很明确很直观地将主程序进行了功能分段,为子程序的设计、程序的控制提供了很大方便,同时增强的程序的可读性。4.1.4 时钟控制所有倒计时,计时都通过计时器 1 中断控制,根据ram 单元中相应的控制位选择不同的工作。在计时器计到 90秒时,显示时钟,停车,并跳转到home 程序段,以确定用户按键从而显示不同的数值供查询使用。4.1.5 软件降温在长转弯过程中通过设置前端转向电机间隙停转以达到降温的目的。4.1.6 转弯加速由于本设计前后电机采用同一电源供电,在前轮转向时,后轮速度将有所降低,此时即通过软件表象加速来弥补其电流的降低,从而提高了小车在弯道的行驶速度。4.1.7 进弯道前减速行驶分别采用不同的速度来控制直道与弯道的行驶,可以使得在直道区尽可能加速,以节省时间;在弯道区减速,有更多的时间来寻轨,避免脱离轨道,也使得小车以比较直的方向进入 c点以后区域4.2 总体流程图5. 智能小车原理图:5.1 最小系统控制核心5.2 外接控制电路接口5.3 外接指示模块6. 智能小车pcb图:6.1 未敷铜pcb6.2 敷铜pcb顶层6.2 敷铜pcb底层7. 智能小车程序:7.1 typedef定义变量文件“config.h”#ifndef _config_h_#define _config_h_typedef unsigned char int8u; /无符号8位整型变量typedef signed char int8; /有符号8位整型变量typedef unsigned short int16u; /无符号16位整型变量typedef signed short int16; /有符号16位整型变量typedef unsigned long int32u; /无符号32位整型变量 typedef signed long int32; /有符号32位整型变量 typedef float fp32; /单精度浮点数(32位长度)typedef double fp64; /双精度浮点数(64位长度)/电机速度#define hspeed 50#define lspeed 20#endif /_config_h_7.2 i/o引脚定义文件“iocfg.c”#include/*引脚定义*/步进电机引脚/左边电机sbit lmot_ap = p00;sbit lmot_an = p01;sbit lmot_bp = p02;sbit lmot_bn = p03;/右边电机sbit rmot_ap = p34;sbit rmot_an = p35;sbit rmot_bp = p36;sbit rmot_bn = p37;/寻线电路引脚sbit follow_l = p05;sbit follow_m = p06;sbit follow_r = p07;/金属检测引脚sbit metal_dtc = p32;/超声波障碍物检测引脚sbit ultradtc_tr = p10;sbit ultradtc_re = p11;/光源检测引脚sbit lightdtc_l = p12;sbit lightdtc_m = p13;sbit lightdtc_r = p14;/声光指示引脚sbit guide = p15;/数码管显示引脚#define dispdata p2sbit ds1cs = p16;sbit ds0cs = p17;/按键选择sbit key_1=p04;sbit key_2=p33;7.3 寻迹模块函数声明文件“flollow.h”#ifndef _follow_h_#define _follow_h_/函数功能:寻线/说明:正常沿线运动时,检测电路输出:/ 左:0;中:1;右:0void follow(void);#endif /_follow_h_7.4 寻迹模块函数定义文件“flollow.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includestepmot.h#includefollow.h/寻线函数:follow()void follow(void)int8u temp;temp = follow_l;temp = (temp1)|follow_m;temp = (temp1)|follow_r;switch(temp&0x07)/没检测到黑线时,原地打转case 0x00: lmotrun(lspeed);rmotstop(); break;/仅右边检测到黑线时,左电机快转,右电机慢转case 0x01: lmotrun(hspeed);rmotrun(lspeed);break;/仅中间检测到黑线时,正常,左右电机都快转case 0x02: lmotrun(hspeed);rmotrun(hspeed);break;/中间以及右边检测到黑线时,左电机快转,右电机慢转case 0x03: lmotrun(hspeed);rmotrun(lspeed);break;/仅左边检测到黑线时,左电机慢转,右电机快转case 0x04: lmotrun(lspeed);rmotrun(hspeed);break;case 0x05: break; /不可能出现此情况/中间以及左边检测到黑线时,左电机慢转,右电机快转case 0x06: lmotrun(lspeed);rmotrun(hspeed);break;/中间,左右边都检测到黑线时,原地打转case 0x07: lmotrun(lspeed);rmotstop(); break;default: break;7.5 电机驱动模块函数定义文件“stepmot.h”#ifndef _stepmot_h_#define _stepmot_h_/*左边电机*/函数功能:以指定速度运行/说明:speed为速度,其单位为:转/分void lmotrun(int16u speed);/函数功能:停止电机void lmotstop(void);/*右边电机*/函数功能:以指定速度运行/说明:speed为速度,其单位为:转/分void rmotrun(int16u speed);/函数功能:停止电机void rmotstop(void);#endif /_stepmot_h_7.6 电机驱动模块函数定义文件“stepmot.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includestepmot.h/*左边电机*/以指定速度运行函数:motrun()void lmotrun(int16u speed)int16u cnt;cnt = 12500/speed;lmot_ap = 1;lmot_an = 0;lmot_bp = 0;lmot_bn = 0;ldelay(cnt);lmot_ap = 0;lmot_an = 1;ldelay(cnt);lmot_an = 0;lmot_bp = 1;ldelay(cnt);lmot_bp = 0;lmot_bn = 1;ldelay(cnt);lmot_bn = 0;/停止电机函数:motstop()void lmotstop(void)lmot_ap = 0;lmot_an = 0;lmot_bp = 0;lmot_bn = 0;/*右边电机*/以指定速度运行函数:motrun()void rmotrun(int16u speed)int16u cnt;cnt = 12500/speed;rmot_ap = 1;rmot_an = 0;rmot_bp = 0;rmot_bn = 0;ldelay(cnt);rmot_ap = 0;rmot_an = 1;ldelay(cnt);rmot_an = 0;rmot_bp = 1;ldelay(cnt);rmot_bp = 0;rmot_bn = 1;ldelay(cnt);rmot_bn = 0;/停止电机函数:motstop()void rmotstop(void)rmot_ap = 0;rmot_an = 0;rmot_bp = 0;rmot_bn = 0;7.7 金属检测模块函数声明文件“metaldtc.h”#ifndef _metaldtc_h_#define _metaldtc_h_/函数功能:金属检测/说明:检测到金属时,电路输出为高/返回:检测到金属时,返回1bit metal_detec();#endif /_metaldtc_h_7.8 金属检测模块函数定义文件“metaldtc.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includestepmot.h#includemetaldtc.h/金属检测函数:metaldetec()bit metal_detec()bit x;if(metal_dtc = 1) /检测到金属guide = 1; /声光报警x = 1; elseguide = 0;x = 0;return x;7.9 蔽障模块函数声明文件“ultradtc.h”#ifndef _ultradtc_h_#define _ultradtc_h_/函数功能:障碍物检测,并且避障前进/说明:检测到障碍物时,检测电路输出为低void ultra_dtc(void);#endif /_ultradtc_h_7.10 蔽障模块函数定义文件“ultradtc.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includestepmot.h/障碍物检测,并且避障前进函数:ultra_dtc()void ultra_dtc(void)int8u temp;ultradtc_tr = 1; /发射超声波if(ultradtc_re) temp=0x01;else temp=0x00;switch(temp)/避障:原地打转case 0x00: lmotrun(lspeed);rmotstop(); break;/无障碍:正常,前进case 0x01: lmotrun(hspeed);rmotrun(hspeed);break;default: break;7.11 光源检测模块函数声明文件“lightdtc.h”#ifndef _lightdtc_h_#define _lightdtc_h_/函数功能:光源检测/说明:正常沿线运动时,检测电路输出:/ 左:0;中:1;右:0void light_dtc(void);#endif /_lightdtc_h_7.12 光源检测模块函数定义文件“lightdtc.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includestepmot.h#includelightdtc.h/寻线函数:lightdtc()void light_dtc(void)int8u temp;temp = lightdtc_l;temp = (temp1)|lightdtc_m;temp = (temp1)|lightdtc_r;switch(temp&0x07)/没检测到光源时,原地打转case 0x00: lmotrun(lspeed);rmotstop(); break;/仅右边检测到光源时,左电机快转,右电机慢转case 0x01: lmotrun(hspeed);rmotrun(lspeed);break;/仅中间检测到光源时,正常,左右电机都快转case 0x02: lmotrun(hspeed);rmotrun(hspeed);break;/中间以及右边检测到光源时,左电机快转,右电机慢转case 0x03: lmotrun(hspeed);rmotrun(lspeed);break;/仅左边检测到光源时,左电机慢转,右电机快转case 0x04: lmotrun(lspeed);rmotrun(hspeed);break;case 0x05: break; /不可能出现此情况/中间以及左边检测到光源时,左电机慢转,右电机快转case 0x06: lmotrun(lspeed);rmotrun(hspeed);break;/中间,左右边都检测到光源时,正常,左右电机都快转case 0x07: lmotrun(hspeed);rmotrun(hspeed);break;default: break;7.13 数码管显示模块函数声明文件“segdisp.h”#ifndef _segdisp_h_#define _segdisp_h_/函数功能:数码管显示void seg_disp(int8u temp);#endif /_segdisp_h_7.14 数码管显示模块函数定义文件“segdisp.c”#include#includeconfig.h#includeiocfg.c#includetimedly.h#includesegdisp.hint8u table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/数码管显示函数:seg_disp()void seg_disp(int8u temp)int8u x1,x2,x3;if(temp10) /两位显示x1 = temp/10;x2 = temp - 10*x1;ds1cs = 0;ds0cs = 1;dispdata = tablex1;ldelay(20);ds1cs = 1;ds0cs = 0;dispdata = tablex2;else if(temp10) /一位显示x3 = temp;ds1cs = 1;ds0cs = 0;dispdata = tablex3;7.15 按键模块函数声明文件“key.h”#ifndef _key_h_#define _key_h_/函数功能:键盘检测void key();extern int32u runtime; /运行时间extern int8u metalnum; /直道的金属块数目#endif /_key_h_7.16 按键模块函数定义文件“key.c”#include#includeiocfg.c#includeconfig.h#includesegdisp.hint32u runtime=0; /运行时间int8u metalnum=0; /直道的金属块数目void key()if(key_1=0)seg_disp(metalnum);if(key_2=0)seg_disp(int8u)(runtime/10000);7.17 延时函数声明文件“timedly.h”#ifndef _timedly_h_#define _timedly_h_/函数功能:短延时void nnop(int8u i);/函数功能:长延时void ldelay(int16u i);/函数功能:定时器t0溢出做延时/说明:temp为延时,单位为:100s(微秒)void t0_delay(int16u temp);#endif /_timedly_h_7.18 延时函数定义文件“timedly.c”#include#includeconfig.h#includetimedly.h/短延时void nnop(int8u i)for(;i0;i-) ;/长延时void ldelay(int16u i)int16u j;for(;i0;i-) for(j=80;j0;j-);/定时器t0溢出做延时函数:t0_delay()void t0_delay(int16u temp)int16u cnt;cnt = 65536 - 100*temp; /晶振:12mhztmod = tmod | 0x01 ; /t1 工作在方式1(16位计数器)th0 = (int8u)(cnt 8);tl0 = cnt & 0xff;tr0 = 1;while(tf0 != 1);tf0 = 0;tr0 = 0;7.19 系统主函数文件“system.c”#include#includeconfig.h

温馨提示

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

评论

0/150

提交评论