STC15单片机使用HC-SR04超声波测距模块

2019-05-22来源: eefocus关键字:STC15  单片机  HC-SR04  超声波测距模块

【HC-SR04】

HC-HR04超声波测距可提供2cm-400cm的非接触式距离感测功能,测距精度可达3mm。


基本工作原理

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


2、模块自动发送8个40KHz的方波,自动检测是否有信号返回。


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



时序图


以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将:发出8个40kHz周期电平并检测回波。一.旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S) /2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。



【程序】

我使用的是STC15F2K60S2单片机,内部晶振设置12M。以下程序省略管脚定义等无关语句,仅提供程序思路供参考。


uchar Flag_hypertelorism = 0; //超声波距离过远标志

float distance = 0;

uchar Flag_Fucker = 0; //超声波开启标志

 

void main()

{

    Time0_Init();

    Time1_Init();

    while(1)

    {

        if(Flag_Fucker == 1)

            Ultrasonic();

    }

}

 

/*初始化定时器0*/

void Time0_Init(void)

{

// AUXR |= 0x80;                   //定时器0为1T模式

AUXR &= 0x7f;                   //定时器0为12T模式

    TMOD = 0x00;                    //设置定时器为16位自动重装载

    TL0 = 0x60;                     //初始化计时值 4ms

    TH0 = 0xF0;

    TR0 = 1;                        //定时器0开始计时

    ET0 = 1;                        //使能定时器0中断

    EA = 1;

}

 

//定时器1初始化

void Time1_Init()

{

// AUXR |= 0x40;                   //定时器1为1T模式

AUXR &= 0xdf;                   //定时器1为12T模式

    TMOD = 0x00;                    //设置定时器1为16位自动重装载

    TL1 = 0x60;                     //初始化计时值 4ms

    TH1 = 0xF0;

//  TR1 = 1;                      //暂时不开启定时器1计时

ET1 = 1;                        //使能定时器1中断

    EA = 1;

}

 

/*定时器0中断*/

void Time0 () interrupt 1

{

static uchar time = 0;

// 自动装载模式下可省略

// TL0 = T0MS; 

//  TH0 = T0MS >> 8;

time++;

if(time == 25) //100ms测距一次

{

time = 0;

Flag_Fucker = 1;

}

}

 

//定时器1溢出中断

void Time1() interrupt 3

{

Flag_hypertelorism = 1; //超声波距离过远

}

 

//超声波测距

void Ultrasonic()

{

uchar i;

Trig = 1; //超声波触发信号开启

_nop_(); //延时10us以上

i = 30;

while(--i);

Trig = 0; //超声波触发信号关闭

while(!Echo); //Echo为0时等待

TR1 = 1; //开启定时器1计时

while(Echo == 1 && TF1 == 0); //Echo为1时等待

TR1 = 0; //关闭定时器1计时

Distance_Count(); //计算距离

Flag_Fucker = 0; //关闭超声波测距

}

 

//距离值计算

void Distance_Count()

{

float Text_time = 0;

if(Flag_hypertelorism == 0)

{

Text_time = ((TH1 - temp_TH) * 256 + (TL1 - temp_TL)) / 2.0;

TL1 = 0x60;                     //初始化计时值 4ms

TH1 = 0xF0;

distance = Text_time * 0.34; //单位mm

}

else

{

distance = 9999;

Flag_hypertelorism = 0;

}

}



关键字:STC15  单片机  HC-SR04  超声波测距模块 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic462581.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机使用槽型光耦测速模块
下一篇:STC15F2K60S2设置内部时钟工作频率

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机自动浇花系统
自己做的基于stc89c51单片机的自动浇花系统,有自动和手动两种模式,可以设置湿度的上下限,利用lcd1602显示,有一点遗憾的是设置湿度上下限时,没有光标闪动提示,希望大家给点建议,帮助改进,我把源程序附在这。仿真原理图如下 原理图: 单片机源代码:#include<reg51.h>#define uchar unsigned char#define uint unsigned int sbit ad_cs=P1^3;         //ADC0832的控制位sbit ad_clk=P1^0;sbit ad_dat=P1^1;s
发表于 2019-10-17
单片机自动浇花系统
stc8单片机+8针oled驱动显示ADC值源程序
#include <intrins.h>#include <STC8.H>sbit lcd_sclk=P5^0;  /*接口定义:lcd_sclk就是CLK*/sbit lcd_sid=P5^1;   /*接口定义:lcd_sid就是MOSI*/sbit lcd_rs=P5^2;    /*接口定义:lcd_rs就是DC*/sbit lcd_cs1=P5^3;   /*接口定义:lcd_cs1就是OLED的片选CS1*/sbit Rom_OUT=P5^4;   /*字库IC接口定义:Rom_OUT就是FSO*/s
发表于 2019-10-15
课程设计题三十三:基于单片机的电子钟
了。/*******************************************************************************================================================================================【平    台】STC89C51平台【编    写】Sumjess【E-mail  】1371129880@qq.com【软件版本】V2.0【最后更新】2018年09月06日【相关信息参考下列地址】【网    站】  Sumejss博客  https://blog.csdn.net/qq_38351824  电子发烧友  http://bbs.elecfans.c
发表于 2019-09-29
课程设计题三十三:基于单片机的电子钟
课程设计题二:7人多数表决器
了。/*******************************************************************************================================================================================【平    台】STC89C51_sumjess平台【编    写】sumjess【E-mail  】1371129880@qq.com【软件版本】V2.0【最后更新】2019年06月10日【相关信息参考下列地址】【网    站】           https
发表于 2019-09-29
课程设计题二:7人多数表决器
课程设计题三:日历和数字钟
了。/*******************************************************************************================================================================================【平    台】STC89C51_sumjess平台【编    写】sumjess【E-mail  】1371129880@qq.com【软件版本】V2.0【最后更新】2019年06月10日【相关信息参考下列地址】【网    站】           https://blog.csdn.net/qq_38351824           http://www.51hei.com/bbs
发表于 2019-09-29
课程设计题三:日历和数字钟
课程设计题四:LED彩灯控制器设计
】STC89C51平台【编    写】Sumjess【E-mail  】1371129880@qq.com【软件版本】V2.0【最后更新】2018年09月06日【相关信息参考下列地址】【网    站】  Sumejss博客  https://blog.csdn.net/qq_38351824  电子发烧友  http://bbs.elecfans.com/zhuti_mcu_1.html  中国电子网  http://bbs.21ic.c
发表于 2019-09-29
课程设计题四:LED彩灯控制器设计
小广播
何立民专栏 单片机及嵌入式宝典

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

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