51单片机超声波测距蜂鸣器报警fangzhen代码
时间: 2023-09-06 22:04:06 浏览: 276
以下是51单片机超声波测距蜂鸣器报警防震代码示例:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Trig = P1^0; // 超声波发射引脚
sbit Echo = P1^1; // 超声波接收引脚
sbit Buzzer = P2^0; // 蜂鸣器引脚
void Delayus(uint n)
{
while(--n);
}
void Delayms(uint n)
{
uint x;
while(n--)
{
x = 125;
while(--x);
}
}
void Send_pulse()
{
Trig = 1; // 发射脉冲
Delayus(10);
Trig = 0;
}
uint Measure_distance()
{
uint distance;
while(!Echo); // 等待信号从发射到接收
TH0 = 0;
TL0 = 0;
while(Echo); // 接收到信号
TR0 = 1; // 启动定时器
while(!Echo); // 等待信号结束
TR0 = 0; // 停止定时器
distance = TH0;
distance = (distance << 8) | TL0; // 计算距离
distance = distance / 58; // 单位转换为厘米
return distance;
}
void main()
{
TMOD = 0x01; // 设置定时器0为工作模式1,16位定时器
TH1 = 0xFC; // 设置定时器0的初始值
TL1 = 0x67; // 设置定时器0的初始值
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许中断
while(1)
{
Send_pulse(); // 发送超声波脉冲
Delayms(50); // 延时50毫秒
uint distance = Measure_distance(); // 测量距离
if(distance < 10) // 如果距离小于10厘米
{
Buzzer = 1; // 打开蜂鸣器
Delayms(200); // 延时200毫秒
Buzzer = 0; // 关闭蜂鸣器
Delayms(200); // 延时200毫秒
}
}
}
这段代码使用51单片机控制超声波传感器进行测距,并通过蜂鸣器进行报警。在主函数中,不断调用Send_pulse函数发射超声波脉冲,并延时50毫秒后调用Measure_distance函数测量距离。当距离小于10厘米时,蜂鸣器会发出报警声,延时200毫秒后再次关闭蜂鸣器,然后继续循环。该代码需要在51单片机上运行,并且需要连接超声波传感器和蜂鸣器。
阅读全文