版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 50/50PAGE 审定成绩:_ 审定成绩:_现代汽车电控系统课程设计设计题目: 汽车倒车防撞系统设计 _单 位(系别):_自动化系_ _学 生 姓 名:_ _王555_专 业:_自动化专业_ _班 级:_05125555_ _学 号:_2013255555_ _指 导 教 师:_张 55_填表时间: 2016 年 6 月摘 要汽车作为现代社会最主要的交通工具,数量越来越多,但是交通事故的发生频率逐年增长,其中因倒车发生的事故占很大的比例。随着科技的发展,这类的问题得到了解决,人类发明了智能交通系统,其中汽车智能倒车防撞技术关键在于智能实时的测出汽车与障碍物的距离。当汽车与障碍物之间的距离小
2、于设定的安全距离时,防撞系统就自动报警并采取制动措施。为提高汽车运行的安全性和降低碰撞发生的可能,本文讲述一种主动型汽车倒车防撞报警系统。本课程设计是以AT89C51单片机为核心的倒车防撞系统增加汽车倒车时的安全性的倒车防撞系统,利用超声波进行无接触的测距,系统主要包括超声波发射模块、信号接收模块、单片机处理模块、数码显示模块以及声光报警模块等部分组成。汽车在行驶和倒车过程中自动检测到障碍物,然后通过超声波测距原理测量出汽车与障碍物之间的距离,并通过数码显示模块将测得的距离显示出来,当汽车与障碍物之间的距离达到安全极限时,单片机控制声光报警模块发出报警信号,达到提醒司机防止撞车的目的。本设计充
3、分发挥了单片机的性能,其硬件电路简单,软件功能完善,控制系统可靠,具有一定的使用和参考价值。【关键词】单片机 AT89C51 超声波 测距 汽车防撞预警目 录 TOC o 1-3 h z u HYPERLINK l _Toc454480440 前 言 PAGEREF _Toc454480440 h 4 HYPERLINK l _Toc454480441 第一章 汽车倒车防撞系统概述 PAGEREF _Toc454480441 h 5 HYPERLINK l _Toc454480442 第一节 倒车防撞系统研究背景及意义 PAGEREF _Toc454480442 h 5 HYPERLINK l
4、 _Toc454480443 第二节 倒车防撞系统简介 PAGEREF _Toc454480443 h 5 HYPERLINK l _Toc454480444 第二章 倒车防撞系统总体设计 PAGEREF _Toc454480444 h 6 HYPERLINK l _Toc454480445 第一节 倒车防撞系统设计原理 PAGEREF _Toc454480445 h 6 HYPERLINK l _Toc454480449 第三章 倒车防撞系统硬件设计 PAGEREF _Toc454480449 h 9 HYPERLINK l _Toc454480450 第一节 倒车防撞系统使用元件 PAGE
5、REF _Toc454480450 h 9 HYPERLINK l _Toc454480454 第二节 倒车防撞系统电路设计 PAGEREF _Toc454480454 h 13 HYPERLINK l _Toc454480461 第三节 硬件电路总设计 PAGEREF _Toc454480461 h 17 HYPERLINK l _Toc454480462 第四节 系统使用元器件清单 PAGEREF _Toc454480462 h 18 HYPERLINK l _Toc454480463 第四章 倒车防撞系统程序设计 PAGEREF _Toc454480463 h 19 HYPERLINK
6、l _Toc454480464 第一节 防撞系统工作过程 PAGEREF _Toc454480464 h 19 HYPERLINK l _Toc454480467 第二节 防撞系统程序设计 PAGEREF _Toc454480467 h 20 HYPERLINK l _Toc454480472 结 论 PAGEREF _Toc454480472 h 25 HYPERLINK l _Toc454480473 参考文献 PAGEREF _Toc454480473 h 26前 言随着社会经济的发展,交通运输业日益兴旺,汽车的数量在大副攀升。交通拥挤状况也日趋严重,撞车事件屡屡发生,造成了不可避免的人
7、身伤亡和经济损失,针对这种情况,设计一种响应快,可靠性高且较为经济的汽车防撞报警系统势在必行。超声波是指频率在20kHz以上的声波,它属于机械波的范畴。近年来,随着电子测量技术的发展,运用超声波作出精确测量已成可能。随着经济发展,电子测量技术应用越来越广泛,而超声波测量精确高,成本低,性能稳定则备受青睐。超声波也遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等。正是因为具有这些性质,使得超声波可以用于距离的测量中。超声波测距即是利用其反射特性,当车辆后退时,超声波距离传感器利用超声波检测车辆后方的障碍物位置,并利用指示灯及蜂鸣器把车
8、辆到障碍物的距离及位置通知驾驶人员,起到安全的作用。 超声波测距法是最常见的一种距离测距方法,应用于汽车停车的前后左右防撞的近距离,低速状况,以及在汽车倒车防撞报警系统中。现在生产的中高档小轿车大多数都配置有倒车雷达,而出于节省成本等方面的考虑,经济型小轿车、大客车等其他车辆都没有配置倒车雷达。有市场需求的产品,必然会带动产品的开发设计。倒车雷达电路种类较多,本文介绍基于单片机 HYPERLINK /word/264622.aspx o 单片机 控制的倒车雷达系统,该系统采用通用型单片机作为控制电路,方便系统功能扩展。系统电路主要采用集成器件构成,外围元件少,电路简洁、调试方便、成本低,利于商
9、品化生产。 汽车倒车防撞系统概述第一节 倒车防撞系统研究背景及意义随着中国经济的持续增长和汽车价格的持续下降,越来越多的家庭拥有自己的汽车。在享受汽车给我们带来的便利同时,由于倒车而产生的问题也日益突出。一方面汽车的数量逐年增加,公路、街道、停车场和车库拥挤不堪,可转动的空间越来越少;。另一方面,新司机及非专职司机越来越多,因倒车引起的纠纷越来越多,车辆之间、车辆与人、车辆与墙壁等障碍物之间的碰撞时有发生。据统计,危险境况时,如果能给驾驶员半秒钟的预处理时间,则可分别减少追尾事故的30,路面相关事故的50,迎面撞车事故的60。改善倒车遇到的窘境被越来越多的人所关注,人们对汽车操纵的便捷性提出了
10、更高的要求,希望有种装置能够解决汽车倒车给人们带来的不便,消除驾驶中的不安全因素,可将车快速准确地停放到指定的位置,因此发明了汽车倒车防撞预警系统。本课题相对而言研究的比较浅,就是利用超声波声波特性实现非接触式距离测量,进行距离预警。超声波在空气中测距或在特殊环境下都有较广泛的应用。利用超声波检测往往比较迅速、方便、计算简单、易于实现实时控制,并且在测量精度方面能达到工业实用的指标要求,因此在汽车倒车防撞系统的研制方面也得到了广泛的应用。第二节 倒车防撞系统简介汽车防撞预警系统是指在汽车行驶过程中防止汽车发生碰撞障碍物的一种智能报警装置。它能自动发现可能与汽车发生碰撞的障碍物体,并且同时检测汽
11、车与障碍物之间的距离,到达极限距离时发出报警信号以避免碰撞的发生。根据题目要求,汽车防撞报警器的功能主要有两个:判断汽车与障碍物之间的距离和当汽车与障碍物之间的距离到达临界距离时发出报警信号。本课程设计是以AT89C51单片机为核心的倒车防撞系统增加汽车倒车时的安全性的倒车防撞系统,利用超声波进行无接触的测距,系统主要包括超声波发射电路,超声波接收电路,数码显示电路以及报警电路。以超声波传感器为重点进行超声波的发射和接收,利用数字传感器DS18B20进行测量,提高了测量精度,通过计算得出距离并通过LED显示,在超出一定距离时,电铃报警,驾驶员做出判断。 倒车防撞系统总体设计第一节 倒车防撞系统
12、设计原理设计总体思路概况汽车防撞预警系统的原理是利用超声波的发射和接收,用计时器计出超声波从发射 到接收到遇到障碍物后反射声波的时间通过公式计算出汽车与障碍物之间的距离。在实际生活中常用的测距方法主要有两种,一种是在被测距离的两端,一端设置发射装置,一端设置接收装置,利用公式S = vt得出测量的距离。这种测量方式特别适用于测量身高;另一种是本次设计采用的方式,利用超声波遇到障碍物后反射得出距离。 汽车防撞系统硬件电路的设计主要包括单片机系统、超声波发射电路和超声波检测接收电路及显示电路三部分。单片机采用的是AT89C51系列。为了获得较稳定时钟频率而采用了高精度的晶振,这样极大的减小测量距离
13、的误差。用单片机P1.0端口输出超 声波发射器所需要的40kHz的方波信号,使用外中断 0 口检测接收超声波的反射信号。显示电路装置用了结构简单价格便宜的4位 LED 数码管来显示距离。 超声波的发射装置主要是由反相器74LS04和发射传感器构成。AT89C51单片机P1.0引脚输出40k赫兹的间断方波信号分成2路,一路信号经过一个反向器后到达TCT40一个引脚,另一路通过两个反向器后到TCT40的另一个引脚,用这种形式将 P1.0 发出的单片机P1.0端口发出的间断方波信号加到TCT40的两端上,用这种推换形式将间断的方波信号连接到超声波传感器的两个引脚上,这样能够增强超声波的发射强度。在加
14、载反波信号时使用两个74LS04并联,是它的驱动能力得到了很大的提高。而电阻R8、R9增大超声波传感器的阻尼效果,缩短了震荡时间,使超声波传感器输出高电平的能力大大增加。超声波接收采用CX20106A集成电路模块,根据电路图可以看出,集成芯片CX20106在接收装置电路中的作用很大。CX20106是一款红外线检波接收的芯片,它常用于现实生活中,而且价格便宜。由于红外线波的频率为38 kHz,与测距使用的超声波频率接近。并且CX20106芯片的内部设置比较好,由于设计中芯片的f5角连接了一个外接电阻, 此电阻使他滤波器的中心频率能够调节,当R15的阻值越大滤波器的中心频率就越低,变化范围在306
15、0 kHz之间。此次设计证明用CX20106A接收超声波信号具有优秀的灵敏特性和较强的抗干扰能力。超声波测距预警系统主要包括主程序、发射子程序、温度采集子程序、外部中断子程序和数码显示子程序等。超声波测距预计能够系统主程序第一步是对系统进行初始化,初始化定时器T0为16位定时计数器的工作模式。全局中断打开并给显示端口清0。在调用超声波的发生子程序发出一个超声波脉冲,在发射过程中延时约0.1 ms,避免声波信号从发射器发出后直接传送到接收器而引起直射波触发,然后在使用外中断接收遇 到物体后返回声波信号。我采用了12 MHz 的晶振,计数器每次计数间隔是1s,当主程序接收到成功的信号后,将计数器
16、T0中的数计算,即得出与障碍物之间的距离,测出距离后将结果送往LED显示,这就是超声波测距的过程。 在系统调试方面,由于设计的电路由很多集成电路构成。外围元件很少,所以调试不太难。只要焊接的电路没有错误,简单调试一下就能够正常使用了。电路设计中除了集成电路,对其它电子元件也没专业要求。可以根据测量距离的差异,调整与接收换能 器滤波电容就能得到适合灵敏度和超声波抗干扰能力。超声波测距原理超声波测距是通过检测超声波发射后遇到障碍物所反射回来的回波,如图2-1所示。从而测出超声波发射和接收的时间差T,然后根据公式:S = CT / 2 即可算出汽车与被测物体的距离。S为汽车与障碍物之间的距离,C为超
17、声波在空气中的传播速度。声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。本设计中设定温度为常温20。图2-1 超声波传播图利用超声波的测距的原理图如框图 2-2 所示,单片机发出40kHZ的信号,经放大后通过超声波发射器输出;超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行判别、计算,得出距离数。数据显示数据显示定时器单片机控制放大电路超声波发射器放大电路超声波接收器图2-2 超声波测距原理图控制系统框图超声波防撞控制系统图如框图2-3所示。该系统全部都由单
18、片机进行控制,单盘机 发出40Hz的方波脉冲,经过超声波发射电路发射出超声波。超声波在遇到障碍物之后反射射回来再由接收电路接收反射声波信号送入单片机进行分析,计算出汽车与障碍物之间的距离,将处理后的结果送入显示电路经过数码显示管显示出距离,如果距离达到安全的极限距离着由报警电路通过蜂鸣器发车报警,提示司机躲避障碍物。LED显示扫描驱动报警电路超声波发送电路振荡复位电路超声波接收电路AT89C51单片机LED显示扫描驱动报警电路超声波发送电路振荡复位电路超声波接收电路AT89C51单片机图 2-3 超声波测距报警系统图 倒车防撞系统硬件设计硬件电路的设计主要包括三部分:单片机系统、显示电路、超声
19、波的发射和检测接收电路。在本次设计中单片机采用AT89C51。还采用了12MHz高精度的晶振,以减小测量的误差。用AT89C51的P1.0端口输出所需的40kHz的方波信号,采用AT89C51实现对TCT40 超声波转换模块和CX20106A芯片的控制。第一节 倒车防撞系统使用元器件AT89C51的功能特点AT89C51 单片机主要由中央处理器、存储器、输入输出接口等组成。中央处理器是单片机的核心部分,它的主要作用是完成运算和控制功能。程序存储器具有存储功能,使应用程序在开发调试后永久性的存储在程序存储器中。AT89C51 控制着超声波的发送和接收,串行口发送数据。LED显示是共阴极接法的动态
20、循环显示。接收电路接收超声波遇到物体后反射回来的回波信号。该芯片包括了限幅放大、前置放大、整形和输出数据信号,这样方便了检测判断回波的数据是否正确,并且能够通过计算得出距离值。AT89C51是一种带4K字节闪烁可编程可擦除存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压, 8 位高性能的CMOS 微处理器,叫做单片机。该单片机采用的制造技术是ATMEL高密度非易失存储器制造成的,它能够与达到工业标准的输出管脚和MCS-51指令集相兼容。由于它将8位多功能CPU处理器和闪烁存储器组合在单个芯片中,AT89C51是一种高
21、效微控制器外形及引脚排列如图 3-1 所示。图 3-1 AT89C51 控制器AT89C51 有两种可用软件来选择的省电方式:空闲工作方式和掉电工作方式。当处于空闲方式时CPU处于睡眠状态,但片内的其他部件仍然继续工作,而且片内RAM的内容和所有专用寄存器的内容在空闲方式期间都被保留起来。当处于掉电方式时保存了 RAM 的内容,振荡器停止震荡,禁止芯片其它功能直到下一次硬件复位才能使用。AT89C51 为许多器材的制造提供了十分灵活和低成本的解决办法。充分的利用了单 片机的片内资源,使我们可以在较少使用外围电路的情况下完成超声波测距。CX20106 功能特点CX20106对收到的信号有放大和滤
22、波的作用。如图3-2所示,CX20106芯片的接口图。 CX20106有8个引脚,管脚1是超声波信号输入端;管脚2的电阻和电容决定接收换能器的 总增益,通过增大或者减小电阻电容,确定放大倍数,改变放大器的频率。管脚3与GND 之间连接的电容起到检波作用;管脚5上的连接一个电阻,这个电阻用来设置滤波器的 中心频率;管脚6与GND之间接入一个电容,该电容确定探测距离;管脚7是集电极开路 输出端:管脚8接电源正极。图3-2 CX20106 芯片接口图LED数码管在生活中最常见到的LED数码管是八段和七段的,八段式原理图的如图3-4 所示。本次设计中采用的是八段式的数码管。八段式的与七段式的相比,他们
23、各部分结构大体相同,八段只比七段式的多了一个小数点。数码管里都是由LED发光二极管发光单片机控制LED的灭亮显示出不同的形状从而显示出数字,八段式的数码管与七段式的主要区别就在于八段式的数码管中有八个发光二极管,而七段式的数码管中有七个发光二极管,两种之间只差一个点。数码管又分为两种类型,共阳极型和共阴极型。原理图如图3-3共阳极型和共阴极型原理图所示。共阳极型就是将数码管中发光二极管的阳极都接在一起并且接到电源上,连接好之后把其中任何哪个发光二极管的阴极接到地线上,它就会发光。共阴极型则是将数码管中发光二极管的阴极都接在一起并且接到地线上,连接好之后把其中任何哪个发光二极管的阳极接到电源上,
24、它就会发光。图 3-3 共阴极型和共阳极型原理图图 3-4数码显示管引脚图如图3-4数码显示管引脚图所示,把两个COM引脚连接起来,作为数码管的公共端,数码管共阳端要接地,共阴端接电源。一个二极管是一位,八个管子即 a,b,c,d,e,f,g 还有 dp, 拼成个8字列在一起就构成了一个8位的数码显示管。一个八段式的数码显示管的每个显示管连在一起,每个二极管的公共端称为位选线。在数码管显示数字是,一个二极管对应一条直线,a 对应的是首位,dp对应最后位。例如,当数码管显示管显示数字0时,那么共阴极数码显示管的编码就为00111111,十六进制数为0 x3f,而共阳极的数码显示管的编码就是110
25、00000,十六进制数为0 xc0。通过这个例子可以看的出来共阴极数码显示管和共阳极数码显示管的编码各个位是相反的。第二节 倒车防撞系统电路设计超声波发射装置的设计超声波发射器包括两个部分:超声波产生电路部分和超声波发射控制电路部分。超声波探头采用TCT40。单片机P1.0端口输出40KHz的超声波信号,此时定时器开始计时。通过输出引脚输入,经驱动后推动发射探头产生超声波,此方法充分利用了软件控制,灵活性好。超声波发射电路设计图如图3-5所示。图 3-5 超声波发射装置设计图超声波的发射电路主要由反相器74LS04和发射换能器构成。AT89C51单片机P1.0口输出的40kHz的间断方波信号分
26、成2路,一路经一级反向器后到达 TCT40一个电极,另一路通过两级反向器后到TCT40的另一个电极,用这种形式将P1.0发出的方波信号加到TCT40的两端上,这样能够增强超声波的发射强度。在加载反波信号时使用两个74LS04并联,可以提高驱动能力。而电阻R8、R9可以增加超声波换能器的阻尼效果,缩短了震荡时间,还可以提高换能器输出高电平的驱动能力。超声波接收装置的设计超声波接收器包括接收、发射探头、信号放大电路和波形变换电路三个部分。超声波探头采用RCT40。 按照超声波原理,微处理器需要的只是第一个回波的时刻。接收装置的设计可用CX20106A来完成。在空气中传播超声波的其能量的衰减与距离是
27、成正比的,距离越小、衰减越少,距离越大、衰减越多,通常都在1V之内。图 3-6 超声波接收装置设计图 超声波的接收装置如图3-6超声波接收装置图所示。超声波的接收采用CX20106A集成电路模块,根据电路图可以看出,集成芯片CX20106在接收装置电路中的作用很大。CX20106是一款红外线检波接收的芯片,他常用于现实生活中,而且价格便宜。由于红外线波的频率为38 kHz,与测距使用的超声波频率接近。并且CX20106芯片的内部设置比较好,由于设计中芯片的f5角连接了一个外接电阻,此电阻使他滤波器的中心频率能够调节,当R15的阻值越大滤波器的中心频率就越低,变化范围在3060 kHz之间。CX
28、20106对收到的信号进行放大、滤波的作用。当接收到的声波信号经由放大器,调整信号的频率,然后滤波消除干扰信号,最后再经过整形,输出到CX20106的7脚输出。当接收到的声波信号与CX20106的中心频率相符时,它的7脚就会低电平输出,而7脚接到INT0引脚上,这样就会中断。若频率和CX20106的中心频率不同时,即可调节R15,使滤波器的中心频率与超声波测距的频率相符。显示电路设计显示电路中显示测量距离使用的是4位共阴的LED数码管,它简单实用并且价格便宜。位码使用四个PNP三极管来驱动,显示电路设计图如图 3-7显示电路设计图所示。图3-7显示电路设计图报警装置的设计报警部分采用一个蜂鸣器
29、进行报警,LED发光,利用单片机控制输出一个一定频率的信号。信号通过一个三极管,把信号放大,以增强驱动能力。然后将放大之后的信号连接到蜂鸣器上,报警部分装置的设计图如图 3-8 所示。 图 3-8 报警装置设计图蜂鸣器是使用直流电源进行供电,它广泛应用于当今生活中,尤其在计算机、报警器、复印机、打印机、电子玩具、汽车电子设备、电话机等电子设备制造中作为发声的器件而广泛应用。蜂鸣器是一种一体化结构的电子发声器,它分为两种类型,一种是压电式蜂鸣器另一种是电磁式蜂鸣器。压电式蜂鸣器主要由压电蜂鸣片、多谐振荡器、共鸣箱阻及抗匹配器还有外壳等部分组成。压电蜂鸣片是由铌镁酸铅或锆钛酸铅压电陶瓷材料制造而成
30、。而多谐振荡器由集成电路或者晶体管构造而成。当电极两端接通电源以后,多谐振荡器开始振动,输出音频信号,然后阻抗匹配器便能推动压电蜂鸣片发出声音。电磁式蜂鸣器主要由振荡器、磁铁、振动膜片、电磁线圈和外壳等部分组成。在两 极接通电源之后,振荡器能够产生的音频信号,信号通过电磁线圈,便会使电磁线圈生成磁场。这样振动膜片便会在磁铁和电磁线圈的作用下,周期性反复地振动从而发出声音。系统电源设计在本系统中,AT89C51单片机是5V供电,电源电压范围从3.35V,在电路系统需要一个变压芯片,我选择7805芯片,引脚图如下:图3-9 7805芯片引脚图这是一个输出正5V直流电压的稳压电源电路。IC采用集成稳
31、压器7805,C1、C2分别为输入端和输出端滤波电容,R16为负载电阻。电路图如3-10所示:图3-10 稳压电源第三节 硬件电路总设计超声波测距预警系统硬件部分由超声波的接收电路、显示电路、超声波的发射电路 和单片机的外围电路等各部分组成。 使用单片机的P1.0口输出40KHZ的方波信号,经反相器来控制超声波的发送,以达到超声波换能器所需的震荡条件。利用中断口INT0检测超声波接收电路接收到的返回信号,当单片机INT0引脚由高电平变为低电平时超声波就已经返回。计数器计出超声波传播所用的时间,然后算就能够得到与障碍物之间的距离大小。显示电路采用结构简单的4位LED数码管把测量的距离显示出来,位
32、码用4个PNP三极管来驱动。超声波测距预警系统是利用单片机控制超声波的发射接,并自动计时得出超声波的往返时间,单片机采用的是AT89C51,这种单片机经济实用,结构简单。并且单片机内有4K的ROM,方便于编程。这时就可以使用单片机把各部分设计好的电路图连接起来进行仿真了。超声波预警系统电路的设计图3-11汽车预警系统原理图所示。图3-11汽车预警系统原理图第四节 系统使用元器件清单在本次设计中使用的元器件主要有单片机AT89C51, CX20106A,超声波探头,蜂鸣器,数码显示管等,所用元器件详细清单如表 3-7所示。表3-7元器件清单 倒车防撞系统程序设计超声波测距预警系统主要包括主程序、
33、发射子程序、温度采集子程序、外部中断子程序和数码显示子程序等。第一节 防撞系统工作过程软件工作过程按下控制系统的开关,进行系统的初始化,当主程序完成初始化后调用发射子程序,由P1.0口发射出1个脉冲,驱动超声波换能器发射超声波,并且计数器开始计时。利用定时器的计数功能记录到超声波发射到接受所用的时间当超声波接收器接收到超声波后,接收电路输出端输出一个跳变信号,在INT0端产生一个中断的信号,得到超声波的时间差。温度假设不变,知道了时间和超声波的声波速度后,通过单片机的计算得出距离,显示出来,到达距离极限时,启用报警模块。算法的软件设计超声波测距是通过检测超声波发射后遇到障碍物所反射回来的回波,
34、从而测出从发出超声波信号到接收到返回信号的时间间隔,然后求出距离由S=CT/2即可算出汽车与被测物体的距离。其中,S为测量的距离,C 为超声波在空气中的传播速度。T 从发出超声波信号到接收到返回信号的时间间隔。在启动发射电路发射超声波的同时开启单片机 AT89C51内的定时器T0,通过定时器计数器的计数功能记录下来超声波发射的时间和接收到超声波的时间。当接收电路收到超声波时,接收电路的输出端会产生一个负跳变,在INT0端能够产生一个中断信号,单片机响应中断请求后执行外部中断子程序,读取出来时间间隔,算出距离。第二节 防撞系统程序设计主程序主程序首先对系统环境初始化,设置定时器T0工作模式为16
35、位的定时计数器模式,置位总中断允许位EA并给显示端P0和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用12MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,根据公式d=(C*T0)/2 (其中T0为计数器T0的计数值),测出距离后结果将以十进制BCD码方式显示在LED上,然后再发超声波脉冲重复测量过程。主程序框图如图4-1
36、所示:开始开始单片机初始化定时中断子程序有无回拨?外部中断子程序NY图4-1 主程序框图超声波发射子程序,超声波接收子程序超声波发生子程序的作用是通过P1.0端口发送2个左右的超声波信号频率40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序。进入该中断后就立即关闭计时器T0停止计时。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断INT0关闭。本系统采用12M晶振,即机器周期是1 us。下图4-3是超声波发射与接收子程序流程图。超声
37、波的发射与接收其实就是中断的体现,我们主要使用外部中断源和定时器T0中断。下图4-2是中断程序的流程图。图4-2 中断程序流程图图4-3 超声波发射与接收子程序流程图测距子程序当主程序检测到接收成功的标志位之后将计数器T0中的数(即超声波来回所用的时间)按公式计算,即可得到被测物体与测距仪之间的距离,设计时取20时的声速为344m/s则有:S = CT / 2=172T0/10000cm其中,T0为计数器T0的计算值。测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。外部中断入口外部中断入口关外部中断开外部中断结 果 输 出计 算 距 离读取时间值返
38、回图4-4 测距程序流程图距离显示,判断以及报警子程序显示模块的功能是利用定时器将得到的最短距离在显示屏上进行显示。测试距离数值通过串行口传送到显示模块。通过调用距离计算子程序,设定安全距离为2m,设定蜂鸣器的工作方式,工作设为1,不工作设为0,若在安全距离之内,蜂鸣器打开报警,否则,蜂鸣器不工作。下图4-5是距离显示判断以及报警流程图。图4-5距离显示,判断以及报警流程图结 论汽车防撞预警系统的原理是利用超声波的发射和接收,用计时器计出超声波从发射 到接收到遇到障碍物后反射声波的时间通过公式计算出汽车与障碍物之间的距离。它的硬件电路的设计主要包括单片机系统、超声波发射电路和超声波检测接收电路
39、及显示电路三部分。单片机采用的是AT89C51系列。超声波的发射用单片机P1.0端口输出超声波发射器所需要的40kHz的方波信号。超声波的接收采用CX20106A集成电路模块进行。超声波测距预警系统软件设计主要包括主程序、发射子程序、外部中断子程序和数码显示子程序。通过对这次课题的研究深入了解和设计,我对单片机最小系统有了更深入的了解,特别是关于I/O接口。学到更多的是超声波测距技术,超声波测距系统由于不受光线、电磁波、粉尘等的影响,其精度能达到厘米数量级的工程测距精度等的优点,在桥梁、隧道、涵洞等的距离检测中占有一定的优势。本课题中用于汽车倒车,利用超声波测距系统,可以有效地提高车辆在保障和
40、维护过程中的安全性和可靠性。任何一个方案都经过多次的验证与完善,没有付出亦没有回报,只有经过不断的推敲,研究才能够获得成功。参考文献1 陈明荧. 8051单片机基础教程M. 北京:科学出版社,2003.2 马忠梅. 单片机C语言应用程序设计M. 北京:北京航空航天大学出版社,2007.3 刘昌华,易逵. 8051单片机的C语言应用程序设计与实践M. 北京:国防工业出版社,2007.4 周润景. Proteus在MCS-51&ARM7系统中的应用百例M. 北京:电子工业出版社,2006.5 周润景,张丽娜,刘印群. Proteus入门实用教程M. 北京:机械工业出版社,2007.6 李学礼. 基
41、于Proteus的8051单片机实例教程M. 北京:电子工业出版社,2008.7 谢维成等. 单片机原理与应用及C51程序设计M. 北京:清华大学出版社,2006.8 徐爱琴等.C语言程序设计M.北京:电子工业出版社,20089 陈堂敏,刘焕平. 单片机原理及应用M.北京:北京理工大学出版社,2008附录资料:不需要的可以自行删除C语言中如何获取时间?精度如何?1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_
42、t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用MFC的CTime类,可以用CTime:GetCurrentTime() 精确到秒6 要获取高精度时间,可以使用BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。7 Multimedia Time
43、r FunctionsThe following functions are used with multimedia timers.timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime/*/用标准C实现获取当前系统时间的函数一.time()函数time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。#include time.hvoid main ()time_t rawtime;struct tm * timeinfo;time ( &rawtime );timei
44、nfo = localtime ( &rawtime );printf ( 007The current date/time is: %s, asctime (timeinfo) );exit(0);=#include - 必须的时间函数头文件time_t - 时间类型(time.h 定义是typedef long time_t; 追根溯源,time_t是long)struct tm - 时间结构,time.h 定义如下:int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm
45、_yday;int tm_isdst;time ( &rawtime ); - 获取时间,以秒计,从1970年1月一日起算,存于rawtimelocaltime ( &rawtime ); - 转为当地时间,tm 时间结构asctime ()- 转为标准ASCII时间格式:星期 月 日 时:分:秒 年二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。clock_t clock ( void );#includeclock_t t = clock();long sec = t / CLOCKS_PER_
46、SEC;他是记录时钟周期的,实现看来不会很精确,需要试验验证;三.gettime(&t); 据说tc2.0的time结构含有毫秒信息#include#includeint main(void)struct time t;gettime(&t);printf(The current time is: -:d:d.dn,t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);return 0;time 是一个结构体, 其中成员函数 ti_hund 是毫秒。四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;DWORD dwStart
47、= GetTickCount();/这里运行你的程序代码DWORD dwEnd = GetTickCount();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位这个函数只精确到55ms,1个tick就是55ms。五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();/这里运行你的程序代码DWORD dwEnd = timeGetTime();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。
48、=/*Unix#unix时间相关,也是标准库的/*1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;time_t timegm(struct tm *tm);2.mktime使用时区信息time_t mktime(struct tm *tm);timelocal 函数是GNU扩展的与posix函数mktime相当time_t timelocal (struct tm *tm);3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;struct tm * gmtime(const time_t *clock);4.localti
49、me使用时区信息struct tm * localtime(const time_t *clock);1.time获取时间,stime设置时间time_t t;t = time(&t);2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;int stime(time_t *tp)3.UTC=true 表示采用夏时制;4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;5.设置时区推荐使用setup来设置;6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln -fs /usr/share/zon
50、einfo/xxxx/xxx /etc/localtime 才能重效time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t看看你的系统是否有time_t64,它能表示更大的时间范围/*windows#Window里面的一些不一样的/*一.CTime () 类VC编程一般使用CTime类 获得当前日期和时间CTime t = GetCurrentTime();SYSTEMTIME 结构包含毫秒信息typedef struct _SYSTEMTIME WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WOR
51、D wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds; SYSTEMTIME, *PSYSTEMTIME;SYSTEMTIME t1;GetSystemTime(&t1)CTime curTime(t1);WORD ms = t1.wMilliseconds;SYSTEMTIME sysTm;:GetLocalTime(&sysTm);在time.h中的_strtime() /只能在windows中用char t11;_strtime(t);puts(t);/*获得当前日期和时间CTime tm=CTime:GetCurrentTime();
52、CString str=tm.Format(%Y-%m-%d);在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:CTime t = CTime:GetCurrentTime(); /获取系统日期,存储在t里面int d=t.GetDay(); /获得当前日期int y=t.GetYear(); /获取当前年份int m=t.GetMonth(); /获取当前月份int h=t.GetHour(); /获取当前为几时int mm=t.GetMinute(); /获取当前分钟int s=t.GetSecond(); /获取当前秒int w=t.GetDayOfWeek(
53、); /获取星期几,注意1为星期天,7为星期六二.CTimeSpan类如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:CTime t1( 1999, 3, 19, 22, 15, 0 );CTime t = CTime:GetCurrentTime();CTimeSpan span=t-t1; /计算当前系统时间与时间t1的间隔int iDay=span.GetDays(); /获取这段时间间隔共有多少天int iHour=span.GetTotalHours(); /获取总共有多少小时int iMin=span.GetTotalMinutes();/获取总共有多少分
54、钟int iSec=span.GetTotalSeconds();/获取总共有多少秒三._timeb()函数_timeb定义在SYSTIMEB.H,有四个fieldsdstflagmillitmtimetimezonevoid _ftime( struct _timeb *timeptr );struct _timeb timebuffer;_ftime( &timebuffer );取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!四.设置计时器定义TIMER ID#define TIMERID_JISUANFANGSHI 2在适当的地方设置时钟,需要开始其作用的地方;SetTim
55、er(TIMERID_JISUANFANGSHI,200,NULL);在不需要定时器的时候的时候销毁掉时钟KillTimer(TIMERID_JISUANFANGSHI);对应VC程序的消息映射void CJisuan:OnTimer(UINT nIDEvent)switch(nIDEvent)#如何设定当前系统时间windowsSYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;m_myLocalTime.wHour=0;m_myLocalT
56、ime.wMinute=0;m_myLocalTime.wSec;m_myLocalTime.wMillisec;lpSystemTime=&m_myLocalTime;if( SetLocalTime(lpSystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);SYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;lpSystemTime=&
57、m_myLocalTime;if( SetDate(lpSystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);本文来自CSDN博客,转载请标明出处:HYPERLINK /khuang2008/archive/2008/12/09/3483274.aspx/khuang2008/archive/2008/12/09/3483274.aspx一种制作微秒级精度定时器的方法当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。一是用SetTimer函数建
58、立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer函数)。二是利用GetTickCount函数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。下面介绍一种能取得高精度定时的方法。在一些计算机硬件系统中,包含有高精度运行计数器(high-resolu
59、tion performance counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。采用这种方法的步骤如下:1、首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。单位是每秒多少次(n/s),此数一般很大。2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。下面举一个例子来演示这种方法的使用及它的精确度。在VC 6.0 下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局
60、如下图:其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFC ClassWizard添加的成员变量也分别对应为DWORD m_dwTest和DWORD m_dwAct. “退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC ClassWizard添加此按纽的单击消息处理函数如下:void CHightTimerDlg:OnBTest()/ TODO: Add your control notification handler code hereUpdateData(TRUE);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024知名大学与科研机构联合培养研究生协议
- 2025年度企业财务内部控制与合规审计合同范本3篇
- 专用购销交易2024版协议格式版A版
- 二零二四商标授权及知识产权跨界合作合同3篇
- 万科物业2024停车场运营管理协议
- 2024年谈蕾离婚后财产与子女抚养协议书3篇
- 个性化小额资金借贷款项协议范本一
- 二零二四卫生院卫生间改造与装修施工合同3篇
- 2025产学研科技成果转化合同:生物科技产业合作框架4篇
- 2024路灯购销安装合同范本
- SQL Server 2000在医院收费审计的运用
- 《FANUC-Oi数控铣床加工中心编程技巧与实例》教学课件(全)
- 微信小程序运营方案课件
- 抖音品牌视觉识别手册
- 陈皮水溶性总生物碱的升血压作用量-效关系及药动学研究
- 安全施工专项方案报审表
- 学习解读2022年新制定的《市场主体登记管理条例实施细则》PPT汇报演示
- 好氧废水系统调试、验收、运行、维护手册
- 中石化ERP系统操作手册
- 五年级上册口算+脱式计算+竖式计算+方程
- 气体管道安全管理规程
评论
0/150
提交评论