1.超声波模块型号

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

模块除了两个电源引脚外,还有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();

}

超声波模块c语言编程,超声波模块相关推荐

  1. 超声波测距 c语言程序流程图,超声波测距c语言源程序代码-20210413051213.docx-原创力文档...

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 超声波测距C语言源程序代码 /*{HZ即单位s的 ...

  2. 超声波模块c语言编程,51单片机超声波模块的C语言程序.pdf

    //超声波模块程序 //超声波模块程序 //Trig P2^0 //Echo P3^2 #include #define uchar unsigned char #define uint unsign ...

  3. 安信可-A7模块——C语言编程实现GPS功能

    上一篇博文整理学习了有关串口通信.串口编程的一些基本知识.本篇将通过编程来获取.解析.转换GPS接收机接收的信息. 我们将在fl2440开发板上实现该功能. 一.A7与开发板连线 我使用的是USB转T ...

  4. 超声波传感器测距c语言编程,超声波传感器和stc89c51单片机的c语言代码

    #include         //器件配置文件 #include #define  RX  P1_1 #define  TX  P1_2 #define LCM_RW  P0_6 //定义LCD引 ...

  5. python编程语言模块_Python基础编程常用模块汇总

    3.8 json模块重点 json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去. 不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串.(比如Python的一个列 ...

  6. 易语云模块-易语言邮件发送模块下载(含命令详解)

    易语言支持库自带邮件发送命令,但是和现在的主流邮箱好像不能连接上,收件发件就更别提了. 于是易语云模块就横空出世了,如果您要开发e程序发送邮件的话,那么使用易语云模块就可以很轻松的搞定了. 点击此处进 ...

  7. 超声波测距 c语言程序流程图,超声波测距程序(详细C语言数码管显示)

    #include<reg52.h> //头文件 #include<intrins.h>// _nop_() 函数延时1US用 #include <stdio.h> ...

  8. 水下超声波测距c语言程序,超声波测距51C程序

    原标题:超声波测距51C程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括 ...

  9. hc-sr04程序c语言,常用模块原理程序秘技——超声波模块HC-SR04(1)

    使用STM32定时器写超声波模块HC-SR04程序 前言 首先,来说说大伙常见的超声波模块,一般就俩,HC-SR04和HY-SRF05,这两种模块电路有些许不一样,但是就功能来说,没什么区别,甚至可以 ...

最新文章

  1. 《极乐空间》特效制作与渲染
  2. getaddrinfo(localhost.localdomain): 未知的名称或服务
  3. @select注解模糊查询_mybatis @SelectProvider 注解, 打赌你没有用过
  4. linux子系统gdp调试,Linux系统中GDB功能汇总
  5. MFC中如何让一个CStatic控件响应消息
  6. appium-在页面点击一下处理(一般处理提示蒙层)
  7. Kafka 消费者组 Rebalance 详解
  8. 5.这就是搜索引擎:核心技术详解 --- 检索模型与搜索排序
  9. 御剑飞行扫描后门加上burpsuite字典树爆破
  10. WSO2 ESB 5.0.0 配置消息存储
  11. 坚果Pro2刷入twrp rec
  12. 华科师兄快40岁才明白的道理
  13. throw java_THROW,JAVA的throw和throws怎么用!
  14. 【HEOI2013】bzoj3168 钙铁锌硒维生素
  15. 特种浓缩分离:全自动型拉板式压滤机
  16. 拿到阿里50K offer的数据分析师,都是什么水平?
  17. 数据库备份服务器性能指标,服务器处置性能估算
  18. UEFI+GPT引导基础
  19. 学编程的人那么多,到底编程的出路在哪?
  20. 大数据杀熟调查:首汽约车飞猪旅游等新老用户价差大

热门文章

  1. 量化交易的相对强弱(RSI )指标计算及策略
  2. 企业即时通讯软件是什么?它有哪些优势呢?
  3. 网络安全全面防应对难察觉网络威胁!
  4. ffmpeg剪切视频的python小脚本
  5. android .9图片详解及应用
  6. java 与 汇编_清华大学出版社-图书详情-《汇编语言与计算机体系结构——使用C++和Java》...
  7. 超强 SVN 对比 excel 工具 Spreadsheet Compare使用方法
  8. Java毕设项目师生健康信息管理系统(java+VUE+Mybatis+Maven+Mysql)
  9. 小程序项目:基于微信小程序的师生答疑交流平台APP——计算机毕业设计
  10. #02数据结构练习二