蓝桥杯单片机必备知识-----(9)超声波测距

超声波测距原理:

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。
超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。
由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。

核心代码:

//切记,计算距离不使用分频
sbit TX = P1^0;  //发射引脚
sbit RX = P1^1;  //接收引脚void main(void)
{cls();AUXR = 0x80;TMOD = 0x10;  //配置定时器工作模式TH0 = 0xcd;TL0 = 0xd4;  TH1 = 0;TL1 = 0;  TR0 = 1;  //启动定时器EA = 1;ET0 = 1;  //打开定时器0中断while(1){/** 100毫秒更新一次数据 */if(s_flag){s_flag = 0;send_wave();  //发送方波信号TR1 = 1;  //启动计时while((RX == 1) && (TF1 == 0));  //等待收到脉冲,没有计满溢出TR1 = 0;  //关闭计时//发生溢出if(TF1 == 1){TF1 = 0;distance = 9999;  //无返回}else{/**  计算时间  */time=TH1*256+TL1;distance = (unsigned int)(time*0.017);  //计算距离             }TH1 = 0;TL1 = 0;}}
}
//12us
void Delay12us()//@11.0592MHz
{unsigned char i;_nop_();_nop_();_nop_();i = 30;while (--i);
}void send_wave()//发送八段脉冲波(40Khz)
{unsigned char i = 8;while(i --){TX = 1;Delay12us();TX = 0;Delay12us();}
}

测试结果:

整个代码粘贴

#include <stc15f2k60s2.h>
#include "intrins.h"#define uchar unsigned char
#define uint unsigned intsbit TX = P1^0;  //发射引脚
sbit RX = P1^1;  //接收引脚
uchar tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
uchar dspbuf[] = {10,10,10,10,10,10,10,10};
uint distance,time = 0;
uchar s_flag = 0;void display();
void load();
void Delay12us();
void send_wave();void cls()
{P2 = (P2 & 0x1f) | 0x80;P0 = 0xff;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xa0;P0 = 0x00;P2 = 0x1f;
}void main(void)
{cls();AUXR = 0x80;TMOD = 0x10;  //配置定时器工作模式TH0 = 0xcd;TL0 = 0xd4;  TH1 = 0;TL1 = 0;  TR0 = 1;  //启动定时器EA = 1;ET0 = 1;  //打开定时器0中断while(1){/** 200毫秒更新一次数据 */if(s_flag){s_flag = 0;/** 关闭定时器0中断:计算超声波发送到返回的时间 */
//          ET0 = 0;send_wave();  //发送方波信号TR1 = 1;  //启动计时while((RX == 1) && (TF1 == 0));  //等待收到脉冲,没有计满溢出TR1 = 0;  //关闭计时//发生溢出if(TF1 == 1){TF1 = 0;distance = 9999;  //无返回}else{/**  计算时间  */time=TH1*256+TL1;distance = (unsigned int)(time*0.017);  //计算距离             }TH1 = 0;TL1 = 0;}}
}//定时器0中断服务函数
void time0()  interrupt 1  //默认中断优先级 1
{static unsigned int intr = 0;if(++intr == 100){s_flag = 1;intr = 0;}display();
}void load()
{dspbuf[5] = distance/100;dspbuf[6] = distance%100/10;dspbuf[7] = distance%10;
}void Delay12us()//@11.0592MHz
{unsigned char i;_nop_();_nop_();_nop_();i = 30;while (--i);
}void send_wave()//发送八段脉冲波(40Khz)
{unsigned char i = 8;while(i --){TX = 1;Delay12us();TX = 0;Delay12us();}
}void display()
{static unsigned char dspcom = 0;load();P2 = (P2 & 0x1f) | 0xe0;P0 = 0xff;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xc0;P0 = 1 << dspcom;P2 = 0x1f;P2 = (P2 & 0x1f) | 0xe0;P0 = tab[dspbuf[dspcom]];P2 = 0x1f;if(++dspcom == 8) dspcom = 0;
}

这时好多人会有疑惑,12us延时该如何做;

