51单片机-超声波模块

发布者:RainbowGarden最新更新时间:2021-10-14 来源: 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单片机-串口通信入门

推荐阅读最新更新时间:2024-11-12 14:07

关于单片机引脚读写操作
使用时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示 当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。 如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。 汇编语言中对读寄存
[单片机]
关于单片机引脚读写操作
AT89S51单片机是什么?
AT89S51单片机是什么? AT89S51是什么? 书上和网络教程上可都是8051,89C51等 !没听说过有 89S51 ?! 这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。 有些文献
[单片机]
51单片机智能风扇的制作,小小的总结一下
决定要做风扇开始到现在有20多天的时间了,虽然不是每天都在弄,但基本上都是围绕着这个转。总的来说做了两次,第一次要在30号交到科联,结果失败了;第二次回家乡办完身份证后开始,因为有了前一次的经验基本上没遇到太大的问题,而且时间比较充足,做起来没那么赶,但效率也有点低。 第一次开始做时没有马上焊电路,而是用protues画图和仿真,弄那个弄了两天多,结果还是没出结果,还弄到很烦。后来才认识到这是个愚蠢的做法,下次一定不要,一方面浪费时间,另一方面浪费精力,没仿真出来不一定实现不了,仿真出来了焊出来的结果也不一定行。所以下次做什么只要粗略地计划一下就开始焊,错了再说,总比天天拿软件仿真要好,起码焊了就有进度了。刚开始设想风扇的功
[单片机]
<font color='red'>51单片机</font>智能风扇的制作,小小的总结一下
51单片机MAX7219程序
该程序已使用过,免调试。 #include reg52.h #include intrins.h #define byte unsigned char //#define N_NOP _nop_();//_nop_();_nop_(); /////////////////////////////////////////////////////// //MAX7219 //////////////////////////////////////////////////////////////////// //管脚,变量和常数定义;DEFINE #define Model_addr 0x09 // X9 H #d
[单片机]
基于AT89C2051单片机的纺纱断线自动检测系统的设计
引言 纺纱机器在绕线过程中,判断细线是否断线是十分重要,因此纺纱断线检测装置是根据实际需要应运而生的产品,它能对纺纱过程进行断线检测和监控。本文就根据实际需要设计了一多功能纺纱断线检测控制装置,能够自动检测纱断情况,并且在断纱时,停止电机转动,并进行报警,提醒工作人员,方便工作人员进行故障处理。该装置能给纺纱工带来无限的方便,免去了纺纱工一直观察纱线状态的麻烦,大大地为纺纱工减少了劳动强度,同时也提高了产品的质量,并且也给商家带来更大的价值。同时该装置不仅可以应用于纺纱机器,还可以用于生产类似纱线之类的某些生产厂家。 1 系统功能 基于纺纱断线检测装置的功能要求,纺纱断线检测控制装置的电路主要由以AT89C2051为核心的单片
[单片机]
基于AT89C20<font color='red'>51单片机</font>的纺纱断线自动检测系统的设计
MSC-51单片机的引脚排列图
  常见的MSC-51单片机中一般采用双列直插(DIP)封装,共40个引脚。图为引脚排列图。其中的40个引脚大致可以分为四类:电源、时钟、控制和I/O引脚。     1、电源   Vcc:芯片电源,一般为+5V;   Vss:接地端。   2、时钟   XTAL1和XTAL2:晶体振荡电路反相输入端和输出端。当使用内部振荡电路时,需要外接晶振,常见有的4M、6M、11.0592M、12M等。当使用外部振荡输入时XTAL1接地,XTAL2接外部振荡脉冲输入。   3、控制线   MCS-51单片机的控制线共有4根,其中3根是复用线,具有两种功能。   (1)ALE/PROG:地址锁存允许/编程脉冲。   ALE:正常使用时
[单片机]
MSC-<font color='red'>51单片机</font>的引脚排列图
基于8051单片机的一个多功能用电故障控制器实现
1 引言 对于电网短路和线路故障检测保护已有不少研究。市面上的电器短路、过载、超压的保护器功能单一。容易损坏,没用提示功能,不够人性化。但随人们生活水平的不断提高。用电设备也不断增加,产生了肓目用电现象。这给人们造成极大的安全隐患。其中危害性最大的用电故障有三种:输入电压过高、室内线路严重过载、用电器短路。本文设计的单片机AT89C5l用电故障控制系统的目的就是为了防止这三种故障带来的危害。 2 硬件的组成 单片机用电故障控制系统的硬件分别是:由降压变压器、2个相瓦串联的感应线圈、升压变JK器、电磁开关、5V稳压电源、超压过流信号获取比较电路、可编程接门扩展芯片8255、HD44780字符液晶显示模块、
[单片机]
基于80<font color='red'>51单片机</font>的一个多功能用电故障控制器实现
MCS-51单片机的结构及特点
单片机(MICROCONTROLLER,又称微控制器)是在一块硅片上集成了各种部件的微型机算计,这些部件包括中央处理器CPU、数据存贮器RAM、程序存贮器ROM、定时器/计数器和多种I/O接口电路。 MCS-51单片机的基本结构如图所示。 51系列单片机结构特点: l 8位CPU; l 片内振荡器及时钟电路; l 32根I/O线; l 外部存贮器寻址范围ROM、RAM各64K; l 3个l6位的定时器/计数器; l 5个中断源,2个中断优先级; l 全双工串行口; l 布尔处理器。
[单片机]
MCS-<font color='red'>51单片机</font>的结构及特点

