51单片机基于DS18B20的温度报警器
时间: 2023-07-26 19:47:05 浏览: 134
51单片机用DS18B20做一个温度报警器程序.zip
基于51单片机的温度报警器需要使用特定的库来读取DS18B20温度传感器的数据,以下是一个基于DS18B20的温度报警器代码:
```C
#include <reg51.h>
#include <ds18b20.h>
#include <delay.h>
//定义DS18B20的引脚
sbit DQ=P2^3;
//定义温度阈值
#define THRESHOLD 25
void main()
{
unsigned char temp[2];
unsigned int temperature;
while(1)
{
DS18B20_Start(); //启动DS18B20
DS18B20_SendByte(0xcc); //跳过ROM操作
DS18B20_SendByte(0x44); //启动温度转换
Delay1ms(750); //等待750ms,确保温度转换完成
DS18B20_Start(); //重新启动DS18B20
DS18B20_SendByte(0xcc); //跳过ROM操作
DS18B20_SendByte(0xbe); //读取温度寄存器
temp[0] = DS18B20_ReadByte(); //读取温度值的低字节
temp[1] = DS18B20_ReadByte(); //读取温度值的高字节
temperature = (temp[1] << 8) | temp[0]; //将低字节和高字节合并为一个整数
if (temperature > THRESHOLD * 16) {
//温度超过阈值,触发报警
//具体操作根据需要进行修改
} else {
//温度正常,不需要报警
//具体操作根据需要进行修改
}
Delay1ms(5000); //等待5秒后再次检测温度
}
}
```
在这个代码中,我们首先引入了 reg51.h、ds18b20.h 和 delay.h 三个库。然后通过定义 DQ 常量来设置 DS18B20 的引脚。
在主函数中,我们使用 DS18B20_Start() 函数启动 DS18B20,通过 DS18B20_SendByte() 函数发送命令,等待温度转换完成后再次启动 DS18B20,通过 DS18B20_SendByte() 函数读取温度值,并将低字节和高字节合并为一个整数,最后与预设的温度阈值进行比较,如果温度超过阈值,则触发报警操作,否则进行正常操作。需要注意的是,具体的报警和正常操作需要根据实际需求进行修改。
最后,我们通过 Delay1ms() 函数等待5秒后再次检测温度。
阅读全文