51单片机基础8——单片机控制超声波模块

超声波模块的使用

    • 51单片机控制超声波模块
      • [1. 软硬件条件](#1. 软硬件条件)
      • [2. 超声波控制原理](#2. 超声波控制原理)
        • [2.1 超声波测距原理](#2.1 超声波测距原理)
        • [2.2 超声波模块工作原理](#2.2 超声波模块工作原理)
      • [3. 接线](#3. 接线)
      • [4. 代码实现](#4. 代码实现)

51单片机控制超声波模块

1. 软硬件条件

  • 单片机型号:STC89C52RC
  • 开发环境:KEIL4
  • 烧录软件:stc-isp
  • 超声波模块:HC-SR04

2. 超声波控制原理

2.1 超声波测距原理

超声波模块发出超声波,等待超声波碰撞到物体返回,由超声波模块接收,再经过简单计算后得出距离。

v 音速 = 340 m / s = 0.034 c m / u s L 距离 = S 波的路程 2 = 1 2 ∗ v 音速 ∗ t 总时长 c m v_{音速} = 340m/s = 0.034cm/us\\ L_{距离} = \frac{S_{波的路程}}{2} = \frac{1}{2} * v_{音速} * t_{总时长} cm v音速=340m/s=0.034cm/usL距离=2S波的路程=21∗v音速∗t总时长cm

2.2 超声波模块工作原理

操作顺序:

  1. 当要测距时,给trig引脚一个持续至少10us的高电平,等待echo引脚跳变为高电平。
  2. echo引脚跳变为高电平时表示发出超声波,等待echo引脚跳变为低电平。
  3. echo引脚跳变为低电平表示接收到发出的超声波,记录传播时间。
  4. 计算距离。

3. 接线

超声波模块 51单片机
VCC 5V
GND GND
trig P1.1
echo P1.2

4. 代码实现

实现效果为:检测到的距离<= 10cm 灯亮;> 10cm 灯灭。

c 复制代码
#include "reg52.h"
#include <intrins.h>

#define ON 1
#define OFF 0
#define TON 0
#define TOFF 1

sbit trig = P1^1;
sbit echo = P1^2;
sbit LED = P1^3;
sbit testLED1 = P3^7;


void Delay10us()		//@11.0592MHz
{
	unsigned char i;

	i = 2;
	while (--i);
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Delay200ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 2;
	j = 103;
	k = 147;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

// 启动超声波
void startHC(){
	trig = OFF;
	trig = ON;
	Delay10us();
	trig = OFF;
	testLED1 = TON;
}

void Timer0Init(){
	TMOD &= 0xF0;
	TMOD |= 0x01;
	
	TH0 = 0x00;
	TL0 = 0x00;
	
	TF0 = 0;
	ET0 = 0;
	EA = 0;
	TR0 = 0;
	
}

void init(){
	testLED1 = TOFF;

	LED = OFF;
	trig = OFF;
	echo = OFF;
	Timer0Init();
	Delay1000ms(); // 稳定系统
}

void main(){
	float dis = 0;
	float time = 0;
	init();
	while(1){
		startHC();
		while(!echo);
		TR0 = ON;

		while(echo);
		TR0 = OFF;
		time = 1.085 * (TH0 * 256 + TL0);
		dis = 0.034 * time / 2;

		if(dis <= 10){
			LED = ON;
		}
		else if(dis > 10){
			LED = OFF;
		}
		TL0 = 0;
		TH0 = 0;
		Delay200ms();
	}

}
相关推荐
编码追梦人7 小时前
从零入门嵌入式系统:核心概念 + 环境搭建 + 传感器实战
单片机·嵌入式硬件
dqsh069 小时前
树莓派5+Ubuntu24.04 LTS CH348 / CH9344 驱动安装 保姆级教程
linux·c语言·单片机·嵌入式硬件·iot
点灯小铭9 小时前
基于单片机的16位逐次逼近AD电路设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
奔跑吧邓邓子10 小时前
【C语言实战(80)】C语言实战:从复盘到进阶,解锁编程新高度
c语言·进阶·复盘·终篇
@曾记否11 小时前
如何在Keil5中在没有硬件支持的情况下使用Keil的模拟器(Simulator) + 调试窗口输出进行调试
c语言·stm32
Shang1809893572611 小时前
T41NQ/T41N高性能低功耗SOC芯片 软硬件资料T41NQ适用于各种AIoT应用,适用于智能安防、智能家居,机器视觉等领域方案
驱动开发·嵌入式硬件·计算机视觉·fpga开发·信息与通信·t41nq
烛衔溟11 小时前
C语言多级指针与函数指针:指针的高级用法
c语言·算法
GilgameshJSS11 小时前
STM32H743-ARM例程39-SD_IAP
arm开发·stm32·嵌入式硬件
hollq12 小时前
STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu完成轮询方式检测按键
arm开发·stm32·嵌入式硬件
d111111111d13 小时前
STM32外设学习--DMA直接存储器读取(AD扫描程序,DMA搬运)--学习笔记。
笔记·stm32·单片机·嵌入式硬件·学习