毕业设计(论文)基于AT89C52单片机的超声波测距系统设计.doc
摘 要 由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。由于超声波对光线、精度、价格和电磁场不敏感,因此超声波测距对环境有较好的适应能力。为此,本文以AT89C52单片机为核心,利用一对40KHZ压电超声传感器结合软硬件设计一款体积较小、价格低廉、具有温度补偿、实时LCD显示和报警的超声波测距系统。关键词:超声测距;AT89C52单片机;温度补偿;LCD显示;软硬件设计 AbstractTemperature as an important physical quantity is one of the most common and important process parameters. Along with the time progress, society's development, science's and technology's unceasing renewal, the requirements of temperature measurement range continue to expand,.At the same time ,the temperature measurement accuracy requirements continue to enhances. Temperature measurement requirements have become more sophisticated, so the temperature detection and temperature detection technology is also an important research subjectThis article analyzes the temperature survey principle and process.This uses the AT89C51 microcontroller as the master control chip,mainly composed by the temperature sensor, measuring amplifiers, multi-channel A / D converter. The design of the programming environment is the KEIL UVISION2, including data receiving module, voltage temperature conversion modules, LCD liquid crystal display module and so on . The temperature gathering module has used different temperature sensor in the different temperature range,In the normal temperature scope uses DS18B20, in the low temperature scope with the T thermo-element, in the high temperature scope to use the B thermo-element. This system's temperature measurement scope is broad, may satisfy the majority temperature measurement requests and has certain use value Keywords: Temperature sensor; AT89S51 microcontroller; Temperature measurement; A/D conversion目 录摘 要IAbstractII 第一章 绪论11.1超声测距发展简介 11,2 国内外研究现状1.3 课题研究背景及意义 .31.4 本文的工作 .第一章 超声测距系统的方案与论证11.1 超声测距思路11.2 系统总体设计方案31.3 系统总体方案论证.3第二章 单片机超声测距硬件设计32.1 系列单片机功能特点及测距原理42.2 单片机超声测距电路原理图5第三章 单片机超声测距软件设计53.1 主程序53.2 超声波发生子程序与接收中断程序63.3LCD显示模块程序流程图83.4 总体软件设计流程图9第四章 系统的软硬件调试9第五章 总结10致谢11参考文献12附录13绪 论1.1超声测距的发展简介随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。无庸置疑,未来的超声波测距仪将与自动化智能化接轨,与其他的测距仪集成和融合,形成多测距仪。随着测距仪的技术进步,测距仪将从具有单纯判断功能发展到具有学习功能,最终发展到具有创造力。在新的世纪里,面貌一新的测距仪将发挥更大的作用。1.2国内外研究现状随着科技的发展,人们生活水平的提高,城市发展建设加快,城市给排水系统也有较大发展,其状况不断改善。但是,由于历史原因合成时间住的许多不可预见因素,城市给排水系统,特别是排水系统往往落后于城市建设。因此,经常出现开挖已经建设好的建筑设施来改造排水系统的现象。城市污水给人们带来了困扰,因此箱涵的排污疏通对大城市给排水系统污水处理,人们生活舒适显得非常重要。而设计研制箱涵排水疏通移动机器人的自动控制系统,保证机器人在箱涵中自由排污疏通,是箱涵排污疏通机器人的设计研制的核心部分。控制系统核心部分就是超声波测距仪的研制。因此,设计好的超声波测距仪就显得非常重要了。这就是我设计超声波测距仪的意义。第一章 超声测距系统设计方案与论证1.1超声波测距思路超声波传感器分机械方式和电气方式两类,它实际上是一种换能器,在发射端它把电能或机械能转换成声能,接收端则反之。本次设计超声波传感器采用电气方式中的压电式超声波换能器,它是利用压电晶体的谐振来工作的。它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声波电路中,发射端输出一系列脉冲方波,脉冲宽度越大,输出的个数越多,能量越大,所能测的距离也越远。超声波发射换能器与接收换能器其结构上稍有不同,使用时应分清器件上的标志。超声波测距的方法有多种:如往返时间检测法、相位检测法、声波幅值检测法。本设计采用往返时间检测法测距。其原理是超声波传感器发射一定频率的超声波,借助空气媒质传播,到达测量目标或障碍物后反射回来,经反射后由超声波接收器接收脉冲,其所经历的时间即往返时间,往返时间与超声波传播的路程的远近有关。测试传输时间可以得出距离。假定s为被测物体到测距仪之间的距离,测得的时间为ts,超声波传播速度为vm·s1表示,则有关系式(1)s=vt2 (1)在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,按式(2)对超声波传播速度加以修正,以减小误差。v=3314+0607T (2)式中,T为实际温度单位为,v为超声波在介质中的传播速度单位为ms。本系统由超声波发射、回波信号接收、显示和报警、电源等硬件电路部分以及相应的软件部分构成。系统原理框图,如图1所示。单片机发出40kHZ的信号,经放大后通过超声波发射器输出;超声波接收器将接收到的超声波信号经放大器放大,用锁相环电路进行检波处理后,启动单片机中断程序,测得时间为t,再由软件进行判别、计算,得出距离数并送LED显示。图1-1 超声波测距仪原理框图整个系统由单片机AT89S52控制,超声波传感器采用收发分体式,分别是一支超声波发射换能器TCT4016T和一支超声波接收换能器TCT4016R。超声波信号通过超声波发射换能器发射至空气中,遇被测物反射后回波被超声波接收换能器接收。进行相关处理后,输入单片机的INT0脚产生中断,计算中间经历的时间,同时再根据具体的温度计算相应的声速,根据式(2)就可得出相应的距离用来显示,当然在一些场合也可根据需要,设置距离报警值。1.2系统总体设计方案由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到农业生产等自动化的使用要求。 超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率、和声波特性各不相同,因而用途也各不相同。目前在近距离测量方面常用的是压电式超声波换能器。根据设计要求并综合各方面因素,本文采用AT89C51单片机作为控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器。 1.3系统整体方案的论证 超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。此次设计采用反射波方式。 测距仪的分辨率取决于对超声波传感器的选择。超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。第二章 单片机超声测距系统的硬件设计2.1系列单片机的功能特点及测距原理2.1.1 51系列单片机的功能特点 5l系列单片机中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时计数器TO和T1,4个8 b的工O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(EPROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。该系列单片机引脚与封装如图2-1所示。 5l系列单片机提供以下功能:4 kB存储器;256 BRAM;32条工O线;2个16b定时计数器;5个2级中断源;1个全双向的串行口以及时钟电路。空闲方式:CPU停止工作,而让RAM、定时计数器、串行口和中断系统继续工作。掉电方式:保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。2.1.2 单片机实现测距原理 单片机发出超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差tr,然后求出距离SCt2,式中的C为超声波波速。限制该系统的最大可测距离存在4个因素:超声波的幅度、反射的质地、反射和入射声波之间的夹角以及接收换能器的灵敏度。接收换能器对声波脉冲的直接接收能力将决定最小的可测距离。为了增加所测量的覆盖范围、减小测量误差,可采用多个超声波换能器分别作为多路超声波发射接收的设计方法。由于超声波属于声波范围,其波速C与温度有关。2.2 单片机测距电路原理图单片机的外围电路图如图7所示,显示电路由单片机控制七段数码管进行显示,采用数字温度传感器DS18820对环境温度进行检测,从而对超声波的传播速度进行温度补偿,提高测量精度。两个按键用于控制测量的开始与停止以及距离与温度显示的切换。超声波测距电路原理图超声波测距电路原理图 第三章 单片机超声测距系统的软件设计3.1 主程序主程序首先对系统环境初始化,设置定时器TO工作模式为16位定时计数器模式,总中断允许位置1并给显示端口清0;然后调用超声波发生子程序送出若干个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起直射渡触发,从发射开始一直到“虚假反射波”结束这段时间内,不开放外部中断(INTO)申请,便可有效躲避干扰,但同时也会造成测试“盲区”。假设延时约01 ms后,才打开外部中断接收返回的超声波信号,当温度为20,测量盲区为d=1×10-2×344=172 cm。超声波发生子程序的作用是通过P10端口发送超声波换能器所需的40kHz的方波信号(脉冲宽度为12s左右),同时把计数器TO打开进行计时。测出距离后结果将以十进制BCD码方式送往LED显示约0.5s,然后再发超声波脉冲重复测量过程。为了有利于程序结构化和容易计算出距离,主程序采用C语言编写。 3.2超声波发生子程序和超声波接收中断程序 超声波发生子程序的作用是通过P1.0端口发送2个左右超声波脉冲信号(频率约40kHz的方波),脉冲宽度为12s左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行准确,所以采用汇编语言编程。 超声波测距仪主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。 前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。部分源程序如下: receive1:push psw push acc clr ex1 ;关外部中断1 jnb p1.1, right ;P1.1引脚为0,转至右测距电路中断服务程序jnb p1.2, left ;P1.2引脚为0,转至左测距电路中断服务程序 return:SETB EX1;开外部中断1 pop? acc pop? psw reti right: .? ;右测距电路中断服务程序入口 ? ajmp? return left:. ;左测距电路中断服务程序入口 ? ajmp? return 3.3 LCD显示模块程序流程图YYYYYNNNNNLCD1602初始化延时15ms写指令38H延时5ms写指令38H写指令38HLCD空闲?显示模式设置LCD空闲?显示关闭LCD空闲?显示清屏LCD空闲?显示光标移动位置LCD空闲?显示开关及光标位置完成3.4 软件设计包括三个部分,主程序,定时中断程序和外部中断程序,流程图如图7所示。第四章 系统的软硬件的调试超声波测距仪的制作和调试都比较简单,其中超声波发射和接收采用15的超声波换能器TCT40-10F1(T发射)和TCT40-10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距48cm,其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C0的大小,以获得合适的接收灵敏度和抗干扰能力。 硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要。根据所设计的电路参数和程序,测距仪能测的范围为0.075.5m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。软件的调试程序见附录一第五章 总结由于时间和其它客观上的原因,此次设计没有做出实物。但是对设计有一个很好的理论基础。设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离。以数字的形式显示测量距离。超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。此次设计采用反射波方式。超声波测距仪硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分。单片机采用AT89C51或其兼容系列。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P1.0端口输出超声波换能器所需的40kHz的方波信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管8550驱动。超声波发射电路主要由反相器74LS04和超声波发射换能器T构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R1O、R11一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。超声波检测接收电路主要是由集成电路CX20106A组成,它是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz较为接近,可以利用它制作超声波检测接收电路。实验证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。适当更改电容C4的大小,可以改变接收电路的灵敏度和抗干扰能力。超声波测距仪的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。我们知道C语言程序有利于实现较复杂的算法,汇编语言程序则具有较高的效率且容易精细计算程序运行的时间,而超声波测距仪的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言和汇编语言混合编程。主超声波测距仪主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。 前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。超声波测距的算法设计原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。 在元件及调制方面,由于采用的电路使用了很多集成电路。外围元件不是很多,所以调试应该不会太难。一般只要电路焊接无误,稍加调试应该会正常工作。电路中除集成电路外,对各电子元件也无特别要求。根据测量范围要求不同,可适当调整与接收换能器并接的滤波电容C0的大小,以获得合适的接收灵敏度和抗干扰能力。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。致谢本次设计我选的题目是王龙海老师的多路温度实时监测系统的设计。在完成该设计及论文撰写的过程中,离不开王龙海老师的悉心指导和热心帮助。他严谨的治学态度、勤恳的工作作风给我树立了一个很好的榜样,让我学到不少,不仅有学术上的知识,更多的是一种态度,一种方法,这让我在今后的发展道路上有了一个初步的认识和方向。在此,我要向王老师致以最衷心的感谢!此外,我还要感谢王老师实验室的学长们,他们在整个设计过程中给予了我极大的帮助。当我遇到问题且不能解决时,他们总是很耐心的帮我分析,找出问题所在。对整个系统的硬件和软件设计提出了宝贵的意见。同时也感谢班上给我帮助和关怀的同学,对他们衷心的说声感谢。在武汉工程大学四年的学习生活中,我要十分感谢电气信息学院的所有老师,他们的耐心、热情使我深深地感受到生活在电气学院这个大家庭里是多么的幸福和幸运。这里淳朴的学风让我学到了扎实的理论知识,培养了良好的研究能力。感谢学校领导和工作人员!他们的辛勤工作和无私奉献为我的毕业设计以及四年大学生活提供了良好的学习环境,也为我以后的工作和继续学习奠定了坚实的基础,他们的教诲将是我一生中最宝贵的财富。参考文献【1】刘凤然.基于单片机的超声波测距系统.传感器世界.2001,5:29-32【2】葛健强.基于CPLD的超声波测距仪研制. 无锡商业职业技术学院学报.2004,4(3):8-10【3】何希才,薛永毅.传感器及其应用实例.机械工业出版社,2004:138-152【4】胡汉才.单片机原理及其接口技术.清华大学出版社,2004:27-46【5】吴斌方,刘民,熊海斌.超声波测距传感器的研制.湖北工学院学报.2004,19(6):26-28【6】谭洪涛,张学平.单片机设计测距仪原理及其简单应用.现代电子技术.2004,18:94-96【7】Peter Hauptmann, Ralf Lucklum, Bernd Henning. Ultrasonic Sensors for Process Control. Sensors Update.1998,3: 163-207【8】赵占林,刘洪梅.超声波测距系统误差分析及修正.科技情报开发与经济.2002,12(6):144-145【9】J. Otto. Sensors for Distance Measurement and Their Applications in Automobiles. Sensors Update.2002,10:231-255【10】苏炜,龚壁建,潘笑.超声波测距误差分析.传感器技术.2004,23(6):8-11【11】罗忠辉,黄世庆.提高超声测距精度的方法. 机械设计与制造.2005,1:109【12】秦旭.用LM92温度传感器补偿的高精度超声波测距仪.电子产品世界.2003,6:58-59【13】Yusuke Moritake, Hiroomi Hikawa.Category Recognition System Using Two Ultrasonic Sensors and Combinational Logic Circuit. Electronics and Communications in Japan.2005,88(7):33-42附录主程序清单#INCLUDE <REG51.H>#DEFINE UCHAR UNSIGNED CHAR#DEFINE ULONG UNSIGNED LONG#DEFINE UINT UNSIGNED INTSBIT OUT=P37; /发射SBIT IN=P32; /接收SBIT ON=P11; /启动SBIT OFF=P10; /停止/数码管位选SBIT LED1=P21;SBIT LED2=P22;SBIT LED3=P23; /共阳数码管字库UCHAR CODE TAB=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF;UCHAR BWEI,SHWEI,GWEI;BIT AGAIN,/接收标志ONOFF;/开关标志VOID DELAYS (VOID) / 延时程序VOID DELAY1MS(UCHAR I)/ 1MS延时程序12MHZ UINT X; FOR(;I>0;I-) FOR(X=124;X>0;X-);VOID DISPLAY(VOID)/数码管显示子程序P0=TABBWEI; /显示百位LED1=0;DELAY1MS(2);LED1=1;P0=TABSHWEI; /显示十位LED2=0;DELAY1MS(2);LED2=1;P0=TABGWEI; /显示个位LED3=0;DELAY1MS(2);LED3=1;VOID MAIN(VOID)TMOD=0X01; /T0计数,方式1TH0=0; /计数初值TL0=0; /计数初值IT0=1; /INT0负脉冲触发EA=1; /开总中断EX0=1; /开外部INT0中断AGAIN=1;WHILE(1)UCHAR X;IF(ON=0) /启动键处理DELAY1MS(5); /按键消抖IF(ON=0)ONOFF=1; /启动WHILE(ON);/等待按键释放IF(OFF=0) /停止键处理DELAY1MS(5); /按键消抖IF(OFF=0)ONOFF=0; /停止WHILE(OFF); /等待按键释放IF(ONOFF)OUT=0;/产生方波,输出低电平<模拟发射>DELAYS();/延时 产生几个微秒的低电平,让模拟反射的单片机能正确接收信号OUT=1;/恢复高电平,停止模拟发射TH0=0;TL0=0;AGAIN=0;/TR0=1; /T0开始计数FOR(X=0;X<20;X+)DISPLAY(); /数码管显示IF(AGAIN=0)BWEI=SHWEI=GWEI=0;ELSEBWEI=SHWEI=GWEI=10; VOID INT0(VOID) INTERRUPT 0 USING 1 /INTO中断服务程序 FLOAT COUNT; ULONG NUM; TR0=0 ; /停止计数 COUNT=(TH0*256+TL0)/2; NUM= (COUNT/10000)*344;/计算超声波来回距离 / NUM= NUM/2; /总距离除2等于实际距离 BWEI=NUM/100; /输出百位 SHWEI=NUM%100/10; /输出十位 GWEI=NUM%10; /输出个位 AGAIN=1; /接收正确AGAIN=1 模拟反射程序CLUDE <REG51.H>#INCLUDE <INTRINS.H>#DEFINE UCHAR UNSIGNED CHAR#DEFINE UINT UNSIGNED INTSBIT OUT=P11; /发射VOID INITTIMER(VOID) /TMOD=0X1;TH0=0XFF;TL0=0XFF;VOID MAIN(VOID)IT0=1;EX0=1;INITTIMER();/TR0=1;ET0=1;EA=1;WHILE(1)VOID TIMER0(VOID) INTERRUPT 1 /定时器0,延时TR0=0;OUT=0;_NOP_();_NOP_(); OUT=1;IT0=1;EX0=1;VOID INT0(VOID) INTERRUPT 0 /外部中断0,接收IT0=0;EX0=0;SWITCH (P2) CASE 0XFE:TH0=0XD8;TL0=0XF0;/A开关10MSBREAK;CASE 0XFD:TH0=0XB1;TL0=0XE0;/B开关20MSBREAK;CASE 0XFB:TH0=0X8A;TL0=0XD0;/C开关30MSBREAK;TR0=1;LCD显示模块Lcd1602.c#include"Lcd1602.h"void delay1_64ms(void) unsigned char i; for(i=0;i<250;i+) _nop_(); _nop_(); _nop_(); _nop_(); /判断lcd忙unsigned char Lcd_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();while(DBport&0x80);LcdEn=0;return DBport;/写LCD函数void Lcd_Write(bit style,unsigned char input) LcdEn=0; _nop_(); _nop_(); LcdRs=style; _nop_(); _nop_(); LcdRw=0; DBport=input; _nop_(); _nop_(); LcdEn=1; _nop_(); _nop_(); LcdEn=0; Lcd_Wait();/lcd清屏void Clr_Screen(void) Lcd_Write(Lcd_Command,Lcd_Clear_Screen); /delay1_64ms();/LCD归位函数void Screen_Home(void)Lcd_Write(Lcd_Command,Lcd_Home);/delay1_64ms();/设置显示模式void Lcd_SetDisplay(unsigned char DisplayMode) Lcd_Write(Lcd_Command,0x08|DisplayMode);/移动设置void Lcd_Move(unsigned char MoveMode)Lcd_Write(Lcd_Command,0x10|MoveMode);/输入设置void Lcd_SetInput(unsigned char InputMode) Lcd_Write(Lcd_Command,0x04|InputMode);/初始化void Lcd_Init(void) LcdEn=0; /delay1_64ms(); Lcd_Write(Lcd_Command,0x38); Lcd_Write(Lcd_Command,0x38); Lcd_Write(Lcd_Command,0x38); Lcd_SetDisplay(Lcd_Display_On|Lcd_No_Cursor); Lcd_SetInput(Lcd_Ac_Up|Lcd_No_Move);/显示位置设置void GotoXY(unsigned char x,unsigned char y) if(y=0) Lcd_Write(Lcd_Command,0x80|x); if(y=1) Lcd_Write(Lcd_Command,0x80|(x-0x40);/LCD显示函数void Print(unsigne