推荐帖子

STM32F0 TX,RX反了,STM32 TX/RX SWAP功能又救了我一次
今天又犯了一次低级错误,STM32F0TX,RX反了,STM32TXRXSWAP功能又救了我一次今天板子回来,串口没反应,知道坏了,估计是TX,RX反了。但还是记得以前把TX,RX用软件调换过。今天在QQ和人聊,然后也看了库。stm32f0xx_usart.c中找到下面函数:/***@briefEnablesordisablestheswapTx/Rxpins.*@paramUSARTx:wherexcanbe1or2toselec
damiaa stm32/stm8
【得捷电子Follow me第2期】+ 【任务五】网络控制WS2812B
网络控制WS2812B也是有案例的通过连接io.adafruit.com这个网址,设置设备,等操作后相当于创建了一个MQTT服务器,通过其给板子下发指令,然后板子改变灯状态。我们通过注册账号,然后创建Feed。这个主要是数据通信。之后在创建dashboards,这个主要是一个交互界面。然后连接上我们的创建的数据通信部分。通过一个RGB的色板,改变其就能发送不同数据。复制好所有的库。这里都通过外部的settings.toml文件进行配置,不
流行科技 DigiKey得捷技术专区
一种基于多传感器的交通监控系统智能接口
摘 要:提出了一种基于双端RAM的多传感器智能接口设计方法。该智能接口能有效地对传感器数据进行进一步处理,解决了计算机与各传感器之间的信息传输的瓶颈问题,从而能有效地完成计算机与各传感器之间的信息传输和控制;适用于交通监控系统的数据处理。一种基于多传感器的交通监控系统智能接口
frozenviolet 测试/测量
阿牛哥系列故事大嘴歪评世界杯
阿牛哥冒着七月的艳阳酷暑,晚上听完国际广播电台的新闻,西瓜荔枝,要看世界杯球赛了。晚上的这场要看,凌晨的那场要听。电视电脑收音机都需要,就是不能影响白天的工作。先说说世界杯比赛,不能在家里看,太影响家人.去哥们马六家看;啤酒不喝了,小心血液里的酒精起左右,喜爱的球队出局砸烂电视机。世界杯就是这样狂热,不可预测,不可捉摸。就是孔明在世,也只能大说无量佛,不晓得结果。想象就是诸葛亮沐浴更衣,焚香抚琴,弹奏的是十面埋伏,平沙落雁也说不尽着二十多人比赛的精彩有趣。阿牛哥系列故事
jameswangsynnex 创意市集
买到次品ws2812模块
前段时间,在某宝买了不少的各种电子小零件,其中有两个ws2812LED模块,但是拿回来一点亮发现都有问题,一个绿灯不亮,一个DO不输出数据,我还怕买了一个万一有问题就买了两个,这样的结局我也自认倒霉了,没放在心上,感觉卖这些零件的淘宝卖家也不容易,数量少器件杂,有个小问题也在所难免,不能因为俩LED就来个差评吧。不过我最近在把玩中无意中发现,正常的LED是这样的:而有问题的LED有明显的瑕疵,里面的胶没灌好还是怎么的:板上丝印虽是ws2811,但是led应该是2812的,商品的描述
lcofjp 综合技术交流
GPRS基本知识[转帖]
GPRS基本知识GPRS是什么?GPRS是通用分组无线业务(GeneralPacketRadioService)的英文简称,是在现有的GSM系统上发展出来的一种新的分组数据承载业务。GPRS与现有的GSM语音系统最根本的区别是,GSM是一种电路交换系统,而GPRS是一种分组交换系统。因此,GPRS特别适用于间断的、突发性的或频繁的、少量的数据传输,也适用于偶尔的大数据量传输。这一特点正适合大多数移动互联的应用。GPRS有什么优点?相对原来GSM的
2345 RF/无线
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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