历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | 51单片机-超声波模块

发布者:RainbowGarden 来源: eefocus关键字:51单片机  超声波模块  测距工具 手机看文章 扫描二维码
随时随地手机看文章

1.超声波模块型号

超声波模块是一种常用的测距工具,一般用在避障小车,水位监控系统中,本教程使用的模块型号为HC-SR04,外观形状大体如下

9.3.png

模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P2.0和P2.1。

工作原理就是起初先给这两个引脚都拉低,然后让TRIG引脚拉高10微秒以上再拉低产生一个脉冲起始信号(程序中我们是拉高20微秒)。起始信号一开启,ECHO引脚就会被拉高的同时,超声波开始发射,ECHO引脚检测到反射回来的信号时就会被拉低,因为声速为340m/s。那么测出的距离就是

(ECHO引脚高电平持续的时间*340m/s)/2。

中学学过用声波测海底深度,时间*声速=来回的距离,所以需要除以2才是真正的深度,超声波模块也一样。

 

2.软件分析

计算ECHO引脚高电平的持续时间就用定时器的计数功能完成,如果定时器计数溢出,证明测的距离太远,超出模块的测距范围(最多4米),我们就在数码管上显示999表示距离太远。在测量范围内我们的数码管就显示测出的厘米数。

比如说定时器的计数为9216,那么高电平的持续时间就是9216*(12/11059200)=0.01s

测出的距离就是0.01*340/2=1.7m

数码管就显示170。

不过为了简化单片机的计算过程,我们可以这样算

“( (X*12)/11059200 )*340*100/2”就是厘米数,化简约为“X/54”,X就是定时器的计数值。

本讲代码需要用到“#include”的“_nop_();”,这个表示延时1微秒左右,请参考《手把手教你学51单片机》文档14.2节后半段文字。


3.代码

#include  

#include //详见第六章第8讲

#include     //详见第八章第11讲

#include  

 

sbit TRIG = P2^0; 

sbit ECHO = P2^1; 

u8   FLAG = 0;

void delay_20us() 

{

    _nop_();_nop_();_nop_();_nop_();_nop_(); 

    _nop_();_nop_();_nop_();_nop_();_nop_();

    _nop_();_nop_();_nop_();_nop_();_nop_();

    _nop_();_nop_();_nop_();_nop_();_nop_();

}

  

void main()

{  

    u16 time_data,CM_data;

    TRIG = 0; 

    ECHO = 0;

 

    LED_Init();        //初始化LED硬件模块

    EA = 1;            //闭合总中断开关

    TIM1_Init(1000,0); //定时1ms,用来刷新数码管显示,定时精度要求不高可不微调

 

    TMOD &= 0xF0;

    TMOD |= 0x01; 

    ET0  = 1;

    while(1)

    {   

        TH0  = 0; 

        TL0  = 0; 

        FLAG = 0;      //上次如果是超出测量范围,FLAG被置1,这次再测就要清0

 

        //启动发射声波

        TRIG = 1;    

        delay_20us();

        TRIG = 0;

 

        while(!ECHO);              //声波开始发射,等待ECHO引脚拉高退出这个循环

        TR0 = 1;                   //ECHO引脚一拉高,就打开定时器进行计数 

        while(ECHO==1 && FLAG==0); //收到声波返回来的信号ECHO引脚就拉低,退出这个循环;如果定时器溢出,就会进入中断函数执行“FLAG=1;”

                                   //也就是测量的距离太远,一直没有收到反射回来的信号,不满足“FLAG==0”的条件只能结束这个循环语句  

        TR0 = 0;                   //关闭定时器结束计数

 

        time_data =TH0;

        time_data=(time_data<<8)|TL0;                //把两个八位的寄存器里的值组成一个16位变量的值,也就是定时器计数值

        CM_data = time_data/54;                      //得到厘米的表达式

 

        if(FLAG==1){ShowNumber(999); delay_ms(100);} //超出测量范围显示999,延时的目的:比如测得5cm到6cm之间,数码管会频繁在5跟6之间显示,加入延时就会让它们显示的没有那么频繁   

        else {ShowNumber(CM_data); delay_ms(100);}     

    }

}

  

void TIM0_IRQHandler()  interrupt 1   

{

    FLAG=1;

}

 

void TIM1_IRQHandler()  interrupt 3

{

    TH1 = T1RH;  //重新加载重载值

    TL1 = T1RL;

    SEG_Scan();

}


关键字:51单片机  超声波模块  测距工具 引用地址:51单片机-超声波模块

上一篇:51单片机-舵机与按键
下一篇:51单片机-串口通信入门

推荐阅读

