使用超声波模块实现测距功能,测量结果显示在LCD1602上、并通过串口发送给电脑,测量距离大于或小于5~400cm,LCD1602显示“Waring!”同时蜂鸣器报警、串口发送“Waring”。
超声波测距原理
超声波测距的方法有很多种,最常用的是脉冲回波法。原理框图如图,
超声波传感器发射超声波,在空气中传播至被测目标,经反射后由超声波传感器接收反射脉冲,测量出超声波脉冲从发射到接收的时间,经过计算 S=1/2vt 可以得到距离。h较小时,S≈d ,所以通过测量超声波往返时间,就可以计算出距离长短。
HC-SR04模块
工作原理:采用IO触发测距,给trig至少10us的高电平信号;
模块自动发送8个40khz的方波,自动检测是否有信号返回;有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
时序图如下图所示:
具体实现,控制口发一个10us以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当接收口变为低电平时就可以读定时器的值,此时就为此次测距的时间,从而算出距离。如此不断地周期测量,就可以达到移动测量的值。
代码
#include<reg52.h>
#include<intrins.h>
sbit trig=P1^1; //控制端口定义
sbit echo=P1^0; //接收端口定义
sbit RS=P3^5; //lcd1602数据/命令端
sbit EN=P3^4; //使能端
sbit U1=P2^6; //数码管段选
sbit U2=P2^7; //数码管位选
sbit bi=P2^3; //buzz
unsigned char str[]={
"Distance:"}; //lcd显示字符串
unsigned char juli[]={
"0000cm"}; //lcd距离显示字符串
unsigned char change[]={
"\r\n"}; //串口打印换行符
unsigned char jg[]={
"Waring"}; //串口打印
unsigned int time; //时间
unsigned long s; //距离
bit flag=0; //标志位(定时器)
bit flag1=0; //标志位(串口打印)
void delayms(unsigned int xms); //延时
void buzz(); //蜂鸣器
void wcmd