基于51单片机的超声波测距历程
基于51单片机的超声波测距系统
![基于51单片机的超声波测距系统](https://img.taocdn.com/s3/m/1a03f950844769eae109ed28.png)
基于51单片机的超声波测距系统贾源完成日期:2011年2月22日目录一、设计任务和性能指标 (2)1.1设计任务 (2)1.2性能指标 (2)二、超声波测距原理概述 (3)2.1超声波传感器 (4)2.1.1超声波发生器 (4)2.1.2压电式超声波发生器原理 (4)2.1.3单片机超声波测距系统构成 (4)三、设计方案 (5)3.1AT89C2051单片机 (6)3.2超声波测距系统构成 (7)3.2.1超声波测距单片机系统 (8)图3-1:超声波测距单片机系统 (8)3.2.2超声波发射、接收电路 (8)图3-1:超声波测距发送接收单元 (9)3.2.3显示电路 (9)四.系统软件设计 (10)4.1主程序设计 (10)4.2超声波测距子程序 (11)4.3超声波测距程序流程图 (12)4.4超声波测距程子序流程图 (13)五.调试及性能分析 (13)5.1调试步骤 (13)5.2性能分析 (14)六.心得体会 (14)参考文献 (15)附录一超声波测系统原理图 (17)附录二超声波测系统原理图安装图 (18)附录三超声波测系统原理图PCB图 (19)附录四超声波测系统原理图C语言原程序 (20)参考文献 (23)一、设计任务和性能指标1.1设计任务利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个超声波测距仪器,用LED数码管把测距仪距测出的距离显示出来。
要求用Protel 画出系统的电路原理图,印刷电路板,绘出程序流程图,并给出程序清单。
1.2性能指标距离显示:用三位LED数码管进行显示(单位是CM)。
测距范围:25CM到 250CM之间。
误差:1%。
二、超声波测距原理概述超声波是由机械振动产生的,可在不同介质中以不同的速度传播。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
超声测距是一种非接触式的检测方式。
基于单片机的超声波测距仪毕业论文
![基于单片机的超声波测距仪毕业论文](https://img.taocdn.com/s3/m/66a33c08551810a6f424868a.png)
目录摘要 (1)Abstract (2)第1章绪论 (3)1.1 课题研究的目的与意义 (3)1.2 国内外研究动态 (3)1.3 论文主要内容 (4)第2章系统的总体设计 (5)2.1 设计方案 (5)2.2 系统的硬件选型 (5)2.2.1 单片机选型 (5)2.2.2 超声波传感器选型 (6)2.2.3 超声波接收芯片选型 (7)2.2.4 显示器选型 (7)第3章系统的硬件设计 (8)3.1 基本系统构成 (8)3.1.1 系统电源电路 (9)3.1.2 超声波发射电路 (9)3.1.3 超声波接收电路 (10)3.1.4 晶振电路 (11)3.1.5 复位电路 (11)3.1.6 显示电路 (12)3.1.7 报警电路 (13)3.2 电路原理图 (13)3.3 PCB图 (14)第4章系统的软件设计 (15)4.1 软件keil的简介 (15)4.2 主程序流程 (15)4.3 超声波收发模块程序设计 (16)4.3.1 超声波收发中断子程序 (17)4.3.2 距离测算子程序 (19)4.4 显示模块程序设计 (19)4.4.1 初始化程序 (21)4.4.2 显示程序 (21)4.4.3 延时程序 (22)4.5 现场实测距离显示 (23)第5章结论 (24)5.1 总结 (24)5.2 系统实物图形 (25)5.3 展望 (25)致谢 (26)参考文献 (27)附录 (28)摘要本文阐述了基于51单片机的超声波测距仪的设计过程和运行结果。
AT89C51单片机控制定时器产生方波脉冲,同时计时器T1开始计时。
发出的超声波在空气中传播,而后遇到障碍物体的表面时超声波折返,超声波接收模块接收返回的超声波信号并且把超声波信号转化为电信号。
计时器记录超声波往返所用的时间,从而由51单片机计算得到实测距离。
再使用四位数码管显示距离。
硬件电路由超声波发射电路、超声波接收电路、电源电路、四位数码管显示电路、电铃报警电路、12MHz晶振电路等组成。
(完整版)基于51单片机的超声波测距系统设计
![(完整版)基于51单片机的超声波测距系统设计](https://img.taocdn.com/s3/m/d75ff6ddb90d6c85ed3ac63e.png)
完满 WORD 格式整理1设计任务本文采纳超声波传感器 ,IAP15 单片机以及 LCD显示模块设计了一种超声波测距显示器,能够实现丈量物体到仪器距离以及显示等功能。
是一种构造简单、性能稳固、使用方便、价钱便宜的超声波距离丈量器,拥有必定的适用价值。
2设计思路超声波测距超声波超声波是指频次在 20kHz 以上的声波,它属于机械波的范围。
最近几年来,跟着电子丈量技术的发展,运用超声波作出精准丈量已成可能。
跟着经济发展,电子丈量技术应用愈来愈宽泛,而超声波丈量精准高,成本低,性能稳固则备受喜爱。
超声波也按照一般机械波在弹性介质中的流传规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质汲取而发生衰减等。
正是因为拥有这些性质,使得超声波能够用于距离的丈量中。
跟着科技水平的不停提升,超声波测距技术被宽泛应用于人们平时工作和生活之中。
一般的超声波测距仪可用于固定物位或液位的丈量,合用于建筑物内部、液位高度的丈量等。
超声在空气中测距在特别环境下有较宽泛的应用。
利用超声波检测常常比较快速、方便、计算简单、易于实现及时控制,并且在丈量精度方面能达到工业适用的指标要求,所以为了使挪动机器人能够自动闪避阻碍物行走,就一定装备测距系统,以使其及时获得距阻碍物的地点信息(距离和方向)。
所以超声波测距在挪动机器人的研究上获得了宽泛的应用。
同时因为超声波测距系统拥有以上的这些长处,所以在汽车倒车雷达的研制方面也获得了宽泛的应用。
超声波测距原理最常用的超声测距的方法是回声探测法,超声波发射器向某一方向发射超声波,在发射时辰的同时计数器开始计时,超声波在空气中流传,途中遇到阻碍物面阻拦就立刻反射回来,超声波接收器收到反射回的超声波就立刻停止计时。
超声波在空气中的流传速度为340m/s,依据计时器记录的时间 t ,就能够计算出发射点距阻碍物面的距离s,即:s=340t/2 。
因为超声波也是一种声波,其声速 V 与温度有关。
基于51单片机的超声波测距报告
![基于51单片机的超声波测距报告](https://img.taocdn.com/s3/m/1ef12edad15abe23482f4d71.png)
- 11 -
(六)附录 程序清单 ;********************************************
;* 超声波测距器 * ;* 采用 STC 89C54RC+ 12MHZ 晶振 * ;* 采用共阴 LED 显示器 LRM 2011.06.20 * ;******************************************** ;测距范围 7CM-1M,堆栈在 4FH 以上,20H 用于标志 ;显示缓冲单元在 40H-43H,使用内存 44H、45H、46H 用于计算距离 ; VOUT EQU P1.0 ; 红外脉冲输出端口 ; ;******************************************** ;* 中断入口程序 * ;******************************************** ; ORG 0000H LJMP START ORG 0003H ;中断 0 LJMP PINT0 ORG 000BH ;定时器 0 溢出 LJMP INTT0 ORG 0013H ;中断 1 RETI ORG 001BH ;定时器 1 溢出 LJMP INTT1 ORG 0023H ;串行口中断 RETI ORG 002BH RETI ; ;******************************************** ;* 主 程 序 * ;******************************************** ; START: MOV SP,#4FH MOV R0,#40H ;40H-43H 为显示数据存放单元 (40H 为最高位) MOV R7,#0BH CLEARDISP: MOV @R0,#00H INC R0 DJNZ R7,CLEARDISP
基于51单片机控制的超声波测距程序
![基于51单片机控制的超声波测距程序](https://img.taocdn.com/s3/m/54b1b706a6c30c2259019eb6.png)
s=sj2;
}
void k3cl()
{
sj3=sj3+10;
if(sj3> 500)
sj3=100;
sj1-1;
sx1=sx1/csbc;
mqs=sx1/4.5;
}
void offmsd()
{
if (buffer[0] == 0x3f)
buffer[0] = 0x00;
if((P3&0x10)==0)//判断3位是否显示完
key=0;
digit> > =1; //循环右移1位
}
}
void timeToBuffer() //转换段码功能模块
{
xm0=s/100;
xm1=(s-100*xm0)/10;
xm2=s-100*xm0-10*xm1;
buffer[2]=convert[xm2];
void delay(j);//延时函数
void scanLED();//显示函数
void timeToBuffer();//显示转换函数
void keyscan();
void k1cl();
void k2cl();
void k3cl();
void k4cl();
void offmsd();
void main()//主函数
}
{
csbds=0;
cl=1;
}
}
void csbcj()
{
if(cl==1)
{
TR1=0;
TH0=0x00;
TL0=0x00;
i=10;
while(i--)
{
csbout=!csbout;
基于51单片机的超声波测距仪设计.
![基于51单片机的超声波测距仪设计.](https://img.taocdn.com/s3/m/d0db504fe87101f69e3195e2.png)
江苏经贸职业技术学院毕业设计(论文)单片机的超声波测距仪设计基于题目:MCS51) 信息技术学院系 (院12应用电子专业班级1227031128 号学学生姓名万小伟董李江职校内导师称老师职夏国平企业导师称工程师职企业导师潘仕美称研究生5年2015月日12基于MCS51单片机的超声波测距仪设计摘要:伴随着社会的发展,人们的生活质量不断地提高,各个的城市不断地在发展,当然城市的排水系统得到了很大的发展和改进,由于很多的原因和很多的因素,每个城市的排水系统,现在的城市的发展和建设往往忽略一些重要的项目那就是排水系统。
所以好多的城市经常出现开挖已经建设好的建筑和工程设施来改进排水系统因此他们忽视到这个问题的严重性。
因此,我的论文设计是采用以AT89C51单片机为核心的高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法它还有一个重要的指标那就是低成本一种的设计方法。
通过一系列的实验反馈,这个软件设计的非常的合理、低成本、实时性良好,经过开发和研究,因此在许多的方面得到很多的发展和有效的解决一些重要的问题比如在汽车的倒车,建筑的工地上,还有一些重要的工业现场的重要的位置等等。
关键词:超声波测距仪AT89C51The design of ultrasonic range finder based onMCS51Abstract:With the development of science and technology, the improvement of people'sstandard of living, speeding up the development and construction of the city. urban drainagesystem have greatly developed their situation is constantly improving. control system Freesewage culvert clear guarantee robot, the robot is designed to clear the culvert sewage to thecore.At the core of the design using AT89C51 low-cost, high accuracy, Micro figures show that theultrasonic range finder hardware and software design methods. signal processing, and theultrasonic range finder function. On the basis of the overall system design, hardware andsoftware by the end of each module.Keywords: Silent Wave Measure Distance AT89S52目录第一章绪论 ................................................ - 1 -1.1课题设计的目的和意义 (1)1.2超声波测距仪设计思路 (1)1.2.1超声波测距原理及方案论证 (1)1.2.2超声波测距仪原理框图 (2)第二章课程的方案设计 ...................................... - 3 -2.1系统整体方案的设计 (3)第三章 51系列单片机的功能特点及测距原理 ................... - 3 -3.1基于51系列单片机的功能特点 (3)3.2单片机实现测距原理 (4)3.3超声波测距原理和结构 (5)3.4超声波检测发射电路 (5)3.5超声波检测接受电路 (5)第四章系统的软硬件的调试和程序图 .......................... - 6 -总结 ..................................................... - 10 -致谢 ..................................................... - 10 -参考文献 .................................................. - 11 -第一章绪论1.1课题设计的目的和意义论文设计目的;随着社会的不断地发展,电子测量技术得到了长远的展,超声波的精准测量得到了科技人员的重视和研究。
基于51单片机的超声波测距仪
![基于51单片机的超声波测距仪](https://img.taocdn.com/s3/m/1820d98c0b1c59eef8c7b4f9.png)
机电信息工程学院单片机系统课程设计报告系别:电子工程系专业:通信工程班级:051班设计题目:超声波测距学生:王权于建坤指导教师:董玉华厚杰亚宁婷完成日期:2008年03月19日目录一、设计任务和性能指标1二、设计方案1三、系统硬件设计3四、系统软件设计5五、调试与性能分析8六、心得体会10参考文献11附录1系统硬件电路图12附录2程序清单13一、设计任务和性能指标1.1 设计任务设计一个超声波测距器,可应用在汽车倒车、建筑施工工地以与一些工业现场的位置测控,也可用于如液位、井深、管道长度的测量等场合。
要求用Altium Designer 6画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。
1.2 性能指标1、测量围10—80 cm;2、测量精度1cm;3、测量时与被测物体无直接接触,能够清晰稳定地显示测量结果;4、测量围扩展为10 cm—4m,提高测量精度。
二、设计方案超声波测距仪是利用超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。
超声波测距主要应用于倒车雷达、建筑施工工地以与一些工业现场,例如:液位、井深、管道长度等场合。
目前国一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。
超声波指向性强,穿透能力强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
如测距仪和物位测量仪等都可以通过超声波来实现。
但由于超声波传感器的成本较高,所以一般运用于专业领域,民用产品中运用较少。
基于51单片机超声波测距仪
![基于51单片机超声波测距仪](https://img.taocdn.com/s3/m/a4a1e2a9e45c3b3566ec8bb4.png)
基于51单片机超声波测距仪基于51单片机的超声波测距仪设计摘要利用超声波进行测距有许多优点比如不受光强度、色彩和电磁场等外界因素的影响,而且超声波传感器的价位较低、结构也较为简单,超声波以声速传播,方便收发与计算。
在汽车倒车雷达、移动机器人的避障、特别是测量距离等许多方面都已有了非常普遍的应用。
本次毕业设计的超声波测距仪是在STC89C51单片机的基础上设计的,在分析和了解了超声波的一些优点和特性后,又查看了利用超声波测距的基本原理。
最后决定使用51单片机系统和超声波传感器共同组成。
设计的超声波测距仪的硬件部分主要包括电源及复位模块、单片机与超声波模块组成的超声波发射模块、超声波接收模块、LED数码显示模块和扩展报警模块。
软件部分主要包括单片机主程序、根据超声波发射与接收计算距离程序、LED距离显示程序、按键控制程序和蜂鸣器报警程序,这样安排使得系统具有模块化的特点。
系统容易进行控制,具有可靠地的性能,具有较高的测量精度,最重要的是能对距离进行实时测量。
关键词:单片机,测距仪,超声波,实时测量Design of Ultrasonic Distance Meter Based on 51 MCMABSTRACTUsing ultrasonic ranging has many advantages for example, from the effects of light intensity, color and electromagnetic field and other external factors and price lower ultrasonic sensors, the structure is simple, ultrasonic sounds velocity, convenient transceiver and calculation. In the car reverse radar, mobile robot obstacle avoidance, especially measuring distance and many other aspects have been very common application.The graduation design of ultrasonic range finder based on STC89C51 MCU design, analysis and understanding of the some advantages and characteristics of ultrasonic and looked at the use of the basic principle of ultrasonic distance measurement. Finally, the composition of the 51 single-chip microcomputer system and ultrasonic sensor is decided.. The design of ultrasonic rangefinder hardware part consists of the power and reset module, SCM and ultrasonic module consists of ultrasonic emission module, ultrasonic receiving module, LED digital display expansion module and alarm module. Software part mainly includes MCU program, according to the ultrasonic transmitting and receiving computing program distance, the distance of LED display program, key control procedures and buzzer alarm procedures, this arrangement enables the system to have the characteristics of modular. The system is easy to control and has the reliable performance, and has the higher accuracy, and the most important is the real-time measurement of the distance.KEY WORDS: Single chip microcomputer,Range finder,Ultrasonic,Real-time measurement目录摘要 (I)目录 (III)第1章绪论 (1)1.1 研究背景 (1)1.2 研究的主要意义 (1)第2章系统电路设计 (3)2.1 系统结构设计 (3)2.2 电路总体设计方案 (3)发射与接收电路设计方案 (3)显示电路设计方案 (5)报警电路设计方案 (6)系统复位电路设计 (6)第3章系统硬件设计 (8)3.1 单片机概述 (8)STC89C51主要性能 (8)3.1.2 STC89C51外部结构及特性 (8)内部组成 (11)3.2 超声波测距模块 (12)3.2.1 超声波传感器介绍 (12)HC-SR04超声波测距芯片的性能特点 (12)超声波时序图 (15)3.3 驱动显示电路及报警电路 (15)LED数码管显示电路 (16)蜂鸣器报警电路 (17)3.4HC-RS04超声波测距原理 (17)3.5 按键设置电路 (18)第4章系统软件设计 (21)4.1 系统主程序 (21)4.2 显示距离子程序 (22)4.3 报警子程序 (22)4.4 按键子程序 (23)第5章系统仿真 (25)5.1 系统仿真环境——Proteus (25)5.2 仿真 (25)5.3 误差及特性分析 (26)结论 (28)谢辞 (29)参考文献 (30)第1章绪论1.1 研究背景超声波测距法是通过超声波测量从已知位置到被测物体表面的距离的利用超声波的方法。
(整理)用51单片机设计超声波测距系统的设计原理及电路附源程序
![(整理)用51单片机设计超声波测距系统的设计原理及电路附源程序](https://img.taocdn.com/s3/m/22c5f42b650e52ea551898bf.png)
基于51单片机的超声波测距仪说明书引言超声波测距仪,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。
一、性能要求该超声波测距仪,要求测量范围在0.08-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
二、工作原理及方案论证超声波传感器及其测距原理超声波是指频率高于20KHz的机械波。
用超声波传感器产生超声波和接收超声波,习惯上称为超声波换能器或超声波探头。
超声波传感器有发送器和接收器.超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换,发射超声波;而在收到回波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOF(timeofflight)。
首先测出超声波从发射到遇到障碍物返回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离。
根据要求并综合各方面因素,采用AT89C52单片机作为主控制器,用动态扫描法实现LED数字显示,超声波驱动信号用单片机的定时器完成,超声波测距仪的系统框图如下图所示:图1 超声波测距仪系统设计框图三、系统硬件部分硬件部分主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成。
1.单片机系统及显示电路单片机采用AT89C52来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。
单片机通过P1.1引脚发射脉冲控制超声波的发送,然后单片机不停的检测外中断0口INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回。
计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离。
显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP三极管驱动。
51单片机超声波测距程序
![51单片机超声波测距程序](https://img.taocdn.com/s3/m/b5a5a1e2581b6bd97e19ea3e.png)
//超声波测距,测距X围2cm-400cm; #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit trig=P1^0;sbit echo=P3^2;sbit test=P1^1;//测试灯sbit dula=P2^6;sbit wela=P2^7;sbit BEEP=P2^3;uint timeh,timel,distance;uint ge,shi,bai,xiaoshu,flag,time;/*共阴极数码管不带小数点代码表*/ uchar code list[]={0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d ,0x7d , 0x07 ,0x7f , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 };/*共阴极数码管带小数点代码表*/ uchar code listtwo[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*长延时函数*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=100;y>0;y--); }/*短延时函数*/void delay20us() {uchar a;for(a=0;a<100;a++); }/*报警函数*/ void beer(){//BEEP=0;delay(10);}/*定时器初始化*/ void initime0() {TMOD=0x01;TH0=0;TL0=0;EA=0;ET0=0;EX0=0;}/*外部中断函数*/void estern() interrupt 0{timeh=TH0;timel=TL0;beer();flag=1;//进入中断,标志位就置1 EX0=0;//同时关断外部中断和定时器 TR0=0;}/*显示函数*/void display(distance) {bai=distance/1000;shi=distance%1000/100; ge=distance%100; xiaoshu=distance%10;dula=1;P0=list[xiaoshu];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);P0=listtwo[ge]; dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(2);dula=1;P0=list[shi]; dula=0;P0=0xff;wela=1;P0=0xfd;delay(1);dula=1;P0=list[bai]; dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);}/*被调用子函数*/ void diaoyong(){uint i;EA=0;echo=1;//为了检测电平的上下,首先必须拉高trig=1;delay20us();trig=0;while(echo==0);//如果进入中断即接收到超声波就向下执行flag=0;//接收到就去除标志位EA=1;//同时打开总中断EX0=1;//打开外部中断TR0=1;//开定时器TH0=0;//定时器清零TL0=0;for(i=0;i<100;i++)//等待测量的结果{display(distance);//用100次显示循环来延时,解决数码管显示不亮问题}//delay(50);//用延时函数数码管闪烁TR0=0;//延时一段时间后关断定时器EX0=0;//延时一段时间后关断外部中断if(flag==1)//如果进入中断,说明测距已经测好{time=timeh*256+timel;//计算测定距离,并显示distance=time*0.1720;display(distance);}if(flag==0)//如果没有进入中断,距离为0,同时灯闪烁{distance=0;test=!test;}}word/*主函数*/void main(){initime0();test=0;trig=0;EA=1;while(1){diaoyong();display(distance);}}11 / 11。
基于51单片机的超声波测距
![基于51单片机的超声波测距](https://img.taocdn.com/s3/m/b1e74ea3ed3a87c24028915f804d2b160a4e8641.png)
基于51单片机的超声波测距超声波:超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好、能量集中、传输过程中衰减较小、反射能力较强等优点。
超声波传感器可广泛应用于非接触式检测方法,它不受光线、被测物颜色等影响, 对恶劣的工作环境具有一定的适应能力, 因此在水文液位测量、车辆自动导航、物体识别等领域有着广泛的应用。
超声波测距原理:超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波, 从而测出发射和接收回波的时间差Δt , 然后求出距离S 。
在速度v 已知的情况下,距离S 的计算,公式如下:S = vΔt/ 2。
在空气中,常温下超声波的传播速度是334 米/秒,但其传播速度V 易受空气中温度、湿度、压强等因素的影响,其中受温度的影响较大,如温度每升高1 ℃, 声速增加约0. 6 米/ 秒。
因此在测距精度要求很高的情况下, 应通过温度补偿的方法对传播速度加以校正。
已知现场环境温度T 时, 超声波传播速度V 的计算公式如下:V = 331.5 + 0. 607T这样, 只要测得超声波发射和接收回波的时间差Δt 以及现场环境温度T,就可以精确计算出发射点到障碍物之间的距离。
超声波测距模块:(1):采用IO口TRIG触发测距,给至少10us的高电平信号;(2):模块自动发送8个40khz的方波,自动检测是否有信号返回;(3):有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2。
例程:/******************超声波测距1602显示******************单片机型号:STC89C52RC*开发环境:KEIL*名称:超声波测距液晶1602显示/**********************包含头文件*********************/#include <reg52.h>#define LCD_Data P0#define Busy 0x80/**********************宏定义*************************/#define SPEED_30C 3495 //30摄氏度时的声速,声速V=331.5+0.6*温度;#define SPEED_23C 3453 //23摄氏度时的声速,声速V=331.5+0.6*温度;/**********************位定义*************************/sbit ECHO=P1^6;sbit TRIG=P1^5;sbit BEEP=P2^3;sbit LCD_RS=P1^0;sbit LCD_RW=P1^1;sbit LCD_E=P2^5;/********************定义变量和数组*******************/long int distance=0; //距离变量unsigned char code table0[]={" SL-51A "};unsigned char code table1[]={" NO ECHO "};unsigned char code table2[]={"Distance:xxx.xcm"};unsigned char count;void Delay5Ms(void);void delay(int In,int Out);void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);unsigned char ReadDataLCD(void);unsigned char ReadStatusLCD(void);void LCDInit(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 delayt(unsigned int x){unsigned char j;while(x-->0){for(j=0;j<125;j++){;}}}void Delay5Ms(void){unsigned int TempCyc=3552;while(TempCyc--);}void delay(int In,int Out){int i,j;for(i=0;i<In;i++){for(j=0;j<Out;j++){;}}}void Alarm(unsigned char t){unsigned char i;for(i=0;i<t;i++){BEEP=0;delay(10,1000);BEEP=1;delay(10,1000);}}void Init_timer(void){TMOD=0x01;TL0=0x66;TH0=0xfc;ET0=1;EA=1;}void Init_Parameter(void){TRIG=1;ECHO=1;count=0;distance=0;}void display(int number){unsigned char b,c,d,e;b=(number/1000);c=(number/100)%10;d=(number/10)%10;e=number%10;DisplayOneChar(9,1,(0x30+b));DisplayOneChar(10,1,(0x30+c));DisplayOneChar(11,1,(0x30+d));DisplayOneChar(13,1,(0x30+e));}void Trig_SuperSonic(void){TRIG=1;delayt(1);TRIG=0;}void Measure_Distance(void){unsigned char l;unsigned int h,y;TR0=1;while(ECHO){;}TR0=0;l=TL0;h=TH0;y=(h<<8)+l;y=y-0xfc66;distance=y+1000*count;TL0=0x66;TH0=0xfc;delayt(30);distance=SPEED_30C * distance / 20000;}void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD();LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}void WriteCommandLCD(unsigned char WCLCD,BuysC) {if (BuysC)ReadStatusLCD();LCD_Data=WCLCD;LCD_RS=0;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}unsigned char ReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;return(LCD_Data);}unsigned char ReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;while (LCD_Data & Busy);return(LCD_Data);}void LCDInit(void){LCD_Data=0;WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0C,1);}void LCD_Clear(void){WriteCommandLCD(0x01,1);Delay5Ms();}void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData){Y&=0x1;X&=0xF;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);}void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData) {unsigned char ListLength;ListLength=0;Y&=0x1;X&=0xF;while(DData[ListLength]>=0x20){if(X<=0xF){DisplayOneChar(X,Y,DData[ListLength]); ListLength++;X++;}}}void main(void){LCDInit();Init_timer();Init_Parameter();Alarm(2);DisplayListChar(0,0,table0);DisplayListChar(0,1,table1);while(1){Trig_SuperSonic();while(ECHO==0){;}Measure_Distance();DisplayListChar(0,1,table2);display(distance);Init_Parameter();delayt(100);}}void timer0 (void) interrupt 1{TF0=0;TL0=0x66;TH0=0xfc;count++;if(count==18){TR0=0;TL0=0x66;TH0=0xfc;count=0;}}。
基于51单片机超声波测距仪设计
![基于51单片机超声波测距仪设计](https://img.taocdn.com/s3/m/1ccd4c7f0812a21614791711cc7931b765ce7bbb.png)
基于51单片机超声波测距仪设计超声波测距仪是一种应用较为广泛的测量设备,可以用于测量物体与超声波传感器之间的距离。
本文将基于51单片机设计一个简单的超声波测距仪,并介绍其原理、硬件电路和程序设计。
一、原理介绍:超声波测距仪的工作原理是利用超声波传感器发射超声波,并接收其反射回来的波,通过计算发射和接收之间的时间差,从而确定物体与传感器之间的距离。
超声波的传播速度在空气中近似为331.4m/s,根据速度与时间关系,可以通过测量时间来计算距离。
二、硬件电路设计:1.超声波模块:选用一个常见的超声波模块,包括超声波发射器和接收器。
2.51单片机:使用51单片机作为控制器,负责控制超声波模块和处理测距数据。
3.LCD显示屏:连接一个LCD显示屏,用于显示测距结果。
4.连接电路:将超声波发射器和接收器分别连接到单片机的引脚,将LCD显示屏连接到单片机的相应引脚。
三、程序设计:1.初始化:包括初始化单片机的GPIO引脚、定时器以及其他必要的设置。
2.发送信号:发射一个超声波信号,通过超声波模块的引脚控制。
此时,启动定时器开始计时。
3.接收信号:当接收到超声波的反射信号时,停止定时器,记录计时的时间差。
根据超声波传播速度,可以计算出距离。
4.显示结果:将测得的距离数据显示在LCD显示屏上。
四、实现效果:通过以上设计,可以实现一个简单的超声波测距仪。
在实际应用中,可以根据需求扩展功能,例如增加报警功能、计算速度等。
总结:本文基于51单片机设计了一个超声波测距仪,包括硬件电路设计和程序设计。
通过该设备可以实现对物体与超声波传感器之间的距离进行测量,并将结果显示在LCD显示屏上。
该设计只是一个基本的框架,可以根据需要进行进一步的改进和优化。
用51单片机实现HC-SR04超声波测距程序
![用51单片机实现HC-SR04超声波测距程序](https://img.taocdn.com/s3/m/1279b9bcc281e53a5802ffcf.png)
#include <reg52.h> //包括一个52标准内核的头文件#define uchar unsigned char //定义一下方便使用#define uint unsigned int#define ulong unsigned longsbit Trig = P1^0; //产生脉冲引脚sbit Echo = P3^2; //回波引脚sbit test = P1^1; //测试用引脚uchar code SEG7[10]={~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90};//数码管0-9uint distance[4]; //测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //自定义寄存器bit succeed_flag; //测量成功标志//********函数声明void conversion(uint temp_data);void delay_20us();void main(void) // 主程序{uint distance_data,a,b;uchar CONT_1;i=0;flag=0;test =0;Trig=0; //首先拉低脉冲输入引脚TMOD=0x11; //定时器0,定时器1,16位工作方式TR0=1; //启动定时器0IT0=0; //由高电平变低电平,触发外部中断ET0=1; //打开定时器0中断EX0=0; //关闭外部中断EA=1; //打开总中断0while(1) //程序循环{EA=0;Trig=1;delay_20us();Trig=0; //产生一个20us的脉冲,在Trig引脚while(Echo==0); //等待Echo回波引脚变高电平succeed_flag=0; //清测量成功标志EX0=1; //打开外部中断TH1=0; //定时器1清零TL1=0; //定时器1清零TF1=0; //TR1=1; //启动定时器1EA=1;while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)TR1=0; //关闭定时器1EX0=0; //关闭外部中断if(succeed_flag==1){distance_data=outcomeH*256+outcomeL;distance_data= (distance_data*1.87)/100;} //为什么除以58等于厘米, Y米=(X 秒*344)/2// X秒=( 2*Y米)/344 ==》X 秒=0.0058*Y米 ==》厘米=微秒/58if(succeed_flag==0){distance_data=0; //没有回波则清零test = !test; //测试灯变化}/********************************************每循环3次就显示结果一次*********************************************/a=distance_data;if(b==a) CONT_1=0;if(b!=a) CONT_1++;if(CONT_1>=3){ CONT_1=0;b=a;conversion(b);}}}//***************************************************************//外部中断0,用做判断回波电平INTO_() interrupt 0 // 外部中断是0号{outcomeH =TH1; //取出定时器的值outcomeL =TL1; //取出定时器的值succeed_flag=1; //至成功测量的标志EX0=0; //关闭外部中断}//****************************************************************//定时器0中断,用做显示timer0() interrupt 1 // 定时器0中断是1号{TH0=0xfd; //写入定时器0初始值TL0=0x77;switch(flag){case 0x00:P0=ge; P2=0xfe;flag++;break;case 0x01:P0=shi;P2=0xfd;flag++;break;case 0x02:P0=bai;P2=0xfb;flag=0;break;}}//显示数据转换程序void conversion(uint temp_data){uchar ge_data,shi_data,bai_data ;bai_data=temp_data/100 ;temp_data=temp_data%100; //取余运算shi_data=temp_data/10 ;temp_data=temp_data%10; //取余运算ge_data=temp_data;bai_data=SEG7[bai_data];shi_data=SEG7[shi_data];ge_data =SEG7[ge_data];EA=0; //显示数据的时候不要测量bai = bai_data;shi = shi_data;ge = ge_data ;EA=1;}//******************************************************************void delay_20us(){ uchar bt ;for(bt=0;bt<100;bt++);}(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
基于51单片机的超声波测距系统的设计
![基于51单片机的超声波测距系统的设计](https://img.taocdn.com/s3/m/61760d8cd5bbfd0a78567305.png)
基于51单片机的超声波测距系统的设计O 引言超声波是指频率大于20 kHz 的在弹性介质中产生的机械震荡波。
由于超声波频率较高,穿透力强,指向性强,传输过程中衰减少,能量消耗缓慢,在介质中传播的距离较远,遇到杂质或分界面时会产生反射波,因此常被用于非接触式测距。
并且超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有较好的适应能力。
广泛应用于汽车倒车、机器人避障、工业测井、水库液位测量、管道长度测量等需要自动进行非接触测距的场合。
1 超声波测距原理Pellarn 和Galt 于1946 年提出了脉冲回波法,其工作原理是:用超声脉冲激励超声探头向外辐射超声波,同时接收从被测物体反射回来的超声波(简称回波),通过检测或估计从发射超声波至接收回波所经历的射程时间ToF(Time of Flight),按下式计算超声波探头与被测物体之间的距离d,即其中。
c 为声波在空气介质中的传播速度。
2 系统构成本系统硬件电路由单片机、超声波发射电路、超声波接收电路、测温电路、显示电路、报警电路等构成,如图1 所示。
3 系统程序设计3.1 主程序主程序首先对系统环境初始化,设置定时器TO 工作模式为16 位定时/计数器模式,总中断允许位置1 并给显示端口清0;然后调用超声波发生子程序送出若干个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起直射渡触发,从发射开始一直到“虚假反射波”结束这段时间内,不开放外部中断(INTO)申请,便可有效躲避干扰,但同时也会造成测试“盲区”。
假设延时约0.1 ms 后,才打开外部中断接收返回的超声波信号,当温度为20℃,测量盲区为d=1×10-2×344=1.72 cm。
3.2 超声波发生子程序和接收子程序超声波发生子程序的作用是通过P1.0 端口发送超声波。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
delay_20us(); //延时20us
Trig=0; //Trig输出20us高电平触发测距
while(Echo==0); //等待Echo回波引脚变高电平
TR0=1; //程序运行到此处时说明Echo脚变成了高电平,此时启动T0开始计时
} //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/*******************************************/
TMOD=0x01; //定时器0,16位工作方式计数模式
TH0=0; //定时器0清零
TL0=0; //定时器0清零
EA = 1; //总中断开
Trig=0; //拉低为下次触发做准备
函数名:定时器初始化函数
调 用:INT_init();
/********************************************************************************NT_init (void)
{
}
//***************************************************************
void dist (void)
{ //测量距离程序
Trig=1; //
/***************************************************************/
#include <STC15w.H>// 单片机头文件
#include <intrins.h>
#include <4LED_YANG.h>//包含共阳数码管驱动程序
distance=time*0.170; //测量距离
distance=distance-2; //测量起点不同减去的数值不同
TH0 = 0; //重置计时器
TL0 = 0;
dist(); //测量距离
disp(); //数码管显示距离
delay1ms(20); //两次测量间需要有10ms间隔
void delay_20us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 57;
while (--i);
}
/*********************************************************************************************
void delay1ms (unsigned int a)
{ // 1ms延时程序
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 630; i++); //STC单片机在晶振为12MHz时i值上限为630
sbit Echo = P5 ^ 5; //超声波测距模块Echo连接的IO
sbit Trig = P5 ^ 4; //超声波测距模块Trig连接的IO
/*******************************************/
}
void main()//主函数
{
init(); //单片机IO口工作方式初始化
INT_init; //T0初始化
while(1)
{
while(Echo==1); //等待Echo回波引脚高电平结束
TR0=0; //程序运行到此处时说明Echo脚变成了低电平,此时T0停止计时
time=TH0*256+TL0;
#define uchar unsigned char
#define uint unsigned int
uint timeH,timeL;//定义2个存储计时器值的变量
uint distance;//定义测量值的变量
uint time;//定义Echo脚返回的高电平时间变量
/***************************************************************/