用ds18b20,报警是蜂鸣器响
时间: 2025-06-11 22:13:46 浏览: 13
### DS18B20温度报警系统设计
以下是一个基于DS18B20温度传感器、蜂鸣器和单片机的温度报警控制电路代码示例。该代码适用于51系列单片机,能够实现温度监测、报警阈值设置以及蜂鸣器报警功能。
#### 代码实现
```c
#include <reg52.h>
#include <ds18b20.h> // DS18B20驱动库
#include <intrins.h>
sbit Buzzer = P1^0; // 蜂鸣器连接到P1.0
sbit KeyUp = P3^0; // 上键连接到P3.0
sbit KeyDown = P3^1; // 下键连接到P3.1
sbit KeySet = P3^2; // 设置键连接到P3.2
unsigned char THigh = 30; // 高温报警阈值初始化为30°C
unsigned char TLow = 0; // 低温报警阈值初始化为0°C
bit IsSetting = 0; // 是否处于设置模式标志
void DelayMs(unsigned int t) {
while (t--) {
_nop_();
}
}
void BeeperOn() {
Buzzer = 0; // 蜂鸣器开启
}
void BeeperOff() {
Buzzer = 1; // 蜂鸣器关闭
}
unsigned char GetKey() {
if (!KeyUp) {
DelayMs(20); // 消抖
while (!KeyUp);
return 1; // 返回上键信号
} else if (!KeyDown) {
DelayMs(20); // 消抖
while (!KeyDown);
return 2; // 返回下键信号
} else if (!KeySet) {
DelayMs(20); // 消抖
while (!KeySet);
return 3; // 返回设置键信号
}
return 0; // 无按键按下
}
void MainLoop() {
unsigned char temp = Read_DS18B20(); // 读取DS18B20温度值[^4]
if (temp > THigh) { // 如果温度高于高温报警阈值
BeeperOn(); // 开启蜂鸣器报警
} else if (temp < TLow) { // 如果温度低于低温报警阈值
BeeperOn(); // 开启蜂鸣器报警
} else {
BeeperOff(); // 关闭蜂鸣器
}
if (GetKey() == 3) { // 如果按下设置键
IsSetting = ~IsSetting; // 切换设置模式
}
if (IsSetting) { // 如果处于设置模式
unsigned char key = GetKey();
if (key == 1) { // 上键增加高温报警阈值
THigh++;
} else if (key == 2) { // 下键减少高温报警阈值
THigh--;
}
}
}
void main() {
while (1) {
MainLoop(); // 主循环
}
}
```
#### 说明
上述代码实现了以下功能:
1. **温度读取**:通过`Read_DS18B20()`函数获取当前温度值[^4]。
2. **报警逻辑**:当温度超过设定的高温或低温阈值时,蜂鸣器将发出警报[^1]。
3. **按键控制**:通过独立按键调整高温报警阈值,并可以通过设置键进入/退出设置模式。
4. **蜂鸣器控制**:使用`BeeperOn()`和`BeeperOff()`函数控制蜂鸣器的开关状态[^1]。
#### 注意事项
- 确保DS18B20传感器正确连接至单片机,并加载相应的驱动库。
- 如果需要更高的精度(如小数点后一位),可以参考引用[2]中的设计思路[^2]。
- 在实际应用中,可能需要根据具体的硬件配置调整引脚定义和延时参数[^3]。
---
###
阅读全文
相关推荐

















