0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机应用_超声波&定时器

天才小狸花 2022-10-07 18:06 次阅读

前言

通过利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。

HC-SR04模块

**HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。

参数

Operating Voltage Dc5V
Operating Current 15ma
Operating Frequency 40KHz
Max Range 4m
Min Range 2cm
Ranging Accuracy 3mm
Measuring Angle 15°
Trigger Input Signal 10µS TTL脉冲
Dimension 45 x 20 x 15

控制流程

  1. 通过Trig引脚发一个 10US 以上的高电平,模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
  2. 有信号返回时,Echo有高电平输出,高电平时间即是超声波往返时间。
  3. 测试距离 = (高电平时间 *声速)/2

在这里插入图片描述

通过单片机的定时器获得计时功能来获得检测距离,开启定时器后TH和TL寄存器数值会自动增加。直到关闭定时器,再读出其中的数值即可计算距离。

/*开始计时*/
     while (!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间
     TR0 = 1;//启动定时器0,开启计时
     while (ECHO);//ECHO不为0,即脉冲返回结束,计时结束
     TR0 = 0;//停止计时,此时的ECHO的高电平时间就是     超声波发出到重新返回接收所用的时间

代码

#ifndef _HC_SR04_H_
 #define _HC_SR04_H_
 #include //提供_nop_();/*供HC-SR04提供启动时间*//*位定义*/
 sbit TRIG = P1 ^ 0;
 sbit ECHO = P1 ^ 1;
 ​
 /*全局变量定义,超出距离标志位为1,不超出为0*/
 bit HC_SR04_flag;
 ​
 /*函数声明*/
 void HC_SR04_Init(void);//初始化T0定时器,用于HC_SR04unsigned int HC_SR04(void);//返回距离#endif
#include "HC_SR04.h"
 ​
 /*******************************************************************************
 ** 函数名称: HC_SR04_Init
 ** 功能描述: 初始化定时器0,用以记录从发射到返回的时间Time
 ** 参数说明: void
 ** 返回说明: void
 ** 创建人员: Main
 ** 创建日期: 2020-06-01
 **------------------------------------------------------------------------------
 ** 修改人员:
 ** 修改日期:
 ** 修改描述:
 **------------------------------------------------------------------------------
 ********************************************************************************/
 void HC_SR04_Init(void)
 {
     TMOD |= 0x01;
 ​
     TH0 = 0;
     TL0 = 0;
     ET0 = 1;             //允许T0中断,可关闭,只有特别大的才开
     EA = 1;
 ​
     TRIG = 0;           //先使启动端置低,等待高电平启动
 }
 ​
 ​
 /*******************************************************************************
 ** 函数名称: HC_SR04
 ** 功能描述: 返回测量距离
 ** 参数说明: void
 ** 返回说明: 测量距离,单位(cm)
 ** 创建人员: Main
 ** 创建日期: 2020-12-22
 **------------------------------------------------------------------------------
 ** 修改人员: Main
 ** 修改日期: 
 ** 修改描述: 
 **------------------------------------------------------------------------------
 ********************************************************************************/
 unsigned int HC_SR04(void)
 {
     unsigned int distance;//用于记录测得的距离
     unsigned int time;//用于记录超声波发出到重新返回接收所用的时间
 ​
     /*启动HC_SR04*/
     TRIG = 1;//升高电平,打开触发信号
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     TRIG = 0;
 ​
     /*开始计时*/
     while (!ECHO);//当ECHO为高电平的时候,跳出循环,并开始记录时间,当为低电平时卡住不动
 ​
     TR0 = 1;//启动定时器0,开启计时
     while (ECHO);//ECHO不为0,即脉冲返回结束,计时结束
     TR0 = 0;//停止计时,此时的ECHO的高电平时间就是     超声波发出到重新返回接收所用的时间
 ​
     /*计算时间及距离*/
     time = (TH0 * 256 + TL0) * 1.29;        //可改变此数据来提高精确度
     distance = (time * 0.034) / 2;          //单位是cm,0.34是mm
 ​
 ​
     TH0 = 0;                                //清零,进行下一次测距
     TL0 = 0;
 ​
     //返回距离
     return distance;
 }
 ​
 /*******************************************************************************
 ** 函数名称: T0_Time_Sr04
 ** 功能描述: 超出测量距离的异常
 ** 参数说明: None
 ** 返回说明: void
 ** 创建人员: Main
 ** 创建日期: 
 **------------------------------------------------------------------------------
 ** 修改人员:
 ** 修改日期:
 ** 修改描述:
 **------------------------------------------------------------------------------
 ********************************************************************************/
 void T0_Time_Sr04() interrupt 1
 {
     HC_SR04_flag = 1;
     //TI=1;
     //printf("超出距离");
     //TI=0;
 }
 ​
 ​
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6036

    文章

    44555

    浏览量

    635066
  • 超声波
    +关注

    关注

    63

    文章

    3017

    浏览量

    138371
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123579
  • 定时器
    +关注

    关注

    23

    文章

    3247

    浏览量

    114769
收藏 人收藏

    评论

    相关推荐

    单片机&超声波探伤仪

    有能和32单片机连接的超声波探伤传感的具体模块吗?这种传感能够测高压线内部的缺陷。要是没有,自己做一个得话,如何实现?
    发表于 10-10 09:31

    基于51单片机超声波测距系统

    AT89C2051。采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.6端口监测超声波接收电路输出的
    发表于 03-25 10:21

    基于SLH89F5162的单片机超声波测距设计

    方案标题:基于SLH89F5162的单片机超声波测距设计方案概述:本设计旨在设计一种一种基于单片机实时语音播报,带有LED数码显示功能的脉冲反射式
    发表于 10-18 14:16

    超声波单片机超声波单片机超声波单片机超声波单片机超声波单片机超声波

    单片机超声波单片机超声波单片机超声波单片机
    发表于 04-14 23:51

    51单片机超声波控制舵机转向的创意制作资料

    51单片机&超声波控制舵机转向的创意制作,内容附实验图以及实用的材料清单
    发表于 09-26 07:04

    51单片机计数定时器的区别

    电子专业单片机相关知识学习教材资料——51单片机计数
    发表于 05-12 10:31 0次下载

    51单片机超声波测距仿真与分析

    51单片机超声波测距仿真与分析
    发表于 09-04 08:49 30次下载

    基于51单片机超声波测距模块设计

    超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看,超声波模块的硬件也不晓得。
    发表于 12-10 16:33 6973次阅读

    51单片机驱动超声波测距模块

    51单片机驱动超声波测距模块(单片机最小系统)-使用51单片机驱动
    发表于 07-22 10:01 61次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>驱动<b class='flag-5'>超声波</b>测距模块

    51单片机超声波测距(数码管显示)

    51单片机超声波测距(数码管显示)程序/* 超声波模块的TRIG管脚接在单片机的P20口,ECHO管脚接在
    发表于 11-12 15:06 7次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>超声波</b>测距(数码管显示)

    51单片机定时器应用】定时器计数、定时器中断函数、while(1)三者之间是如何协调、工作?

    51单片机程序,使用定时器时,定时器计数、定时器中断函数、while(1)循环三者之间如何协调好整个流程?【
    发表于 11-20 18:51 12次下载
    【<b class='flag-5'>51</b><b class='flag-5'>单片机</b>—<b class='flag-5'>定时器</b>应用】<b class='flag-5'>定时器</b>计数、<b class='flag-5'>定时器</b>中断函数、while(1)三者之间是如何协调、工作?

    51单片机定时器、串口、中断

    文章目录MCS-51功能单元一、定时器&amp;amp;计数二、并行口&amp;
    发表于 11-21 10:36 12次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>、串口、中断

    51单片机定时器及其应用(3)(测量脉冲频率)

    51单片机定时器及其应用(3)(测量脉冲频率)&amp;nbsp;&amp;nbsp;&amp;
    发表于 11-23 16:20 7次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>及其应用(3)(测量脉冲频率)

    求助51单片机超声波测距

    **自己暑假搞了搞单片机,但是被困在了oled不显示我测的实时数据,求帮忙**(stc89c52rc芯片,hc-sr04超声波测距模块)代码如下:`#include &amp;lt
    发表于 11-23 18:21 0次下载
    求助<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>超声波</b>测距

    单片机高级系列丨超声波测距(数码管显示)

    单片机高级系列丨超声波测距(数码管显示)超声波模块的TRIG管脚接在单片机的P20口,ECHO管脚接在单片机的P21口 其他的电源管脚接在
    发表于 11-26 14:51 24次下载
    <b class='flag-5'>单片机</b>高级系列丨<b class='flag-5'>超声波</b>测距(数码管显示)