蓝桥杯单片机必备知识-----(9)超声波测距相关推荐

  1. 蓝桥杯单片机必备知识-----(1)显示函数

    蓝桥杯单片机必备知识---------(1)显示函数 全局变量 code unsigned char tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, ...

  2. 蓝桥杯单片机设计与开发⑫ ---超声波模块

    一.基本原理 超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时. 二.计算公式 距离 = 声速 × 发 ...

  3. 蓝桥杯单片机必备代码(零基础也适合)

    1.选择不同接口代码,传参4是LED小灯接口,5是蜂鸣器继电器,6是数码管位置,7是数码管显示的数值 //选择接口 void SelectHC573(unsigned char n) {switch( ...

  4. 【蓝桥杯单片机进阶强化-06】超声波测距的基本原理与实现

    [1]基本原理 超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时. [2]计算公式 距离 = 声速 × ...

  5. 蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机

    蓝桥杯单片机学习过程记录(二十九)第八届国赛超声波测距机 题目如下: 已完成 应用的内容: EEPROM. 定时器.数码管 led灯,独立按键 DA电压输出 超声波测距 /* ------------ ...

  6. 蓝桥杯单片机之超声波测距

    蓝桥杯单片机之超声波测距 测距原理 基本原理 计算公式 电路分析 代码设计 基本步骤 代码编写: 测距原理 基本原理 超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播, ...

  7. 蓝桥杯——单片机设计与开发初学者必备资料

    蓝桥杯--单片机设计与开发初学者必备资料 国信长天 大赛官方指定电子类比赛硬件提供方,可能大家只知道他们提供硬件,殊不知还有一些免费的视频讲解(只是老师可能说话带一点方言,嘻嘻),感兴趣的可以去看看, ...

  8. 蓝桥杯单片机学习过程记录(二十七)超声波模块

    蓝桥杯单片机学习过程记录(二十七)超声波模块 超声波模块的学习,未验证. /* ------------------- 超声波模块 没模块未验证 2020.3.16 ----------------- ...

  9. 蓝桥杯单片机 超声波模块和PCA模块

    蓝桥杯单片机 超声波模块和PCA模块 原理 超声波测量的原理 PCA模块的原理 代码 PCA定时器的范例程序 超声波测量的参考代码 原理 超声波测量的原理 超声波由一个超声波模块向前方发出,并在空气中 ...

最新文章

  1. 简单的3个SQL视图搞定所有SqlServer数据库字典
  2. 使用blowery.Web.HttpCompress.dll对aspx压缩
  3. Android 开发第四弹:围住神经猫(简单Demo)
  4. linux shell命令 输出头标题 输出结果 排序
  5. 文巾解题 46. 全排列
  6. 尚硅谷_MySQL常见命令介绍
  7. 【AI视野·今日CV 计算机视觉论文速览 第202期】Thu, 20 May 2021
  8. ​8次迭代5大升级,旷视天元1.0预览版正式发布
  9. poj2406 Power Strings 模式匹配算法KMP变形
  10. 四大逆向工程软件简介
  11. JQuery设置网页全屏代码实现
  12. 1466:Girls and Boys:优美的拆散早恋学生?
  13. magento mysql4-install_深入理解Magento - 第五章 Magento资源配置
  14. Windows11正版下载和Windows10正版下载安装教程
  15. 507. 完美数-c语言
  16. 互联网中常见的实名认证方式有哪几种?
  17. 坑爹!攻城狮老爸被苹果解雇 只因女儿晒iPhone X
  18. PaaS平台升级NFS报错排除
  19. 你的产品适不适合做微信小程序?你需要这篇产品逻辑分析
  20. 【参赛作品61】openGauss/MogDB大对象LargeObject存取测试

热门文章

  1. 重拾C#日常积累:DateTime日期的格式化和空值设置
  2. ESP8266-NodeMCU物联网开发之Arduino环境搭建
  3. 16进制编码与字符编码的相互转化
  4. Laravel 5 速查表
  5. GAL汉化界的一点实话。。。。。
  6. 合并多个集合同类项 5.{aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh} 通过编程实现结果为
  7. openVPN服务端搭建
  8. linux解压rar
  9. 螺旋面 (几何曲面)
  10. EPS QOS 体系解读