超声波距离报警系统 基于51开发板和HC-SRO4超声波测距模块,设计程序实现以下 功能。 1、超声波与物体距离大于40cm,系统没有响应 2、超声波与物体距离大于30cm小于40cm,D1灯闪烁 3、超声波与物体距离大于20cm小于30cm,D1灯常亮 4、超声波与物体距离大于10cm小于20cm,蜂鸣器报警(频率较慢) 5、超声波与物体距离小于10cm,蜂鸣器报警(频率较快)
时间: 2024-02-06 15:04:38 浏览: 22
这是一个基于超声波测距模块的距离报警系统的设计,可以使用51开发板进行程序实现。根据要求,可以设计以下程序实现不同距离下的不同响应:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Trig = P3^5; // 超声波模块控制端口
sbit Echo = P3^2; // 超声波模块回传端口
sbit Buzzer = P2^3; // 蜂鸣器控制端口
sbit LED = P2^0; // LED控制端口
void delay(uint i) // 延时函数
{
while(i--);
}
void Init() // 初始化函数
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xFC; // 定时器高8位初始值
TL0 = 0x67; // 定时器低8位初始值
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
}
void Measure_Distance() // 超声波测距函数
{
uint distance = 0;
Trig = 1; // 发送起始信号
delay(10); // 延时10us
Trig = 0;
while(!Echo); // 等待回传端口为高电平
TH0 = 0; // 定时器清零
TL0 = 0;
while(Echo && TF0 == 0); // 等待回传端口变为低电平或者定时器溢出
if(TF0 == 1) // 超声波模块没有回传信号
{
TF0 = 0; // 定时器0溢出标志位清0
distance = 0; // 超声波距离为0
}
else // 超声波模块回传了信号
{
distance = TH0*256 + TL0; // 计算距离
distance = distance/58; // 转换成厘米单位
TF0 = 0; // 定时器0溢出标志位清0
}
if(distance > 40) // 超声波距离大于40cm,系统没有响应
{
LED = 0;
Buzzer = 0;
}
else if(distance > 30 && distance <= 40) // 超声波距离大于30cm小于40cm,D1灯闪烁
{
LED = !LED;
Buzzer = 0;
}
else if(distance > 20 && distance <= 30) // 超声波距离大于20cm小于30cm,D1灯常亮
{
LED = 1;
Buzzer = 0;
}
else if(distance > 10 && distance <= 20) // 超声波距离大于10cm小于20cm,蜂鸣器报警(频率较慢)
{
LED = 1;
Buzzer = !Buzzer;
delay(500);
}
else if(distance <= 10) // 超声波距离小于10cm,蜂鸣器报警(频率较快)
{
LED = 1;
Buzzer = !Buzzer;
delay(100);
}
}
void main()
{
Init();
while(1)
{
Measure_Distance();
}
}
void Timer0_ISR() interrupt 1 // 定时器0中断函数
{
TH0 = 0xFC; // 定时器高8位初始值
TL0 = 0x67; // 定时器低8位初始值
}
```
该程序通过超声波测距模块进行距离测量,并根据不同距离下的不同响应,控制LED和蜂鸣器的状态。具体的实现细节请根据实际情况进行调整。