(1)DS18B20初步认识DS18B20是美国DALLAS半导体公司推出的一种数字化单总线器件,属于新一代适配微处理器的改进型智能温度传感器。我们先来看看DS18B20在芯片手册上的标题——“DS18B20 Programmable Resolution 1-Wire Digital Thermometer”。从这个标题上看我可以获取一些有价值的信息。首先分辨率是可以编程的,也就是我们可以通过程序来修改这...
全球领先的测试和测量设备管理公司Electro Rent (益莱储) 宣布,继续增加5G测试设备的投资3000万美元,以过去一年3倍的投资扩充其整个5G测试设备库存,以满足设备制造商和移动网络运营商不断增长的需求。 5G新标准相对于其前身的三个关键优势:更快的速率、更低的时延、更广的连接。这些特点都在扩大5G的适用性,从而为制造商打开新的市场机会。例如汽...
权威机构:二季度华为手机销量几乎追平三星 仅相差63万台2020-08-25 17:27作者:千年今年由于疫情的关系,智能手机行业持续萎缩,各家厂商都受到了不小的影响。不过华为在疫情和美国制裁的双重压力之下,仍旧获得了较好的成绩。根据统计机构Gartner最新数据,华为手机二季度销量只比三星少了63万台。Gartner数据显示,2020年第二季度全球智能手机终端用...
前段时间学习了飞思卡尔K60芯片的时钟系统,对它的时钟系统有了个大致的了解,这里把自己的理解写下来分享一下,以备以后参考。飞思卡尔 Kinetis系列是飞思卡尔推出的基于ARM CORTEX-M4为核心的微控制器。1.飞思卡尔K60时钟系统 飞思卡尔K60时钟系统如上图所示,可以发现器件的源时钟源一共有4个: ①内部参考时钟源,包括 Fast IRC和...

史海拾趣

问答坊 | AI 解惑

西门子PLC 和变频器在离心机上的应用

型上悬式离心机。在机械上,此机属于大起动惯量大频繁加、减速周期运行。机器的可靠性直接关系到机器的产量。根据物料的特性,能够随时更改机器的进料速度及各种时间和洗料次数等参数。根据以上要求,电气控制系统应具备以下功能:1)控制机器程序动 ...…

查看全部问答∨

问一个dsp地址空间问题!请帮个忙!

在arm中地址空间的单位是一个字节,就是一个地址所指定的空间大小是1个字节,比如一个外设寄存器是32位的话,那它要占用4个地址!我是初学dsp的,看了书,我发觉一个问题,dsp的地址空间指定的跟arm不一样啊,一个地址指定的是16bit空间???…

查看全部问答∨

基于KEELOQ跳码技术的密码发生器设计

引 言 基于密码的访问控制系统应用在当今是非常普遍的,但人们对其提供的安全等级经常估计过高。通信传输速度和系统计算能力的提高使得系统受到恶意攻击或“密码扫描”的风险增加。在使用不安全的传送方式时,可能发生密码被盗取的现象。例如典型 ...…

查看全部问答∨

FS-PAM9200E 计算机主板Linux 上 minicom的配置

FS-PAM9200E 计算机主板Linux 上 minicom的配置   …

查看全部问答∨

"error LNK2019: unresolved external symbol _HookZwCreateProcess@0 "如何解决?谢谢!

HookZwCreateProcess例程的实现放在了Process.c中, 形式如下: VOID NTAPI HookZwCreateProcess() {        。。。。 } HookZwCreateProcess例程的声明放在了Process.h中, 形式如下: VOID NTAPI HookZwCreateProces ...…

查看全部问答∨

s3c2440板扩展IO口来驱动4×4矩阵键盘,出现问题

扩展IO口来驱动矩阵键盘 GPG1,3,5,7接列线,作为中断,EXTINT9,11,13,15; GPE11,13 GPB8,6接行线 相关程序部分如下:   将程序下载到开发板上之后,4×4键盘中只要有一个键按下,就一直产生中断,串口上一直打印eint×,不知道原因 ...…

查看全部问答∨

求救ARM300 的问题

本人做课设,遇到很简单的一个问题。。。。。。。但是解决不了。。。。 我的源码如下 /************************************************************************************************ //         &n ...…

查看全部问答∨

购买:mp3+耳机 生产方案:10000元

购买:mp3+耳机  生产方案:10000元 类似一个网吧使用的大耳机,上面集成了mp3,可以插卡(次要功能),usb充电(或者电池) 可以调声音大小,后退(比如想重新听刚才那一句话,可以通过一个旋转按钮控制,类似调声音大小的旋转按钮) ...…

查看全部问答∨

请问怎样把程序下载到MSP430上呀?(急死啦)

请问编好的程序怎样才能下载到单片机上呀?软件好像没有下载按钮呀?…

查看全部问答∨

基于ADSL的宽带远程LED显示屏信息发布系统

一、概述 由于传统的LED 显示屏的信息输入只能通过数据线与电脑直接连接来进行,因此对于传统LED显示屏来说不能满足远程信息实时发布的需要,因而不能构建大规模的联网式LED 屏信息发布系统。由厦门宇能科技有限公司开发的ADSL的宽带 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved