毕业设计(论文)-汽车倒车防撞系统的软件设计.doc_第1页
毕业设计(论文)-汽车倒车防撞系统的软件设计.doc_第2页
毕业设计(论文)-汽车倒车防撞系统的软件设计.doc_第3页
毕业设计(论文)-汽车倒车防撞系统的软件设计.doc_第4页
毕业设计(论文)-汽车倒车防撞系统的软件设计.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

汽车倒车防撞系统的软件设计 摘 要 随着我国经济的发展,人口和车辆的不断增多,使得马路的路况越来越复杂,交通事故也越来越多。因此,汽车倒车防撞系统的研究,有着重要的实际意义和应用价值,引起了人们的广泛关注。本文绍了一种汽车倒车防撞系统的软件设计,分析了C语言开发的思路和过程。该防撞系统采用模块程序设计法,主要分为防撞系统的主程序,超声波发射子程序、超声波接受子程序,距离计算子程序和报警电路子程序。该程序首先对LCM进行初始化,然后调用超声波发生子程序,当接收到超声波返回信号之后,调用距离计算子程序进行计算,最后根据报警判断子程序判断是否报警。当障碍物距离小于1.5m时,蜂鸣器响、LED灯亮,从而提醒驾驶员即使采取措施。关键词:防撞系统;超声波;模块程序设计Abstract With the development of our national economy, population and the increasing of vehicles, make the road traffic accident is more and more complicated, the roads will be more and more. Therefore, automobile reverse anti-collision system research, has the important practical significance and application value, has attracted widespread attention. In this paper a kind of automobile reverse manshou collision-proof system software design, analysis the C language development ideas and process. The anti-collision system modular programming method, mainly divides into anti-collision system main program, ultrasound subroutines, ultrasonic accept subroutines, distance subroutines and alarm electrical pathway program. The program first initialized to LCM, then call subroutines, ultrasonic happen when receiving after ultrasonic return signal, the calling distance subroutines, finally calculated according to alarm judgment subroutines determine whether the police. When obstacle distance is less than 1.5 m, buzzer rang, LED lights up, thus remind drivers even take measuresKey words:Anti-collision system;Ultrasonic;Module design program目 录1 绪论(1)1.1课题研究的背景(1)1.2 系统研究的任务与目标(2)2 系统设计与分析(3)2.1超声波的测距原理(3)2.2超声波发射器及其原理(3)2.3声波测距算法设计(4)2.4模块设计与原理(5)2.5 超声波发射部分的设计(6)2.6 超声波接收电路的设计(7)3 系统硬件的设计(8)3.1 单片机选择与说明(8)3.2 各模块电路的设计(10)4 系统软件部分的设计(14)4.1 软件部分设计分析(14)4.2 主程序设计(15)4.3 超声波发射子程序(17)4.4 超声波接收子程序(18)4.5 距离计算子程序(18)4.6报警判断子程序(19)4.7 LCM的部分程序(20)4.8实物的测试(21)总 结(22)致 谢(23)参考文献.(24)附录A:倒车防撞系统原理图(25)附录B:汽车倒车防撞系统实物图(26)附录C:C语言源程序(27)III1 绪论1.1课题研究的背景 随着我国经济与社会的发展,交通安全日益成为人们不能忽视的问题。由于人口的大幅增长,机动车辆的大量增加,使得路况越来越复杂,车辆和行人所面临的危机也越来越大。下面这个表对历年的交通事故作了数据上的统计,从比重我们可以看到,历年的交通事故发生率有上升的趋势,并且对人身财产与健康所造成的危害也越来越大。图1-1 历年交通事故统计表 根据中国汽车协会发布的数据,随着中国经济的高速发展和居民生活水平的不断提高,居民拥有汽车的数量已经有爆炸性上涨的趋势。随着汽车保有量的迅速增加以及城市市区的密集化, 目前公路上、停车场上的汽车越来越多, 交通也越来越拥挤,使得出现越来越多的交通事故,严重威胁着人民群众的生命和财产安全。由于道路空间的有限性,驾车穿行、拐弯、倒车等总次数不断增长,但是汽车驾驶员视野又是非常有限,故而碰撞和拖挂的事故时有发生,夜间因为视野的原因,使得撞车事故更为频发。因此汽车迫切的需要一种能够实时测距,并且能够给驾驶员提供警示的器件,汽车防撞报警器的研究有着很重要的现实意义和应用价值。1.2 系统研究的任务与目标 如何利用现代高科技,开发出一种可用于汽车上的防撞报警器,具有很重要的现实意义。这种报警系统应该能够实时的测量车辆之间的距离,并且将所测得的数据显示在表盘上,以便于驾驶员根据路况进行判断。而且一旦车辆之间的距离超过了警戒距离,报警器应该立即采取警示措施,即采取蜂鸣器响,LED灯亮的形式对驾驶员发送警告敦促驾驶员立即采取应变措施,能够有效的解除驾驶员停车和起动车辆时前后左右探视所引起的困扰,并帮助驾驶员克服视野不足以及操纵困难的矛盾,大大的提高了行车出行安全性。该系统的硬件部分主要有单片机模块,超声波测距模块,1602显示模块和报警模块。软件部分利用C语言编程,严格定义了单片机和各部分电路的接口。并且将软件分成几个模块编写,极大的降低了难度和减少了时间。主要有超声波发射程序,距离计算程序,1602显示程序等,通过主程序来分别调用以完成测距和报警的目标。 通过对报警系统的研究设计,进一步熟悉单片机系统的原理和应用,对C语言程序开发流程有更透彻的理解,并且在将程序与报警器硬件结合起来的过程中,强化了动手能力,强化了理论结合实际的能力,培养了独立思考和独立解决问题的能力。2 系统设计与分析2.1超声波的测距原理超声波是人耳听不到的一种声波,是一种频率高于20KHz的声波。通常频率高于20KHz的超声波不仅波长短、方向性好、能够成射线定向传播、纵向分辨率比较高、对色彩和光照度不敏感、对外界光线和电磁场不敏感,碰到界面就会有显著反射,而且能在有灰尘、烟雾、有毒等各种环境中稳定工作。它方向性好,穿透能力强,易于获得较集中的声能在水中传播距离远,可用于测距,测速,清洗,焊接,碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。这些特性都有利于选取超声波作为媒介,用于对物体的位置、距离甚至形状的测量等。超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波在现代社会中经常用于距离的测量,如测距器和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。因此在本设计中采用超声波发射器来实现测距的功能,经综合比较,基于超声波的汽车防撞报警系统的设计中,采用的是超声波频率为40KHz的超声波传感器。2.2超声波发射器及其原理 超声波发生器一般可以分为两大类:一 类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型 、磁致伸缩型和电动型等 ; 机械方式有加尔统笛 、液哨和气流旋笛等 。它们所产生的超声波的频率 、功率和声波特性各不相同 ,因而用途也各不相同 。超声波传感器是利用超声波的特性研制出的传感器,它必须能够发射超声波和接收超声波。具备这种功能的装置就是超声波传感器,习惯上称为超声波换能器,或者超声探头。超声波传感器主要制造材料有压电晶体及镍铁铝合金两类。这这类传感器适用于测距、遥控、防盗等用途。超声波应用有三种基本类型,透射型-用于遥控器,防盗报警器、自动门、接近开关等;分离式反射型-用于测距、液位或料位;反射型-用于材料探伤、测厚等。这里主要应用了超声波的测距功能,通过超声波来计算障碍物与小车之间的距离。 目前较为常用的是压电式超声波发生器。 压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如下所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波 时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。下文附上实物的正面图和发射器原理图。图2-1 超声波实物正面图以及发射器原理图2.3声波测距算法设计 通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离了。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2) 在实际使用中,超声波的声速会受到温度的影响,因此常常需要使用温度补偿模块,通过温度传感器测得外界的温度,再根据温度求得对应的声速值。在实际的运算中,要采用温度补偿后的温度值。但是,在对测量精度要求不高的情况下,温度补偿模块可以忽略,声速确定后,只要测得超声波往返的时间,可以根据公式计算出距离,这就是超声波测距的原理。画出超声波测距流程图如下:图2-2 超声波测距原理图2.4模块设计与原理图2-3 系统设计原理框图全部模块都由STC89C52单片机控制整合,单片机在此处相当于一个微型计算机的功能,通过输入和输出的端口与传感器和显示器等外部端口交换信息,从而控制内部的操作能够按照流程实现功能。在C语言软件设计上,首先启动超声波发生模块,定义超声波发生接口为TX,然后驱动器推动探头产生超声波。发射的超声波在空气中传播,当遇到障碍物的时候发生反射回来,被超声波的接受探头所感知,在C语言设计程序中用RX表示超声波接收端。当接受到超声波反射信号时候,RX=1,此时定时器中断,根据时间计算公式求出时间,再根据距离计算模块算出距离大小。当障碍物的距离没有超出测量范围时,所测数据可以通过经C语言显示程序控制显示在LCD屏幕上,并通过判定程序程序(用if、else来实现)决定是否LED亮,蜂鸣器响,从而成功的实现防撞报警的功能。由系统软件控制把距离数据送到显示器进行显示, 若距离小于预先设置的1.5m时,进行声光报警。2.5 超声波发射部分的设计本系统主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。采用STC89C52来实现对CX20106A红外接收芯片的控制,单片机通过P1.4引脚经反相器来控制超声波的发送。测距系统中的超声波传感器采用的是陶瓷传感器,它的工作电压是40kHz的脉冲信号。超声波发射器包括超声波反射电路与超声波发射控制电路两个部分,超声波探头的型号为CSB40T。超声波接收端口设置为P1.3,当接收到超声波返回信号时,RX置1从而中断计数器。通过输出引脚输入到驱动器,经过驱动器驱动探头后可以产生超声波,这种方法方便快捷能够极大的节省时间。输出端采用两个反向器并联,用以提高驱动能力。上拉电阻 R10、R20一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡的时间。 超声波发射电路设计图如下:图2-4 超声波发射器电路2.6 超声波接收电路的设计超声波接收器的设计如图2-5所示,大致分为三个部分,分别是超声波接受探头、信号放大电路和波形变换电路三个部分,按照测距的原理,单片机需要的只是第一个回波的时刻,接收电路的设计可以采用通用电路才实现。因为超声波模块电路设计的成熟,超声波的接收电路可以采用现成的电路模块来节约时间和提高效率。目前较为通用的是采用CX20106A的集成电路,集成电路可以有效的节省空间,并且实践证明这种集成电路是目前较为成熟和可靠地设计。图2-5 超声波接收电路3 系统硬件的设计 系统的硬件部分的设计主要包括单片机系统,以及1602液晶显示器分和超声波接收器、超声波发射器三个部分组成。单片机采用STC89C52系列。采用12MHZ高精度的晶振,从而获得精确的时钟频率,有效的减少测量误差。C语言程序控制启动模块,产生超声波,由P1.4端口输出,超声波接收电路的输入返回信号对外中断O口进行控制。P1.3端口用来接收超声波,P0端口用来向LCM传输数据,可以用C语言定义为 LCM_Data,P2.0和P2.1分别连接蜂鸣器和LCD报警电路。显示电路采用较为简便的1602液晶显示器,1602是指显示的内容为16*2,即可以显示两行,每行16个字符。1062的RS、RW、E口分别与单片机的P1.0、P1.1、P1.2连接。3.1 单片机选择与说明单片机种类很多,本系统采用的是STC89C52单片,及其相同系列的芯片皆可。根据本系统需要实现的功能,按照节约成本和节约开发时间的原则,选择功耗低、性能高的STC89C52单片机:图3-1 单片机原理图STC89C52单片机共有40个引脚,其中有两个是电源引脚,2个是外接晶体整荡器引脚,4个控制引脚,还有四个端口,即32个输入输出功能引脚。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。P1端口,只做I/O使用,其内部有上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动四个TTL逻辑电平,对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。P3端口,除了做I/O使用,还有一些特殊的功能。P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.2 各模块电路的设计该系统的硬件部分由STC89C52单片机主控,包含USB电源模块,复位电路模块,LCD显示电路模块,声光报警模块。单片机采用STC89C52或其兼容系列,采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机使用P1.4端口输出超声波,使用P1.3接收超声波,系统由USB提供全部电源,再由晶振发出信号整个系统开始工作,此时单片机由程序控制对超声波发射器发出信号,然后由超声波接收器接收到的信号传入单片机进行处理。单片机外部电路连接图如下:USB电源供电电路: 图3-2 USB电源电路此电源模块为整个系统提供一个比较稳定的供电来源,是系统能够顺利的运行实现其功能,此USB提供的是510%的直流电源。蜂鸣器报警电路:图3-3 蜂鸣器报警电路复位电路:图3-4 单片机复位电路LCD显示电路:图3-5 LCD显示电路 路是采用的1602LCD显示器,此显示模块比LED显示模块更加丰富,显示内容更加完善,使显示的数据让人一目了然,增加倒车防撞系统的直观的数据显示效果。所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。 超声波测距报警器电路图如下:图3-6 超声波测距报警电路 本章介绍了STC89C52单片机系列的引脚和其对应的功能,并且给出了单片机的接口和各部分的电路连接情况。在C语言程序中,可以通过#define来定义单片机与各个模块的接口。超声波测距模块选择了超声波传感器作为测距的工具,并且给出了各部分的电路连接图,使得每部分的结构与功能一目了然。从而奠定了倒车防撞系统的硬件基础,下一章将详细的介绍单片机的C语言源程序设计。4 系统软件部分的设计4.1 软件部分设计分析 在单片机软件设计的过程中,可以考虑汇编语言和C语言两种。其中,汇编语言拥有较高的效率和较快的速度,但是必须对器件的内部结构有所考虑,并且兼容性不强。利用汇编语言编写出来的语句,更侧重于对单片机内部结构的控制,没有C语言设计的程序直观,并且逻辑结构不强。C语言程序设计成熟,层次鲜明,不需要硬件语言基础,且设计起来方便快捷,能够很好的弥补汇编语言的不足之处大大的节约开发时间并且提高研发效率。因此,在汽车倒车防撞系统的设计中,我采用了C语言来进行编程。首先利用C语言的宏定义#define语句来定义各个管脚的连接,将每个管脚表示成为便于理解的字符,在程序中可以直接对字符进行赋值,以实现对单片机输出端口的控制。根据各个部分功能的不同,可以将整个过程划分为若干个模块。每个模块都是实现一定功能并且相互独立的程序段,这种方法叫做模块程序设计法,利用模块的办法设计倒车报警系统,能够简化开发流程,并且使逻辑过程更加一目了然。对于特定的模块,可以直接将已经发展的很完善的模块程序加以使用,不用再对于各个部分重新设计。例如对超声波发射启动模块的设计,对LCM读写数据和指令控制的模块设计等等。超声波测距报警器的C语言程序主要有以下几个部分(模块)组成,第一个部分是主程序部分,即是通过C语言的主函数来实现,主程序部分统领各个部分的分工与合作,调用各个模块以实现测距和报警的功能;第二个部分是超声波发生程序,第三个部分是超声波接收程序,第四个部分是距离计算子程序。4.2 主程序设计 图4-1 主程序设计流程图主程序的实现步骤如下:1. 主程序首先对系统环境进行初始化,设置定时器T0的工作模式,2. 调用超声波发送子程序发出超声波脉冲,同时计数器开始计时。 3.当接受到返回超声波信号时,将计数器T0中断,读取计数时间。4.根据读取时间和Count计算距离子程序来计算障碍物距离并显示。5.根据障碍物距离判断是否报警,利用if、else语句实现。主程序清单如下:/*/void main(void)unsigned char TempCyc;Delay400Ms(); /启动等待,等LCM讲入工作状态LCMInit(); /LCM初始化Delay5Ms(); /延时片刻DisplayListChar(0, 0, mcustudio);DisplayListChar(0, 1, school); ReadDataLCM();/测试用句无意义for (TempCyc=0; TempCyc10; TempCyc+)Delay400Ms(); /延时DisplayListChar(0, 1, Distance);DisplayListChar(11, 1, Cls);while(1) TMOD=0x01; /设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1; /允许T0中断 EA=1; /开启总中断while(1) StartModule();/ DisplayOneChar(0, 1, ASCII0); while(!RX);/当RX为零时等待 TR0=1; /开启计数 while(RX);/当RX为1计数并等待 TR0=0;/关闭计数 Conut();/计算 delayms(80);/80MS 4.3 超声波发射子程序 P1.3与超声波的发射端连接,通过单片机产生脉冲信号经过发射端驱动电路,使超声波探头产生超声波。在C语言中可以将超声波发射定义为StartModule的函数,设定TX=1,即将1值赋给TX端口时,模块启动一次,随后利用延时函数nop构成完整的启动模块子程序。超声波发射程序程序清单如下:/*/ void StartModule() /启动模块 TX=1; /启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; 4.4 超声波接收子程序P1.4端口与超声波接收端相连,用#define定义为RX,在软件程序的设计中,需要利用P1.4作为接收端来控制定时器的开启与关断,从而能够得出超声波在空气中传播的时间。对于定时器的开启与关断,可以通过while语句来实现,通过while语句能够很好的将RX的状态与定时器的状态联系起来,用while语句表示,当RX的值为0时,TR0=1,即是开启计时器计数。当超声波返回被接收模块所接收的时候,TR1=0,此时计数器关断,则可以根据计数器的时间差来求得超声波在空气中传播的时间。超声波接收端RX用来启动和关断定时器,部分程序如下: while(!RX); /当RX为零时等待 TR0=1; /开启计数 while(RX);/当RX为1计数并等待 TR0=0;/关闭计数 Conut();/计算 delayms(80);/80MS4.5 距离计算子程序启动发射电路的时候同时启动单片机内部定时器T0,利用定时器的计数功能记录超声波的发射时间和反射波的接收时间。当收到超声波反射时,利用while语句中断计时器计数,时间根据T0计时器的高位TH0和低位TL0的读数来计算,time=TH0*256+TL0;求出时间之后,再根据时间计算障碍物的距离,S=(time*1.7)/100; 因为分母是100,所以求出来的结果单位是厘米。/*/ void Conut(void) time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; /算出来是CM 4.6报警判断子程序C语言报警程序的距离设定为1.5米(150cm),当障碍物距离大于1.5米时候,蜂鸣器响、LED灯亮,当障碍物距离小于1.5米时,将测得距离发送到1602显示器即可。故可以考虑用if、else语句来选择是否报警,if括号内的判断条件应为150cm,当距离大于150cm的时候,将1值赋给buzeer和LED接口,使蜂鸣器响、LED灯亮。部分源程序如下: if(S150) buzzer=0; LED=0; elsebuzzer=1;LED=1;4.7 LCM的部分程序在汽车防撞报警器的设计中,采用P0端口与LCD数据输入相连,并且并联一个排阻,以提高电路的安全性和可靠性。在软件设计中,首先利用#define宏定义将P0端口定义为 LCM_Data,即使LCD模块数据输入端口的意思。然后再通过赋值给 LCM_Data以达到对P0端口的控制。在P1端口的电路连接中,P1.0连接LCD的信号控制线RS,P1.1连接信号的控制线RW,P1.2与信号控制线E口相连。在软件设计中,首先利用#define语句定义好接口,将P1.0定义为RS,P1.1定义为RW,将P1.2定义为E,便于直接在C程序中直接操作RS/RW/E接口,以分别实现对LCD信号控制线的控制。要实现读/写数据,读/写指令,可以根据对RS/RW/E的赋值来实现对LCD寄存器的选择。例如写数据的子函数程序如下:/写数据void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在这后加小的延时LCM_E = 0; /延时LCM_E = 1; 4.8实物的测试经过Keil软件对程序进行编译和连接之后,生成拓展名为.HEX的文件,将STC89C52单片机插入编程器插座内,通过编程器将程序烧写到单片机内。然后接通USB电源,打开开关按钮,LCD屏幕上显示的是我和合作人胡绵俊同学的名字简写,下面一行显示的是“HainanUniversity”。在进行测试的过程中,当障碍物接近1.5米以内的时候,系统的蜂鸣器开始响,LED灯也同时亮。说明能够正常运行和实现功能,在一定程度上起到了防撞报警的作用。反复进行测试实验,发现了该报警器仍然存在一些问题,所测距离并不十分精确。分析其原因应该是:第一,该报警器没有温度补偿模块,直接采用常温下的声速作为运算数据,忽略了温度对超声波传播速度的影响。第二,该报警器的超声波测距模块只有一个超声波发射探头,超声波的反射很容易受到物体的形状和位置的干扰。第三,单片机的传输过程和计算过程也会占用一定的时间,并且产生一定的误差,导致接收时间不够精准,运算结果也不够精确。总 结在汽车倒车防撞报警系统的设计过程中,我深深的体会到了理论结合实际的重要性,并且发现了个人在动手能力上的欠缺。关于C语言和单片机的知识,之前也有学习过,但是开始对防撞报警系统的软件进行设计的时候,才发现之前学习的知识还是在很浅的层次,这使我认识到不断学习的必要性。如何利用超声波测距并且报警,在课本上并不能找到现成的命题,因此在整个设计的过程中也翻阅了很多资料,在书中学习了很多单片机开发的实例,研究了一些C程序的模板,并仔细分析每个结构的意义和逻辑。就在一点一点的小小的进步中,终于渐渐找到了设计的思路,并且编程起来也越来越熟练。在编写软件的过程中,重点查阅了超声波测距的资料,以及1602显示器的显示程序,通过仔细耐心的阅读,终于打通了一个个的瓶颈,完成了从理解到应用的转变。加深了对各个程序模块的理解,并且提高了对这些模块的应用能力。如何将这些模块整合起来,并且能够通过单片机实现对各个模块的控制,是整个设计中的难点,也是我在设计中最大的收获。最后,我想说的是动手能力,在用Keil软件对C程序进行调试的时候,常常会出现格式和结构的错误,这些细节的地方也常常对我的设计构成不小的障碍。在对源程序进行编译、连接、仿真的每个过程中,都要求设计者细心并且耐心的对待设计中的每一个事情。再设计的过程中,我不仅提高了自己的理论知识水平和实践能力,也锻炼了认真求实的学习态度。这次设计是整个大学生涯中很重要的一次实践机会,它激励着我不断的提高自己的能力。 致 谢首先,我十分感谢我的导师,王磊老师,在毕业设计中对我给予的悉心指导和严格要求,没有王磊老师的指导和帮助,我的论文是不可能完成的。在完成毕业设计的这段过程中,从王磊老师身上不仅学到了知识,也学到了很多做人的道理,让我感到受益匪浅。其次,也感谢海南大学信息学院的老师们在毕业设计期间给予我学习和生活的帮助。在我毕业论文写作期间,各位老师给我提供了种种专业知识上的指导和日常生活上的关怀,由衷的感激老师们的帮助和指点!此外,也感谢我的合作人胡绵俊,在硬件的设计方面,他承担了大部分的工作。从元器件的排版布局到焊接和连接,他都是一直在很细心的完成。还要感谢我的室友和我的同班同学,他们在在设计的过程也给我提供了许多帮助。感谢母校师生的热心帮助,你们的关怀永远激励着我前进!参考文献1 王守中 51单片机开发入门与典型实例(第二版)北京:人民邮电出版社,2009.102 周慈航.单片机程序设计基础.北京:北京航空学院出版社,2003.123 胡汉才 单片机原理及其接口技术(第二版)北京:清华大学出版社 2008.034 陈光东.单片机微型计算机原理与接口技术.武汉:华中理工大学出版社,1999.045 胡乾斌. 单片微型计算机原理与应用.武汉:华中科技大学出版社,1997.076 胡伟.单片机C程序设计及应用实例.北京:人民邮电出版社,2003.107 赵佩华. 单片机接口技术及应用. 北京:机械工业出版社,2003.088 汪道辉.单片机系统设计与实践. 北京:电子工业出版社,1998. 39 常敏.单片机应用程序开发与实践. 北京:电子工业出版社,2001. 310 武庆生.单片机原理与应用. 成都:电子科技大学出版社,2003. 311 马忠梅.单片机的C语言应用程序设计,北京:北京航空航天大学出版社 2008.312 苏长赞.红外线与超声波遥控.北京:人民邮电出版社,1993.713 张谦琳.超声波检测原理和方法.北京:中国科技大学出版社,1993.1014 刘同法.C51单片机C程序模板与应用.北京.北京航空航天大学.2010.815 黄维通,郑浩. C程序设计教程.清华大学出版社,2000.10附录A:倒车防撞系统原理图附录B:汽车倒车防撞系统实物图 附录C:C语言源程序#include /器件配置文件#include #define RX P1_4#define TX P1_3#define LCM_RW P1_1 /定义LCD引脚#define LCM_RS P1_0#define LCM_E P1_2#define LCM_Data P0#define buzzer P2_0#define LED P2_1#define Busy 0x80 /用于检测LCM状态字中的Busy标识void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned char code mcustudio =NAME: HMJ and DC;unsigned char code eschool = HainanUniversity;unsigned char code Cls = ;unsigned char code Distance = Distance: ;unsigned char code ASCII15 = 0,1,2,3,4,5,6,7,8,9,.,-,M;static unsigned char DisNum = 0; /显示用指针 unsigned int time=0; unsigned long S=0; bit flag =0; unsigned char disbuff4 = 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) ReadStatusLCM(); /根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;/读数据unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);/读状态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,0); /三次显示模式设置,不检测忙信号Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); /关闭显示WriteCommandLCM(0x01,1); /显示清屏WriteCommandLCM(0x06,1); / 显示光标移动设置WriteCommandLCM(0x0F,1); / 显示开及光标设置/按指定位置显示一个字符void DisplayOneChar(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 Disp

温馨提示

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

评论

0/150

提交评论