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();
	}

}
相关推荐
你好,我叫C小白1 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
朱嘉鼎3 小时前
状态机的介绍
c语言·单片机
清风6666664 小时前
基于单片机的噪声波形检测与分贝测量仪设计
单片机·嵌入式硬件·毕业设计·课程设计
Neverfadeaway4 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
一碗绿豆汤4 小时前
c语言-流程控制语句
c语言
易享电子5 小时前
基于单片机车窗环境监测控制系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
子牙老师5 小时前
从零手写gdb调试器
c语言·linux内核·gdb·调试器
三佛科技-134163842125 小时前
LED氛围灯方案开发MCU控制芯片
单片机·嵌入式硬件·智能家居·pcb工艺
小莞尔6 小时前
【51单片机】【protues仿真】基于51单片机主从串行通信系统
c语言·单片机·嵌入式硬件·物联网·51单片机
Hello_Embed6 小时前
STM32 环境监测项目笔记(一):DHT11 温湿度传感器原理与驱动实现
c语言·笔记·stm32·单片机·嵌入式软件