找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4|回复: 0
打印 上一主题 下一主题
收起左侧

使用8051单片机的超声波测距仪

[复制链接]
跳转到指定楼层
楼主
本文将介绍一款基于8051单片机的简易超声波测距传感器。该传感器可测量最远2.5米的距离,精度为1厘米。AT89S51单片机和HC-SR04超声波传感器模块构成了该电路的基础。超声波模块向目标物体发送信号,接收反射信号,并输出一个周期与距离成正比的波形。单片机接收该信号,进行必要的处理,并在3位七段数码管上显示相应的距离值。该电路广泛应用于停车传感器、障碍物预警系统、地形跟随机器人、工业测距等领域。

HC-SR04超声波模块

HC-SR04是一款专为嵌入式项目设计的超声波测距模块。其分辨率为0.3厘米,测量范围为2厘米至500厘米。该模块采用5V直流电源供电,待机电流小于2mA。该模块发射超声波信号,接收其反射信号,测量两次事件之间的时间间隔,并输出一个波形,该波形的高电平周期由测量时间调制,测量时间与距离成正比。HC-SR04 模块的图片如下所示。

HC-SR04 超声波测距模块

HC-SR04 超声波测距模块

该模块内置电路使其几乎全自动运行,编程人员只需发送一个触发信号即可启动发射和接收反射信号,从而计算距离。HC-SR04 有四个引脚:Vcc、Trigger、Echo 和 GND,以下将详细介绍。

VCC:此引脚连接 5V 直流电源电压。

Trigger:此引脚用于施加启动发射的触发信号。触发信号必须是持续时间为 10μs 的高电平脉冲。当模块接收到有效的触发信号时,它会从发射器发射 8 个 40kHz 的超声波脉冲。接收器接收到反射的声音信号。

回声:模块在此引脚输出一个持续时间与距离成正比的高电平波形。

GND:此引脚接地。

HC-SR04 时序图

HC-SR04 时序图



从时序图中可以看出,40kHz脉冲序列在10μs触发脉冲之后立即发射,音频输出则在一段时间后接收。下一个触发脉冲只能在音频信号衰减后才能引入,这段时间称为一个周期。HC-SR04的周期不得小于50ms。根据技术文档,可以使用以下公式,根据反射脉冲的宽度计算距离:
距离(厘米)= 反射脉冲宽度(微秒)/ 58

距离(英寸)= 反射脉冲宽度(微秒)/ 148

基于 8051 单片机的超声波测距电路图

基于单片机的超声波测距电路图





超声波模块通过引脚 P3.0 和 P3.1 连接到微控制器。端口 0 用于向屏幕传输 8 位显示数据,端口 P1.0、P1.1 和 P1.2 用于向相应的显示单元 D1、D2 和 D3 传输显示控制信号。按钮 S1、电容 C3 和电阻 R9 构成噪声复位电路。电容 C1、C2 和晶振 X1 与时钟电路相关。

程序。

ORG 00H // 原点

MOV DPTR,#LUT // 将查找表 (LUT) 的地址移动到 DPTR

MOV P1,#00000000B // 将 P1 设置为输出端口

MOV P0,#00000000B // 将 P0 设置为输出端口

CLR P3.0 // 将 P3.0 设置为发送触发信号的输出端口

SETB P3.1 // 将 P3.1 设置为接收回显信号的输入端口

MOV TMOD,#00100000B // 将定时器 1 设置为模式 2 自动重载定时器

MAIN: MOV TL1,#207D // 加载初始计数值

MOV TH1,#207D // 加载重载值

MOV A,#00000000B // 清零累加器

SETB P3.0 // 开始触发脉冲

ACALL DELAY1 // 为触发脉冲设置 10 微秒的宽度

CLR P3.0 // 结束触发脉冲。脉冲

此处:JNB P3.1,此处 // 循环至此处,直到收到回声

返回:SETB TR1 // 启动定时器1

