基于51超声波液位检测报警代码(可调节报警距离,带注释)
时间: 2023-11-28 13:47:25 浏览: 106
以下是基于51单片机的超声波液位检测报警代码(附有注释),你可以根据需要进行调整和优化。
```c
#include<reg52.h> //51单片机头文件
#define uchar unsigned char //定义无符号字符型变量
#define uint unsigned int //定义无符号整型变量
sbit Trig = P3^5; //超声波发射引脚
sbit Echo = P3^2; //超声波接收引脚
void delayus(uint i) //微秒级延时函数
{
while(i--);
}
void delayms(uint i) //毫秒级延时函数
{
uchar j;
while(i--)
{
for(j=0; j<110; j++);
}
}
void Init_Timer0() //定时器初始化函数
{
TMOD |= 0x01; //16位定时器
TH0 = 0xFC; //定时100us
TL0 = 0x18;
ET0 = 1; //允许中断
EA = 1; //打开总中断
TR0 = 1; //启动定时器
}
void Init_Ultrasonic() //超声波模块初始化函数
{
Trig = 0; //发射引脚初始值为低电平
Echo = 0; //接收引脚初始值为低电平
}
void main()
{
uint Distance = 0; //定义距离变量
Init_Ultrasonic(); //超声波模块初始化
Init_Timer0(); //定时器初始化
while(1)
{
Trig = 1; //发射脉冲
delayus(10);
Trig = 0;
while(!Echo); //等待接收到回波信号
TR0 = 1; //启动定时器
while(Echo); //等待回波信号结束
TR0 = 0; //关闭定时器
Distance = TH0 * 256 + TL0; //计算距离
if(Distance < 20) //当距离小于20cm时,报警
{
P1 = 0xFF; //LED灯亮起
delayms(200); //延时
P1 = 0x00; //LED灯熄灭
delayms(200); //延时
}
else
{
P1 = 0x00; //LED灯熄灭
}
delayms(100); //延时
}
}
void Timer0() interrupt 1 //定时器中断函数
{
TH0 = 0xFC; //重新赋值
TL0 = 0x18;
}
```
这个代码中,我们使用了一个定时器和超声波模块来进行液位检测。当距离小于20cm时,LED灯会闪烁报警。你可以根据需要进行调整和优化,比如更改报警距离、增加LCD显示等等。
阅读全文