【51单片机STC89C52】HC-SR04超声波模块测距

发布者:心灵捕手最新更新时间:2022-10-25 来源: csdn关键字:51单片机  STC89C52  HC-SR04 手机看文章 扫描二维码
随时随地手机看文章

一、HC-SR04超声波模块

1、简介

HC-SR04 超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高达3mm;模块包括超声波发射器、接收器与控制电路


基本工作原理:

(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。

(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;

(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;


让它发送波:给Trig端口至少10us的高电平


开始发送波:Echo信号由低电平跳转到高电平


接收返回波:Echo信号由高电平跳转回低电平


计算时间    :Echo引脚维持高电平的时间!


                      开始发送波,启动定时器,接收到返回波,停止计时器


计算距离    :测试距离=(高电平时间*声速(340m/s))/2


接线参考:

TRIG—>P1.5

ECHO—>P1.6


2、超声波的时序图

二、定时器计算时间

将TH0和TL0拼接为16进制,需要将TH0左移8位


十进制2左移1位,变成20,相当于乘以10

二禁止1左移1位,变成10(2),相当于乘以2。左移8位,乘以2的8次方=256


//4. 计算时间

time = (TH0 * 256 + TL0)*1.085;//us为单位

三、编程实现

#include "reg52.h"

 

//距离小于10cm,D5亮,D6灭,反之相反现象

 

sbit D5 = P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口

sbit D6 = P3^6;//根据原理图(电路图),设备变量led2指向P3组IO口的第6口

sbit Trig = P1^5;

sbit Echo = P1^6;

 

void Delay10us() //@11.0592MHz

{

unsigned char i;

 

i = 2;

while (--i);

}

 

void Time0Init()

{

TMOD &= 0xF0; //设置定时器模式

TMOD |= 0x01;

TH0 = 0;

TL0 = 0;

//设置定时器0工作模式1,初始值设定0开始数数,不着急启动定时器

}

/*

十进制2左移1位,变成20。相当于乘以10

二禁止1左移1位,变成10(2)。相当于乘以2,左移8位,乘以2的8次方=256;*/

 

void startHC()

{

Trig = 0;

Trig = 1;

Delay10us();

Trig = 0;

}

void main()

{

double time;

double dis;

Time0Init();

while(1){

//1. 让它发送波:给Trig端口至少10us的高电平

startHC();

//2. 开始发送波:Echo信号由低电平跳转到高电平

while(Echo == 0);

//   开始发送波,启动定时器

TR0 = 1;

//3. 接收返回波:Echo信号由高电平跳转回低电平

while(Echo == 1);

//   接收返回波,停止定时器

TR0 = 0;

//4. 计算时间

time = (TH0 * 256 + TL0)*1.085;//us为单位

//5. 距离 = 速度 (340m/s)* 时间/2

dis = time * 0.017;

if(dis < 10){

D5 = 0;

D6 = 1;

}else{

D5 = 1;

D6 = 0;

}

//定时器数据清零,以便下一次测距

TH0 = 0;

TL0 = 0;

}

}

关键字:51单片机  STC89C52  HC-SR04 引用地址:【51单片机STC89C52】HC-SR04超声波模块测距

上一篇:【51单片机STC89C52】舵机控制综合篇
下一篇:【51单片机STC89C52】定时器(中断)控制LED

推荐阅读最新更新时间:2024-10-30 18:05

51单片机之延时的哪点事儿
我说的是 单片机C ,书上的延时是这样的,如: void delay02() { unsigned char i,j,k; for(i=2;i 0;i--) for(j=200;j 0;j--) for(k=250;k 0;k--); } 它的时间是:2usX250X200X2=200 000us=0.5s 而这个时间是不精确的,我在家里总结出了一个对于这种时间计算法,它的结果和在KEILL中调试时的时间是一样的并且也分开始定义时的类型,char是以1us计算,int 是4us,如果上面的那里定义成int那结果就并不是0.5S啦! 分析法为: 以u
[单片机]
基于AT89C51单片机的自行车仪表系统设计
一.系统概述 系统使用的模块有AT89C51单片机+小灯+按键+ADC0832+DS1302时钟模块。 系统内使用AT89C51单片机作为主控,检测到的自行车速度会通过ADC0832转换后发送到单片机,并且会将速度数据上传到LCD1602上进行显示,通过按键可以设定阈值,当检测到速度超过设定阈值后就会通过小灯报警,使用DS1302时钟模块给系统提供时钟数据,显示屏上会显示日期时间等参数。 二.仿真概述 1.LCD1602显示屏上显示自行车车速和阈值。 2.按下界面切换后显示日期和时间数据。 3.通过ADC0832和电位器模拟自行车车速。 4.通过按键可以设定自行车的车速阈值。 5.当检测到车速超过阈值就会通过小
[单片机]
基于AT89C<font color='red'>51单片机</font>的自行车仪表系统设计
51单片机智能火灾报警系统
单片机源程序如下: #include reg52.h //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include intrins.h //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du ={0x05,0xdd,0x46,0x54,0x9c,0x34,0x24,0x5d,0x04,0x14,
[单片机]
<font color='red'>51单片机</font>智能火灾报警系统
51单片机音乐盒的仿真课程设计(8首歌)
仿真成功 初始化显示P.521061P. 显示歌曲编号。 8首歌的音乐盒课程设计。 一个很简单的程序 分享一下 仿真原理图如下 单片机源程序如下: ////////////////////////////////////////////// //51单片机音乐播放器程序 // //共三个按键:上一曲、下一曲、播放暂停 // //播放完一首歌曲无按键按下时顺序播放下一曲 // ////////////////////////////////////////////// #include REG51.H //#define sound_amount 5 //歌曲的数量
[单片机]
<font color='red'>51单片机</font>音乐盒的仿真课程设计(8首歌)
51单片机矩阵按键电路图+程序
下面是数码管部分电路原理图: 下面是矩阵键盘部分的电路原理图: c51单片机程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int //数码管的段码编码 uchar table = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar seg ={0xfe,0xfd,0xfb,0xf7}; uchar shu; void Delay_1ms(uint i)//1ms延时 { uc
[单片机]
<font color='red'>51单片机</font>矩阵按键电路图+程序
以AT89C51单片机为智能单元的全自动太阳跟踪系统设计
引言 随着社会经济的快速发展,人类所面临的能源问题越来越突出,太阳能作为一种清洁能源,无疑受到各国的普遍重视。在相同条件下,光照强度越大,太阳能电池输出功率越大。因而增大太阳能电池受光面的光照强度,就可增大太阳能电池输出功率。除了提高太阳光电池本身的转换效应和提高蓄电池充放电效应外,对太阳的自动跟踪是太阳光伏发电系统中另一种提高转换效率的有效手段。因此,在太阳能的利用过程中,实施太阳跟踪是很有必要的。 对太阳进行跟踪的方法很多,但不外乎为采用确定太阳位置所用的两种坐标系统,即赤道坐标系和地平坐标系,并分为双轴跟踪和单轴跟踪。单轴跟踪已在很多文献作了介绍,本文要讨论的为双轴跟踪。为了叙述方便,在以后的陈述中将两种坐标系下的整个系
[单片机]
以AT89C<font color='red'>51单片机</font>为智能单元的全自动太阳跟踪系统设计
51单片机 UART串口通信
使用半双工通信 /************************************ 使用硬件UART模块和串口中断 ************************************/ #include reg52.h typedef unsigned int uint; void configUART(uint baud); void main() { EA = 1; configUART(9600); while (1) ; } void configUART(uint baud) { SCON = 0x50;
[单片机]
51单片机制作脉冲发生器
要求 1.在Keil IDE(u Vision2)中完成应用程序设计,并编译 2.在ISIS 7 Professional 中完成电路设计、调试与仿真 /** I use a timer in my code to control the time **/ #include reg51.h #define uint unsigned int #define uchar unsigned char uchar code tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar second=0,counter=0,second_1=0,second
[单片机]
<font color='red'>51单片机</font>制作脉冲发生器
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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