HY-SRF05超声波测距
1. 模块(OUT脚不知有什么用)
2. 工作原理
3. 时序图
4. 计算公式
5. 51测试源码,串口显示
/**********************************************************************************
* 功能:HY-SRF05超声波测距模块测试,通过串口打印
* 处理器:STC89C52RC
* 晶振:11.0592
* 编译环境:Keil uVision4
* 时间:2015-12-10
* 作者:ly
* 备注:Trig --- P1_0
* Echo --- 外部中断0(P3_2)
* OUT ---
* Vcc --- VCC
* GND --- GND
**********************************************************************************/
#include <reg52.h>
#include <stdio.h> //sprintf
#include <string.h> //strlen
#include <intrins.h> //_nop_ #define uint unsigned int
#define uchar unsigned charsbit TX = P3^1;
sbit Trig = P1^0;int time; //计算回响信号脉冲宽度/****************************** 初始化函数 *****************************************/
//外部中断0初始化(P3_2)
void int0_init(void)
{IE0 = 0; //外部中断0标志位清0IT0 = 1; //外部中断0下降沿触发EX0 = 1; //外部中断0允许
}
//定时器0初始化
void time0_init(void)
{TMOD |= 0x09; //0000 1001: GATE门控开,只有 TRx==1 && INTx==1 才可启动T0,T0定时方式1(16位)TH0 = 0; TL0 = 0;TF0 = 0; //T0标志位清0 ET0 = 1; //T0中断允许TR0 = 1; //T0工作允许
}
//串口初始化
void uart_init(void)
{SCON = 0x40; //0100 0000:串行方式1TMOD |= 0x20; //T1定时方式2(8位自动装入)TH1 = 0xFD; TL1 = 0xFD; //波特率:9600 ES = 0; //串口中断禁止TR1 = 1; //T1启动
}
void init(void)
{EA = 0; //总中断禁止Trig = 0;uart_init();time0_init();int0_init();EA = 1; //总中断允许
}
/************************************************************************************/void delay15us(void)
{_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
void delay15ms(void)
{ int i;for (i = 0; i < 1000; i++)delay15us();
}
void uart_send_char(uchar ch) //串口发送一个Byte
{SBUF = ch;while (!TI);TI = 0;
}
void uart_send_string(uchar str[], uint len) //串口发送字符串
{int i;for (i = 0; i < len; i++)uart_send_char(str[i]);
}/* 主函数 */
void main(void)
{int i;float distance; //距离uchar display[20]; //串口显示距离init();while (1){//建议测量周期60ms以上,以防止发射信号对回响信号的影响for (i = 0; i < 4; i++)delay15ms();//发送触发信号(10us以上TTL脉冲),如果检测到回响,Echo(P3^2)将拉高,则T0开始计时Trig = 1;delay15us();Trig = 0;//等待Echo(P3^2)下降沿到来(回响信号脉冲)触发外部中断 time = 0; i = 0;while (time==0 && i<=65536) //直到time被中断计算出时间或者被标记计时溢出或者i超时i++; //防止死循环if (i > 65536) //一直监测不到回响,Echo(P3^2)没有拉高,超时{uart_send_string("time out", 8);uart_send_char(0x0A); //换行/新行uart_send_char(0x0D); //回车continue;}if (time == -1) //计时溢出{uart_send_string("T0 overflow", 11);uart_send_char(0x0A); //换行/新行uart_send_char(0x0D); //回车}else{distance = time / 58.0; //公式:uS / 58 = 厘米sprintf(display, "%f CM", distance);uart_send_string(display, strlen(display));uart_send_char(0x0A); //换行/新行uart_send_char(0x0D); //回车}}
}/*************************** 中断处理 ******************************/
// 外部中断0处理
void int0() interrupt 0
{EA = 0; //总中断禁止time = TH0 * 256 + TL0; //回响时间TH0 = 0; TL0 = 0;EA = 1; //总中断允许
}
// 定时器0中断处理
void time0() interrupt 1
{//进入到这里,说明计时溢出EA = 0; //总中断禁止TH0 = 0; TL0 = 0;time = -1;EA = 1; //总中断允许
}
/********************************************************************/
6. 结果(串口助手之类软件)
HY-SRF05超声波测距相关推荐
- arduino UNO 与 超声波测距模块 实验详情
US-015 超声波测距模块 超声波传感器 US-020升级版 送全套资料 资料下载地址:http://pan.baidu.com/s/1c0AfkIG US-015超声波测距模块 1. 概述 US- ...
- 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
简 介: 通过对于是用于超声波测速变压器的基本分析,为后面构成150kHz 放大节能信标组的感应信号打下基础. 关键词: 中周,电压器,超声波 ▌01 中周变压器 购买到这个周中变压器主要是为了构 ...
- 【 FPGA 】超声波测距小实验(一)
超声波测距原理: 超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似. 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播 ...
- 51单片机c语言测距,求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C51编程:超声波测距程序(附图) [请帮助] 2006-9-30 18:44:03 #include #define k1 P3_4 #define c ...
- Arduino的光敏传感器和超声波测距传感器测试代码
光敏传感器测试代码 使用的是一个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载一个可调电阻以及一个LED, 调节电阻大小, 可以控制LED亮灭和DO输出变化对光亮的灵敏度 ...
- arduino 超声波测距原理_超声波测距灯
介绍硬件准备 本篇文章专门介绍用Arduino制作超声波测距灯,需要的材料是: 1. Arduino开发板 2. HC-SR04超声波模块 3. LED灯 4. 杜邦线若干 注意事项 之所以要写这 ...
- stm32超声波测距代码_超声波模块另类用法,悬浮,你也能做到
今天,给大家介绍一个 「超酷的DIY声波悬浮」研究项目. 虽然超声波悬浮,不能像磁悬浮那样悬浮比较重的物品.不过能把小泡沫球.水滴或者蚂蚁这样的小物体悬浮起来也是很有意思的. 制作这样一个简易的超声波 ...
- 通过串口打印--超声波测距模块测得距离
通过串口打印--超声波测距模块测得距离 原理 超声波测距模块 串口传输 实战代码 原理 超声波测距模块 在这里首先需要了解超声波测距模块的原理.在我的这篇博客有很多介绍.超声波模块介绍 串口传输 串口 ...
- 利用LCD1602显示超声波测距
利用LCD1602显示超声波测距 介绍 一.需要的器件 二.原理 工程代码 一. LCD1602 二.超声波测距及主程序 运行图 介绍 一.需要的器件 51单片机:任意一款都可以,我这里使用的是STC ...
- 探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino)
** ------------探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino) 一. 初始化设置 在初始化这里要先设置波特率.并且把初始超 ...
最新文章
- 32位处理器是什么意思
- Handle table中CAS操作与A-B-A Problem解析
- Python_序列对象内置方法详解_String
- 2013.5.21号面试心得
- 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解
- 输入两个链表,找出它们的第一个公共结点
- 如何防止IDEA 每次启动javaWEB项目都自动打开浏览器标签页
- Android设为系统默认的短信应用
- 循环神经网络-Recurrent Neural Networks
- 湘潭大学计算机网络试卷答案,湘潭大学计算机网络试卷
- 天天生鲜Django项目
- 点击上下左右按钮让背景上下左右移动
- 台湾大学林轩田机器学习技法课程学习笔记14 -- Radial Basis Function Network
- oracle查询是否包含英文字符串,oracle字符串载取及判断是否包含指定字符串
- OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
- 机器视觉_HALCON_示例实践_1.检测圆形
- pbl和sbl_探讨:PBL教学法
- python 城市代号数据的保存及读取
- Delphi Web前端开发教程(9):基于TMS WEB Core框架
- d3dcompiler_47.dll缺失怎么修复
热门文章
- Linux网络服务之常规vsFTP服务配置(超级详细图解一步骤一图)
- 生产中使用ssh-copy-id复制公钥到多台服务器
- 远程访问openwrt路由器+配置动态DNS
- 软考试题中经常混淆的概念
- android11下文件管理,华为文件管理器下载-华为文件管理器 安卓版v10.11.11.301-PC6安卓网...
- halcon例程学习笔记(11) 一维码、二维码识别
- 如何分析留存率?(案例:留存率堆积直方图+留存率下降分析)
- 三进制 四进制计算机原理,三进制计算机(中国三进制计算机)
- 利用akshare读取50EFF期权1
- EFF称强行删除代码侵犯人权