此处1:JNB TF1,此处1 // 循环至此处,直到定时器溢出(例如:计数48)

CLR TR1 // 停止定时器

CLR TF1 // 清除定时器标志1

INC A // 每次定时器1溢出时,A值加一

JB P3.1,返回 // 如果仍有回声,则跳转至返回

MOV R4,A // 将A的值保存到R4

ACALL DLOOP // 调用显示循环

SJMP MAIN // 跳转至主循环

DELAY1:MOV R6,#2D // 延迟10微秒

LABEL1:DJNZ R6,LABEL1

返回

DLOOP:MOV R5,#100D // 将R5的值设置为100D

返回1:MOV A,R4 // 将A的值加载到R4 R4 到 A

MOV B,#100D // 将 100D 加载到 B 寄存器

DIV AB // 分离出第一个数字

SETB P1.0 // 激活 LED 显示单元 D1

ACALL DISPLAY // 调用 DISPLAY 子程序

MOV P0,A // 将第一个数字的驱动模式移动到 P0 寄存器

ACALL DELAY // 延迟 1 毫秒

ACALL DELAY

MOV A,B // 将第一次除法的余数移动到 A 寄存器

MOV B,#10D // 将 10D 加载到 B 寄存器

DIV AB // 分离出第二个数字

CLR P1.0 // 关闭 LED 显示单元 D1

SETB P1.1 // 激活 LED 显示单元 D2

ACALL DISPLAY

MOV P0,A // 将第二个数字的驱动模式移动到 P0 寄存器

ACALL DELAY

ACALL DELAY

MOV A,B // 将第二次除法的余数移动到 A 寄存器

CLR P1.1 // 关闭 LED 显示单元 D2

SETB P1.2 // 激活 LED 显示单元 D3

ACALL DISPLAY

MOV P0,A // 将第三位数字的驱动模式移动到 P0

ACALL DELAY

ACALL DELAY

CLR P1.2 // 关闭 LED 显示单元 D3

DJNZ R5,BACK1 // 重复显示循环 100 次

RET

DELAY: MOV R7,#250D // 延迟 1 毫秒

LABEL2: DJNZ R7,LABEL2

RET

DISPLAY: MOVC A,@A+DPTR // 获取 A 中内容的数字驱动模式

CPL A // 对数字驱动模式进行补码(参见注释 1)

RET

LUT: DB 3FH // 查找表 (LUT) 从此处开始

DB 06H

DB 5BH

DB 4FH

DB 66H

DB 6DH

DB 7DH

DB 07H

DB 7FH

DB 6FH

结束
程序的第一部分设置初始条件。端口 0 和端口 1 设置为输出端口,用于发送相应的数字控制信号和数字控制信号。端口 3.0 设置为输出引脚,用于向超声波模块发送触发信号以启动发射;端口 3.1 设置为输入引脚,用于接收反射信号。微控制器的 TMOD 寄存器被加载,使定时器 1 工作在 2 位 8 位自动重载模式。此处未使用微控制器的定时器 0。在程序的下一部分(主循环)中,定时器 1 的 TL1 和 TH1 寄存器被加载初始值。TL1 被加载初始值,从该值开始计数,并持续计数直到循环结束(即 255D)。当循环发生时,TF1 标志位被置位,TL1 自动加载 TH1 中存储的重载值,该序列重复执行,直到程序将 TR1 置低。TF1 在第一次循环后变为高电平,如果希望它作为每次循环的指示器,则必须在每次循环后使用程序将其清除。在主循环的下一部分,P3.0 被置高 10 微秒,然后清除以产生一个 10 微秒的触发脉冲。超声波模块在接收到此触发信号后会发射一个 40kHz 的脉冲波形,程序会等待直到在 P3.1 接收到有效的反射信号。反射信号的脉冲宽度与到障碍物的距离成正比,因此程序的下一个任务是测量脉冲宽度。当 P3.1 接收到有效的反射脉冲时,定时器 1 启动并执行后续操作。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表