![基于单片机的超声波测距系统的设计_第1页](http://file4.renrendoc.com/view/ecb204153d8768d4c7aa013a00b10fb6/ecb204153d8768d4c7aa013a00b10fb61.gif)
![基于单片机的超声波测距系统的设计_第2页](http://file4.renrendoc.com/view/ecb204153d8768d4c7aa013a00b10fb6/ecb204153d8768d4c7aa013a00b10fb62.gif)
![基于单片机的超声波测距系统的设计_第3页](http://file4.renrendoc.com/view/ecb204153d8768d4c7aa013a00b10fb6/ecb204153d8768d4c7aa013a00b10fb63.gif)
![基于单片机的超声波测距系统的设计_第4页](http://file4.renrendoc.com/view/ecb204153d8768d4c7aa013a00b10fb6/ecb204153d8768d4c7aa013a00b10fb64.gif)
![基于单片机的超声波测距系统的设计_第5页](http://file4.renrendoc.com/view/ecb204153d8768d4c7aa013a00b10fb6/ecb204153d8768d4c7aa013a00b10fb65.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文题目:基于单片机的超声波测距系统的设计英文题目:Designofultrasonicrangingsystembasedonsingle-chipmicrocomputer提交日期2013年5月18日摘要本课题是基于单片机的超声波测距系统的设计,利用超声波在空气中以速度v传播,达到被测物体时被反射回来,由超声波接收器接收,计算其自发送到接收的往返时间,从而得到实测距离。该系统主要由超声波模块、单片机、LCD显示模块和温度补偿构成。通过单片机的综合处理、电路和程序实现各功能模块的功能。本设计充分发挥了单片机的性能,易于做到实时控制,具有一定的使用和参考价值。关键词单片机超声波测距Designofultrasonicrangingsystembasedonsingle-chipmicrocomputerAbstractThistopicisthedesignofultrasonicrangingsystembasedonsingle-chipmicrocomputer,byultrasonicwavepropagationataspeedofVinair,achievetheobjectisreflectedback,receivedbytheultrasonicreceiver,calculatethefromsendertoreceiverround-triptime,thusobtainsthemeasureddistance.Thesystemismainlycomposedofultrasonicmodule,MCU,LCDdisplaymoduleandtemperaturecompensation.Theimplementationofeverymodulefunctionthroughcomprehensivetreatment,MCUcircuitandprogram.ThisdesignmakesfulluseoftheMCUperformance,easytoachievereal-timecontrol,withsomereferencevalueand.KeywordsSingleChipMicrocomputerUltrasonicRanging目录TOC\o"1-3"\h\u296941.绪言 120831.1选题背景和重要意义 1129061.2课题的提出 223361.3课题设计的任务和要求 2100601.3.1任务 2156341.3.2要求 2165542.超声波测距系统的原理和设计方案 2164802.1超声波发生器及测距原理 287012.1.1超声波发生器 2226132.1.2压电式超声波发生器原理 3275072.1.3超声波测距原理 3308732.2方案的设计 37272.3超声波测距误差的分析 4326343.系统硬件设计 5261563.1系统控制及外围模块简介 5205313.1.1STC89C516RD简介 5235473.1.2复位电路工作原理 7118963.1.3DS18B20温度传感器 769603.1.4时钟电路 859953.1.5LCD模块 8201633.2超声波模块电路 1028383.2.1模块特点 10152913.2.2超声波模块基本工作原理 1048353.3LCD1602显示电路 11174944系统软件设计与调试 11298664.1系统主程序结构 1264864.2测温子程序 12161994.2.1初始化时序 13129934.2.2写时序 13132064.2.3读时序 14307694.3距离计算子程序 15144104.4LCD显示程序 15112224.5硬件调试 207744.5.1电路调试操作流程 2028067总结 216771致谢 2122139参考文献 22421附录1系统原理图 2311857附录2源程序 241.绪言由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,在现场机器人定位系统、车辆自动导航、车辆安全行驶辅助系统、城市交通管理和高速公路管理监测系统,以及河道、油井和仓库及料位的探测中都有应用。1.1选题背景和重要意义近年来,随着电子测量技术的发展,运用超声波作出精确测量已成可能。随着经济发展,电子测量技术应用越来越广泛,而超声波测量精确高,成本低,性能稳定备受青睐。利用超声波测量已知标准位置与目标物体表面之间距离的方法叫做超声波测距法。随着机器人技术在其诞生后短短几十年中的迅猛发展,它的应用范围也逐步由工业生产走向人们的生活。如此广泛的应用使得提高人们对机器人的了解显得尤为重要。机人通过其感知系统察觉前方障碍物距离和周围环境来实现绕障、自动寻线、测距等功能。超声波测距相对其他测距技术而言成本低廉,测量精度较高,不受环境的限制,应用方便,将它与红外、灰度传感器等结合共同实现机器人寻线和绕障功能。超声波由于指向性强、能量消耗缓慢且在介质中传播的距离较远,因而经常用于距离的测量。它主要应用于倒车雷达、测距仪、物位测量仪、移动机器人的研制、建筑施工工地以及一些工业现场等,例如:距离、液位、井深、管道长度、流速等场合。利用超声波检测往往比较迅速、方便,且计算简单、易于做到实时控制,在测量精度方面也能达到工业实用的要求,因此得到了广泛的应用。本课题的研究是非常有实用和有商业价值的。超声波测距是一种极有潜力的方法,近距范围内超声测距有其不受光线影响、结构简单、成本低等特点。超声测量另一个突出优点是:环境介质可以为空气、液体或固体,适用范围广泛。更重要的是超声波检测降低了劳动强度,避免工人在恶劣工作环境下(高、低温,高、低压,强辐射,有毒气、液体环境等)受到伤害,还大大提高了测量精度,可靠性高;另外,超声波测距还可以应用到其他的功能系统中,例如在机器人避障系统、移动机器人避障的超声测距系统、智能机器人管家和简易智能电动车自动避障系统、车载系统、自动泊车系统、自动刹车系统和倒车雷达系统中,超声波测距也有其重要的应用。1.2课题的提出测距的原理和方法有很多,根据其信息载体的不同可归纳为光学方法、无线电方法和超声波方法。前两者在某些地方有局限性,相比之下,超声波方法具有突出的优点,首先,超声波对色彩、光照度不敏感,可用于测量透明及漫射性差的物体(如玻璃、抛光体);其次,超声波对外界光线和电磁场不敏感,可用于黑暗、有灰尘或烟雾、电磁干扰强、易于小型化和集成化。总而言之超声波有很强的环境适应性,因此超声波作为非接触测量手段,已越来越引起人们的重视。1.3课题设计的任务和要求1.3.1任务(1)了解超声波测距原理;(2)根据超声波测距原理,基于单片机设计超声波测距电路;(3)设计一超声波测距系统。1.3.2要求(1)对设计的电路进行分析,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离;(2)对超声波测距系统进行温度补偿;(3)以数字的形式显示测量的实际距离。2.超声波测距系统的原理和设计方案2.1超声波发生器及测距原理超声波发生器的可分几大类,本节介绍压电式发生器的原理和超声波测距的原理。2.1.1超声波发生器为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。2.1.2压电式超声波发生器原理压电式超声波发生器实际上是利用压电晶体的谐振来工作的。超声波发生器内部结构如图2-1所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。图2-1超声波传感器结构2.1.3超声波测距原理在超声探测电路中,在发射端得到输出脉冲为一系列方波,这一系列方波的宽度为发射超声与接收超声的时间间隔,显然被测物距离越大,脉冲宽度越大,输出脉冲的个数与被测距离成正比。超声测距大致有以下两种方法:
(1)取输出脉冲的平均值电压,该电压(电压的幅值基本固定)与距离成正比,测量电压即可测得距离。
(2)测量输出脉冲的宽度,即发射超声波与接收超声波的时间间隔t。因此,被测距离为S=v*t/2。
本次设计采用的是第二种方法。2.2方案的设计本设计是基于单片机的超声波测距系统。用单片机控制超声波的发射、接收电路以及进行数据处理,再用LCD液晶显示屏进行数据的显示。因为声波的速度会随着温度的变化而改变,为了更精确的得到测量距离,温度的影响是不容忽略的,本系统设计了一个温度补偿网络,即通过温度传感器,本设计选用的是DS18B20温度传感器,把当前的温度信息传给单片机,再通过计算,从而得到当前的超声波速度,进而得出实测距离。本系统采用的是宏晶科技推出的新一代高速、低功耗、超强抗干扰的STC89C516RD单片机做核心控制芯片,指令代码完全兼容传统8051单片机;超声波模块选用的是HC-SR04,该超声波模块包括了超声波发射和接收模块电路,很好地实现了超声波测距功能的同时也降低了设计的工作量。本系统由单片机控制HC-SR04超声波发生器向某一方向发射超声波,同时开始计时,当超声波遇到障碍物后立即返回,当超声波接收器接收到反射波后停止计时,同时DS18B20把采集到的温度反馈给单片机,经过程序的计算可求得被测物体的距离。计算公式如下:S=v*t/22-1其中s表示测量点到障碍物的距离,v表示超声波在空气中的传播速度,t表示自超生发射到接收的时间。2.3超声波测距误差的分析根据超声波测距公式s=v*t/2,可知测距的误差是由测量距离的时间误差和超声波的传播速度误差引起的。2.3.1时间误差当要求测距误差小于1mm时,假设已知超声波速度C=344m/s(20℃室温),忽略声速的传播误差。测距误差s△t<(0.001/344)≈0.000002907s即2.907μ在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用的12MHz晶体作时钟基准的89C51单片机定时器能方便的计数到1μs的精度,因此系统采用89C51定时器能保证时间误差在1mm的测量范围内。2.3.2超声波传播速度误差由于超声波在空气中的传播速度受温度的影响比较大,为了测量的精确度,就不得不考虑温度的影响。因此本设计采用了温度补偿的方法。利用SA18B20采集温度反馈给单片机,利用下列公式可减少测量的误差:S=(331.4+0.607T)*t/22-2S表示测量点到障碍物的距离,T表示当前的温度,t表示超声波自发射到接收的时间。下表是超声波超波速在不同温度下在空气中的传播速度关系:表1超声波在空气中的传播速度与温度关系表温度(℃)-30-20-100102030100声速(m/s)313319325332338344349386本设计的原理框图如下:温度补偿温度补偿单片机最小系统超声波发射器单片机最小系统超声波发射器LCDLCD显示屏超声波接收器超声波接收器图2-2超声波测距结构框图2.3.3实验数据分析在超声波测距系统完成后对其进行了调试测量,下表是实验测得的温度补偿前和温度补偿后的数据对比:表2超声波测距系统的实验数据实际距离cm102030405060708090100温度补偿前9.619.12938.748.457.467.477.387.397.2温度补偿后9.919.729.839.849.68999由表可知加入了温度补偿后,测得的距离更加准确了。基本上达到了每一百米的误差是1CM,实际测量,该系统的测量范围为2CM--400CM,在测量范围内的误差可控制在4CM,能满足小范围内的测距要求。理论上,无论是温度补偿前还是温度补偿后测得的数据误差应该是呈线性增加的,但实际测出来的数据却有差别,经过分析后,我得出了如下结论:超声波测距误差不仅仅是由超声波传播速度误差和时间误差引起的,人为的一些因素也会造成测量误差,如操作上的不规范;还有测量平面的凹凸不平也会造成超声波测距产生误差。在实际的测量中操作员应该保持规范的操作,对同一个被测物可进行多次测量取它们的平均值,从而减少测量误差。3.系统硬件设计系统硬件主要由单片机最小系统及LCD显示电路、超声波发生器电路和温度补偿电路四部分组成。3.1系统控制及外围模块简介3.1.1STC89C516RD简介本系统采用的是宏晶科技推出的新一代高速、低功耗、超强抗干扰的STC89C516单片机做核心控制芯片,指令代码完全兼容传统8051单片机。主要特性如下:增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。工作电压:3.3V~5.5V(5V单片机)/2.0V~3.8V(3V单片机)。工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。用户应用程序空间为8K字节。片上集成512字节RAM。通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。具有EEPROM功能。具有看门狗功能。共3个16位定时器/计数器。即定时器T0、T1、T2。外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。通用异步串行口(UART),还可用定时器软件实现多个UART。工作温度范围:-40~+85℃(工业级)/0~75℃PDIP封装。微控制器STC89C516各引脚定义如图3-1所示:图3-1STC89C516RD引脚图3.1.2复位电路工作原理上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间,单片机就可以进行复位操作。本系统的复位电路原理图如图3-2:图3-2复位电路图3.1.3DS18B20温度传感器本设计采用的是美国Dallas半导体公司的不锈钢封装的DS18B20数字温度传感器。DS18B20是采用专门设计的不锈钢外壳,仅有0.2mm的壁厚,具有很小的蓄热量,采用导热性高的密封胶,保证了温度传感器的高灵敏性,极小的温度延迟。DS18B20支持“一线总线”接口(1-Wire),测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±本系统主要利用DS18B20进行温度的测量,并把温度反馈给单片机,由单片进行计算当前温度下超声波的传播速度。其原理图如下:图3-3DS18B203.1.4时钟电路图3-4为实时RTC时钟电路,处理器引脚PC18和PC19外接晶振,构成了内部振荡电路。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了一个稳定的自激振荡器,并产生振荡时钟脉冲。电容器C2、C3起稳定振荡频率,快速起振作用。本次采用的是12MHZ的晶振,从而能更精确地测得超声波往返时间t,减少测距误差。图3-4时钟振荡电路3.2超声波模块电路3.2.1模块特点本系统选用的是HC-SR04发生波模块,此模块包括了超声波发射器和超声波接收器电路。可提供2cm-400cm的非接触式距离感测功能。测距精度可达到3mm图3-5HC-SR04超声波模块电路图3.2.2超声波模块基本工作原理1)采用IO口TRIG触发测距,给至少10us的高电平信号;2)模块自动发送8个40KHZ的方波,自动检测是否有信号返回;3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速)/2.即S=v*t超声波的时序图如图3-6所示:图3-6超声波时序图3.3LCD1602显示电路本系统采用16*2的黑白液晶屏作为当前时间,环境亮度参数的显示器。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,即可以显示出图形。液晶显示器具有厚度薄,适用于大规模集成电路直接驱动,易显色的特点,目前已被广泛应用。单片机STC89C516处理器通过使用5V电压直接驱动LCD。通过可调电阻调节显示屏的对比度,从而更清晰地显示数据。其电路图如3-7所示:图3-7LCD1602显示电路4系统软件设计与调试4.1系统主程序结构系统软件设计主要包括主程序、DS18B20测温程序、LCD1602显示程序。主程序完成系统初始化后调用LCD液晶显示程序,再通过测温和测距在内的各个程序完成距离测量并通过LCD显示输出。DS18B20初始化DS18B20初始化温度采集单片机最小系统超声波发射超声波接收LCD显示结果温度补偿图4-1系统软件方框图4.2测温子程序测温的主要器件是DS18B20,现场温度直接以“一线总线”的数字方式传输,DS18B20中有两个存测得的温度值的两个8位存贮器RAM,用11位存贮温度值,最高位(5位)为符号位。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。并采集到的温度反馈给单片机。4.2.1初始化时序时序如图4-3所示。主机总线发送复位脉冲(最短为480μS,最高时间为960μS的低电平信号),接着再释放总线(置总线为高电平)并进入接收状态。DS18B20在检测到总线的上升沿后等待15—60μS发出器件存在脉冲(低电平持续60—240μS)。初始化程序如下所示:bitInit_DS18B20(void){bitdat=0;DQ=1;//DQ复位DelayUs2x(5);//稍做延时DQ=0;//单片机将DQ拉低DelayUs2x(200);//精确延时大于480us小于960usDelayUs2x(200);DQ=1;//拉高总线DelayUs2x(50);//15~60us后接收60-240us的存在脉冲dat=DQ;//如果x=0则初始化成功,x=1则初始化失败DelayUs2x(25);//稍作延时返回returndat;}单片机主动释放单片机主动释放60-240μS15-60μS480-960μS图4-2初始化时序图4.2.2写时序当主机总线从高电平至低电平时就产生写时间隙,DS18B20在检测到下降沿后15μS时开始采样总线上的电平,所以15μS之内应将所需写的位送到总线上,DS18B20再15—60μS间对总线采样,每写一位总时间必须在60—120μS之间完成。若低电平写入的位是0,高电平写入的位是1,连续写时位间的间隙应大于1μS。程序如下所示:voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;DelayUs2x(25);DQ=1;dat>>=1;}DelayUs2x(25);}4.2.3读时序单片机主动产生一个下降沿的启动信号,并维持低电平大于1μS后释放总线,15μS后DS18B20占主动权,DS18B20会将数据按位放在总线上(低位在先,当读取两个字节的温度值时,低字节在先),这时单片机可读取信号,读取一位的时间应在60μS内完成。当需要读取下一位时再产生下降沿启动信号。程序如下:unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;DelayUs2x(25);}return(dat);}4.3距离计算子程序当前温度和超声波往返时间均测量出来后,用C语言根据公式计算距离来编程是比较简单的算法。根据距离计算公式s=v*t/2设计算法。为了比较温度补偿前和温度补偿后测出的距离的差别,分别在LCD上显示出温度补偿前和温度补偿后测量的距离。其算法如下:voidConut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S1=(time*1.7)/10;//算出来是CM未补偿 S=(speed+0.607*temperature)*time/1000/2; //温度补偿4.4LCD显示程序程序开始初始化后,检查忙信号如果有则写入命令函数,如果没有则重新检查忙信号,至到有信号为止,写完命令函数则写入数据函数,通过一定的延时程序,再返回到程序初始代。其流程图和程序如下:开始开始初始化初始化检查忙信号检查忙信号NNY写数据函数Y写数据函数写命令函数写命令函数延时延时图4-3LCD显示流程图LCD1602显示程序:#include"1602.h"#include"delay.h"#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0/*判忙函数*/bitLCD_Check_Busy(void){DataPort=0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return(bit)(DataPort&0x80);}/*写入命令函数*/voidLCD_Write_Com(unsignedcharcom){while(LCD_Check_Busy());//忙则等待RS_CLR;RW_CLR;EN_SET;DataPort=com;_nop_();EN_CLR;}/*写入数据函数*/voidLCD_Write_Data(unsignedcharData){while(LCD_Check_Busy());//忙则等待RS_SET;RW_CLR;EN_SET;DataPort=Data;_nop_();EN_CLR;}/*清屏函数*/voidLCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){if(y==0) { LCD_Write_Com(0x80+x);//表示第一行 }else { LCD_Write_Com(0xC0+x);//表示第二行 }while(*s) {LCD_Write_Data(*s);s++; }}/*写入字符函数*/voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData){if(y==0) { LCD_Write_Com(0x80+x); }else { LCD_Write_Com(0xC0+x); }LCD_Write_Data(Data);}/*初始化函数*/voidLCD_Init(void){LCD_Write_Com(0x38);/*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08);/*显示关闭*/LCD_Write_Com(0x01);/*显示清屏*/LCD_Write_Com(0x06);/*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C);/*显示开及光标设置*/}4.5硬件调试4.5.1电路调试操作流程1)短路、开路检测电路焊接完成后,为了确保焊接的正确性,必需进行短路、短路的检测。把万用表打到二极管档,用红、黑笔接到电路的正负极,检测电路是否存在短路现象。另外,把万用表的红、黑笔分别接到有相连接的回路中,检测回路中是否存在断路、虚焊现象。2)确认电路连接的正确性把焊接好的电路板和电路原理图详细对照,仔细观察各个连接点是否和电路原理图一致。此外,对于电路中元器件的正负极性的连接是否正确。下图为超声波测距系统设计完成后运行的实物图:图4-4超声波测距系统实物图总结超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。本设计的超声波测距系统主要包括了超声波的发射和接收电路、单片机的最小系统和LCD显示电路。利用单片机的运算和控制功能,利用超声波的特性设计出的一种简单的测距系统。经实际测试证明,该系统工作稳定,能满足一般近距离测距的要求,且成本较低、有良好的性价比。相信随着超声波技术的不断进步,超声波测距将在更多方面发挥作用。致谢从毕业设计的选题到毕业设计的完成这几个月的时间里,老师和同学们都给了我很大的帮助和支持。首先要感谢的是我的指导老师周玲老师,周玲老师是一个很负责的老师,在毕业设计前期就制定了详细的工作时间表,严格要求我们按要求完成相应的任务。感谢她这几个月对我毕业设计的悉心指导和各方面的帮助,在毕业设计的过程中给了我很多宝贵的建议和意见,使我学到了很多知识,在此我向周玲老师致以最真诚的感谢和敬意。最后我要深深地感谢我的家人,正是他们含辛茹苦地把我养育成人,在生活和学习上给予我无尽的爱、理解和支持,才使我时刻充满信心和勇气,克服成长路上的种种困难,顺利的完成大学学习。参考文献[1]李伯成.单片机及嵌入式系统[M].第二版.清华大学出版社,2008[2]郑学坚.周斌.微型计算机原理及应用[M].北京:清华大学出版社,2010[3]吴建平.传感器原理及应用[M].北京:机械工业出版社,2011[4]阎石.数字电子技术[M].西安:西安电子大学科技出版社,2008[5]谭浩强.C程序设计[M].第三版.北京:清华大学出版社,2005[6]邱关源.电路[M].第五版,高等教育出版社,2009
[7]佚名.带您走进单片机世界[M/CD].普中科技,2001[8]严雨.AVR单片机C语言应用100例[M].北京:电子工业出版社,2012:80-90.[9]李喜孟.超声波检频谱分析技术及其应用[M].机械工业出版社,2009.8[10]胜全.D18B20数字温度计在微机温度采集系统中的序编制[M].南京:南京大学出版社1998.3[11]MeyerD,DenzlerJandNiemannH.Modelbasedextractionofarticulatedobjectsinimagesequencesforgaitanalysis[C].InProcIEEEInternationalConferenceonImageProcessing,SantaBarbara,California2007,78—81.[12]LucioDiJasio.Programming30-bitMicriocontroolersinCExploringthePICS32[M].北京:人民邮电出版社,2009:100-120.附录1系统原理图附录2源程序1.脉宽测量.c#include<reg52.h>#include<intrins.h>#include<stdio.h>#include"18b20.h"#include"1602.h"#include"delay.h"#include"hardware.h"#definespeed331.4UnsignedcharcodeASCII[16]={'0','1','2','3','4','5','6','7','8','9','.','-','M','C'};floattemperature;unsignedchardisplay_buff[16];inttemp;staticunsignedcharDisNum=0;//显示用指针 unsignedinttime=0; unsignedlongS1=0; unsignedlongS=0; bitflag=0; unsignedchardisbuff[4] ={0,0,0,0,};/********************************************************/voidConut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S1=(time*1.7)/10;//算出来是CM未补偿 S=(speed+0.607*temperature)*time/1000/2; //温度补偿 if((S>=7000)||flag==1)//超出测量范围显示“-” { flag=0; LCD_Write_Char(0,1,ASCII[11]); LCD_Write_Char(1,1,ASCII[10]); //显示点 LCD_Write_Char(2,1,ASCII[11]); LCD_Write_Char(3,1,ASCII[11]); LCD_Write_Char(4,1,ASCII[12]); //显示M } else { disbuff[0]=S%10000/1000; disbuff[1]=S%1000/100; disbuff[2]=S%1000%100/10; disbuff[3]=S%1000%10%10; //S LCD_Write_Char(0,1,ASCII[disbuff[0]]); LCD_Write_Char(1,1,ASCII[disbuff[1]]); LCD_Write_Char(2,1,ASCII[disbuff[2]]); LCD_Write_Char(3,1,ASCII[10]); //显示点 LCD_Write_Char(4,1,ASCII[disbuff[3]]); LCD_Write_Char(5,1,ASCII[13]); //显示cm LCD_Write_Char(6,1,ASCII[12]); //S1 disbuff[0]=S1%10000/1000; disbuff[1]=S1%1000/100; disbuff[2]=S1%1000%100/10; disbuff[3]=S1%1000%10%10; LCD_Write_Char(0,0,ASCII[disbuff[0]]); LCD_Write_Char(1,0,ASCII[disbuff[1]]); LCD_Write_Char(2,0,ASCII[disbuff[2]]); LCD_Write_Char(3,0,ASCII[10]); //显示点 LCD_Write_Char(4,0,ASCII[disbuff[3]]); LCD_Write_Char(5,0,ASCII[13]); //显示cm LCD_Write_Char(6,0,ASCII[12]); //sprintf(display_buff,"time=%5d",time); //LCD_Write_String(0,0,display_buff); } }/********************************************************/voidzd0()interrupt1 //T0中断用来计数器溢出,超过测距范围{flag=1; //中断溢出标志}/********************************************************/voidStartModule() //启动模块{ 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;}voidInit_Timer0(){ TMOD=0x01; //设T0为方式1,GATE=1; TH0=0; TL0=0; ET0=1;//允许T0中断 EA=1; //开启总中断 }voidInit_sys(){ Init_Timer0(); LCD_Init(); Init_DS18B20(); LCD_Clear(); LCD_Write_String(0,0,"HUWEICHENG"); LCD_Write_String(0,1,"090703109");// Delayns(3); LCD_Clear(); temperature=ReadTemperature(); }voidmain(void){ Init_sys();// WDT_CONTR=0x36; while(1) { temp=ReadTemperature(); temperature=(float)temp*0.0625; sprintf(display_buff,"T=%4.1fC",temperature); LCD_Write_String(9,1,display_buff); LCD_Write_String(9,0,"NON"); StartModule(); while(!RX); TR0=1; while(RX); TR0=0; Conut(); DelayMs(80); WDT_CONTR=0x36; }}2.LCD1602程序#include"1602.h"#include"delay.h"#include"hardware.h"#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1#defineDataPortP0/*判忙函数*/bitLCD_Check_Busy(void){DataPort=0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return(bit)(DataPort&0x80);}/*写入命令函数*/voidLCD_Write_Com(unsignedcharcom){while(LCD_Check_Busy());//忙则等待RS_CLR;RW_CLR;EN_SET;DataPort=com;_nop_();EN_CLR;}/*写入数据函数*/voidLCD_Write_Data(unsignedcharData){while(LCD_Check_Busy());//忙则等待RS_SET;RW_CLR;EN_SET;DataPort=Data;_nop_();EN_CLR;}/*清屏函数*/voidLCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){if(y==0) { LCD_Write_Com(0x80+x);//表示第一行 }else { LCD_Write_Com(0xC0+x);//表示第二行 }while(*s) {LCD_Write_Data(*s);s++; }}/*写入字符函数*/voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData){if(y==0) { LCD_Write_Com(0x80+x); }else { LCD_Write_Com(0xC0+x); }LCD_Write_Data(Data);}/*初始化函数*/voidLCD_Init(void){LCD_Write_Com(0x38);/*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08);/*显示关闭*/LCD_Write_Com(0x01);/*显示清屏*/LCD_Write_Com(0x06);/*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C);/*显示开及光标设置*/}/*设定二个自定义字符,LCD1602中自定义字符的地址为0x00--0x07,即可定义8个字符这里我们设定把一个自定义字符放在0x00位置(000),另一个放在0x01位子(001)*//*voidLcd_User_Chr(void){//第一个自定义字符L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国铝热传输复合材料行业发展现状、市场前景、投资方向分析报告(智研咨询发布)
- 二零二五年度铁路旅客运输合同旅客满意度调查合同
- 2025年01月临高县事业单位工作人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年12月金华事业单位公开招聘武义县人民武装部综合保障中心公开招聘编外工作人员1名笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年12月湖南长沙市国资委普通雇员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2024年12月杭州市余杭区机关事业单位编外招用85人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 细胞因子CK课件
- 异位妊娠观察和护理课件
- 头颈部肿瘤课件
- 累积损伤疾病课件
- 2025年中国国投高新产业投资集团招聘笔试参考题库含答案解析
- 装修工程延期协议
- 《梅大高速茶阳路段“5·1”塌方灾害调查评估报告》专题警示学习
- 2025-2030全球21700圆柱形锂离子电池行业调研及趋势分析报告
- 2025-2025年教科版小学科学三年级下册科学教学计划
- 2025年云南中烟工业限责任公司招聘24人历年高频重点提升(共500题)附带答案详解
- 2025云南昆明空港投资开发集团招聘7人历年高频重点提升(共500题)附带答案详解
- 《大健康解读》课件
- 2024-2025学年成都市树德东马棚七年级上英语期末考试题(含答案)
- 3ds Max动画制作实战训练(第3版)教学教案
- 2025年度交通运输规划外聘专家咨询协议3篇
评论
0/150
提交评论