单片机源代码-超声波测距
- 格式:docx
- 大小:18.62 KB
- 文档页数:4


51 单片机 1602 显示的超声波测距源程序
制作超声波测距仪,是很多学生、单片机爱好者学习单片机动手实践的
一个实作项目,这款超声波测距程序,针对目前比较广泛使的 HC-SR04 超声
波模块而设计的,这款 1602 显示的超声波测距距源程序,单片机是 51 系列
单片机,超声波测距模块先用的是 HC-SRO4 超声波测距模块,单片机的晶
振是 12M,接线:模块 TRIG 接 P2.5 ECH0 接 P3.2,当距离超出测量时,范
围显示-,显示单位是 CM。这款程序由于硬件比较简单,制作时焊接工作量
小,几乎是百分之百的成功,也可以用 PROTEUS 软件直接进行。需要超声
波测距仿真配套的爱好者,可百度搜索:电子乐屋,这个网上有很多款超声
波测距仿真资料。
#include[reg52.h> //注意请把 [ 换成 #include [intrins.h> //
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2; //1602 的数据/指令选择控制线
sbit rw=P2 ; //1602 的读写控制线
DL-51单片机入门系列教程
Copyright©2009-2010牛奶动力工作室ALLrightsreserved151入门系列教程超声波测距模块编程Revision0.01(2011-10-18)DL-51单片机入门系列教程
Copyright©2009-2010牛奶动力工作室ALLrightsreserved2刚好这次做机器人用到了超声波,才开始看它的工作原理,感觉还很简单,但是调试到最后,发现了很多问题,该碰到的都碰到了,趁着写单片机入门教程的机会,写出来分享给大家。先把超声波的工作原理贴出来:从超声波的工作原理可以知道,其实只要单片机的两个引脚就足够,一个引脚接发送端,一个引脚接接收端即可。工作时,发送端引脚置高电平10us时间的脉冲,这将激发超声波模块发送8个40khz周期的电平信号,然后模块的收端开始检测回波(实际上,两个眼睛,一个是发送的,一个是用来接收的)。一旦发现有回波信号,就会输出一个响应给接收端引脚,这个响应是一个高电平脉冲。所以,我们只要在接收端去检测是否有高电平脉冲即可。但从程序编写与调试的过程来看,并没有那么简单。因为超声波第一次发送40KHZ的信号出去后反射回来,有可能又被反弹回去,这样以来,相当于超声波在两个障碍物之间不断地来回反弹,导致接收端不断地收到”回波信号“——实际上第一次反弹回来的才是回波信号,其他的都是二次、三次...的反弹回波信号。DL-51单片机入门系列教程
Copyright©2009-2010牛奶动力工作室ALLrightsreserved3如果每次检测到回波就让蜂鸣器响一次,那么,我们程序运行时,可能会听到蜂鸣器不断地响,可能就是这个原因。另外,需要关注的是,超声波如果前面没有障碍物,也会在接收端引脚上故意输出140us的电平,以”防止发射信号对回响信号的影响“。从上面的分析看来,不管超声波前面有无障碍物,接收端引脚肯定都会出现高电平脉冲。所以我们在编程时,必须过滤掉这140us。讲完超声波的工作原理,我们来看下编写程序的思路。由于超声波可能会连续收到回响信号,导致接收端不断出现高电平脉冲,而实际上,我们有用的仅仅是第一次反射回来的回响信号,因此,使用”查询接收端引脚是否出现高电平“的方法行不通。可以使用外部中断,只检测第一次反射回来的信号,后续的反射信号全部丢弃不管。下面看下140us的处理。根据公式us/58=厘米,140us就是约2cm的距离。因此在超声波前2cm有障碍物,刚好也会返回140us的高电平,而超声波的测量范围是3-4.5米,因此可以不考虑140us。最后总结一下思路,发送端随便选一个引脚,这里选择P1.0,接收端使用外部中断0引脚P3.2。程序一开始,我们做定时器、中断的初始化,然后给发送端引脚一个高电平10us。接下来,我们不断查询接收引脚是否有高电平出现,一旦出现高电平,立即启动定时器。选择单片机的外部中断0为下跳沿中断,因此当高电平一过,立即进入中断,此时关掉定时器,就OK了。后面再发现接收引脚跳变也不要进中断。由于项目需要,我们并没有使用超声波测量距离的功能,我们只用来判断是否有障碍物。另外,我们只让超声波检测1.5米范围内是否有障碍物,超出1.5米之外,全部要忽略掉。因此我编写的程序可能和大家不太一样。我使用12Mhz的晶振,机器周期为1us,即定时器每次加1用1us时间。1.5米的距离,超声波来回一次走3米,3m/340米每秒=8823us,就是说,如果经过8823us后,还没有收到回响信号,说明距离已经超出了1.5米,我直接丢弃,并警告距离超出1.5米。这样,定时器的初始值可以设置为(65536-8823us)。那么怎么判断是否溢出呢?我使用TF0来做。程序如下,其中P1.7、P0.7、P3.7是测试用的脚,可忽略,硬件链接为:Trig-->P1.0Echo-->P3.2VCC-->VCCGND-->GND还有一个脚空着。/*======超声波控制线=====*/TrigBITP1.0//发射端,高电平有效EchoBITP3.2//接收端,探测高脉冲有效,高脉冲持续时间,与距离成正比//OUTBITDL-51单片机入门系列教程
;***P1.0口发射,P1.2口接收,P0.0~P0.3与P0.4~P0.7分别接SN74LS47N解码器的A、B、C、D脚,再接到两位七段数码管
;***************产生超声波发射所需的发射脉冲信号********************
0RG 00H
START:
MOV A,#0FFH ;ACC=0FFH
MOV P1,A ;P1.2将作为输出口,需要先写入“1”
MOV TMOD,#02H ;设置Timer0工作在模式2下
TIMER0_LOAD:
MOV TH0,#0F4H ;往TH0中载入计数初始值
MOV TL0,#0F4H ;往TL0中载入计数初始值
RESEND_PULSE:
MOV R2,#40 ;一个方波对应2个Timer延时,所以设为40
SEND_PAUSE:
SETB TR0 ;启动Timer0
TIMER0_CHECK:
JNB TF0,TIMER0_CHECK ;检测Timer溢出标志,当TF0=1,跳出
CLR TR0 ;关闭Timer0
CLR TF0 ;将TF0清零
CPL P1.0 ;将TF0取反
DJNZ R2,SEND_PULSE ;如果R2不为0,跳到SEND_PULSE继续
;***************等待回波信号时的计时功能********************
WAITECHO: ;等待回波信号
MOV TMOD,#12H ;Timer1模式1,Timer0模式2
TIMER1_LOAD:
MOV TL1,#00H ;载入最小的计数初始值,以获得最大计时
基于单片机的超声波测距系统的设计
超声波测距系统是一种常见的测距技术,它利用超声波的特性来测量物体与传感器之间的距离。基于单片机的超声波测距系统是一种常见的应用,它可以广泛应用于工业自动化、智能家居、机器人等领域。
基于单片机的超声波测距系统主要由超声波传感器、单片机、LCD显示屏和电源等组成。超声波传感器是测距系统的核心部件,它可以发射超声波信号并接收反射回来的信号。单片机是控制系统的核心部件,它可以对传感器发射的信号进行处理,并计算出物体与传感器之间的距离。LCD显示屏可以显示测量结果,方便用户进行观察和操作。
在设计基于单片机的超声波测距系统时,需要注意以下几点:
1.选择合适的超声波传感器。传感器的频率和探测距离是选择传感器时需要考虑的重要因素。
2.选择合适的单片机。单片机的处理速度和存储容量是选择单片机时需要考虑的重要因素。
3.编写合适的程序。程序需要能够对传感器发射的信号进行处理,并计算出物体与传感器之间的距离。同时,程序还需要能够将测量结果显示在LCD显示屏上。
4.进行系统测试。在完成系统设计后,需要进行系统测试,确保系统能够正常工作,并且测量结果准确可靠。
基于单片机的超声波测距系统具有测量精度高、响应速度快、体积小等优点,可以广泛应用于各种领域。在未来,随着技术的不断发展,基于单片机的超声波测距系统将会得到更广泛的应用。