超声波模块c语言编程,超声波模块
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语言编程,超声波模块相关推荐
- 超声波测距 c语言程序流程图,超声波测距c语言源程序代码-20210413051213.docx-原创力文档...
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 超声波测距C语言源程序代码 /*{HZ即单位s的 ...
- 超声波模块c语言编程,51单片机超声波模块的C语言程序.pdf
//超声波模块程序 //超声波模块程序 //Trig P2^0 //Echo P3^2 #include #define uchar unsigned char #define uint unsign ...
- 安信可-A7模块——C语言编程实现GPS功能
上一篇博文整理学习了有关串口通信.串口编程的一些基本知识.本篇将通过编程来获取.解析.转换GPS接收机接收的信息. 我们将在fl2440开发板上实现该功能. 一.A7与开发板连线 我使用的是USB转T ...
- 超声波传感器测距c语言编程,超声波传感器和stc89c51单片机的c语言代码
#include //器件配置文件 #include #define RX P1_1 #define TX P1_2 #define LCM_RW P0_6 //定义LCD引 ...
- python编程语言模块_Python基础编程常用模块汇总
3.8 json模块重点 json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去. 不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串.(比如Python的一个列 ...
- 易语云模块-易语言邮件发送模块下载(含命令详解)
易语言支持库自带邮件发送命令,但是和现在的主流邮箱好像不能连接上,收件发件就更别提了. 于是易语云模块就横空出世了,如果您要开发e程序发送邮件的话,那么使用易语云模块就可以很轻松的搞定了. 点击此处进 ...
- 超声波测距 c语言程序流程图,超声波测距程序(详细C语言数码管显示)
#include<reg52.h> //头文件 #include<intrins.h>// _nop_() 函数延时1US用 #include <stdio.h> ...
- 水下超声波测距c语言程序,超声波测距51C程序
原标题:超声波测距51C程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括 ...
- hc-sr04程序c语言,常用模块原理程序秘技——超声波模块HC-SR04(1)
使用STM32定时器写超声波模块HC-SR04程序 前言 首先,来说说大伙常见的超声波模块,一般就俩,HC-SR04和HY-SRF05,这两种模块电路有些许不一样,但是就功能来说,没什么区别,甚至可以 ...
最新文章
- 《极乐空间》特效制作与渲染
- getaddrinfo(localhost.localdomain): 未知的名称或服务
- @select注解模糊查询_mybatis @SelectProvider 注解, 打赌你没有用过
- linux子系统gdp调试,Linux系统中GDB功能汇总
- MFC中如何让一个CStatic控件响应消息
- appium-在页面点击一下处理(一般处理提示蒙层)
- Kafka 消费者组 Rebalance 详解
- 5.这就是搜索引擎:核心技术详解 --- 检索模型与搜索排序
- 御剑飞行扫描后门加上burpsuite字典树爆破
- WSO2 ESB 5.0.0 配置消息存储
- 坚果Pro2刷入twrp rec
- 华科师兄快40岁才明白的道理
- throw java_THROW,JAVA的throw和throws怎么用!
- 【HEOI2013】bzoj3168 钙铁锌硒维生素
- 特种浓缩分离:全自动型拉板式压滤机
- 拿到阿里50K offer的数据分析师,都是什么水平?
- 数据库备份服务器性能指标,服务器处置性能估算
- UEFI+GPT引导基础
- 学编程的人那么多,到底编程的出路在哪?
- 大数据杀熟调查:首汽约车飞猪旅游等新老用户价差大
热门文章
- 量化交易的相对强弱(RSI )指标计算及策略
- 企业即时通讯软件是什么?它有哪些优势呢?
- 网络安全全面防应对难察觉网络威胁!
- ffmpeg剪切视频的python小脚本
- android .9图片详解及应用
- java 与 汇编_清华大学出版社-图书详情-《汇编语言与计算机体系结构——使用C++和Java》...
- 超强 SVN 对比 excel 工具 Spreadsheet Compare使用方法
- Java毕设项目师生健康信息管理系统(java+VUE+Mybatis+Maven+Mysql)
- 小程序项目:基于微信小程序的师生答疑交流平台APP——计算机毕业设计
- #02数据结构练习二