51单片机温度检测与报警系统代码
时间: 2023-08-18 17:08:34 浏览: 61
以下是一个基于51单片机的温度检测与报警系统代码,使用了DS18B20数字温度传感器:
```c
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3 ^ 7; // DS18B20数据线
void delay_us(uint n) // 微秒延时函数
{
while (n--)
;
}
void delay_ms(uint n) // 毫秒延时函数
{
while (n--)
delay_us(1000);
}
void write_DS18B20(uchar dat) // 写入一个字节的数据
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
dat >>= 1;
_nop_();
DQ = 1;
}
}
uchar read_DS18B20() // 读取一个字节的数据
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
dat >>= 1;
DQ = 0;
_nop_();
DQ = 1;
_nop_();
if (DQ)
dat |= 0x80;
}
return dat;
}
void init_DS18B20() // 初始化DS18B20
{
DQ = 1;
delay_us(2);
DQ = 0;
delay_us(500);
DQ = 1;
delay_us(60);
if (!DQ)
{
delay_us(500);
}
}
void get_temp(uchar *temp) // 获取温度值
{
uchar i;
init_DS18B20();
write_DS18B20(0xCC); // 跳过ROM指令,跳过设备地址
write_DS18B20(0x44); // 启动温度转换指令
delay_ms(750); // 延时750ms等待温度转换完成
init_DS18B20();
write_DS18B20(0xCC);
write_DS18B20(0xBE); // 读取温度指令
for (i = 0; i < 2; i++) // 读取温度数据
{
temp[i] = read_DS18B20();
}
}
void main()
{
uchar temp[2];
uchar high_temp = 30; // 高温阈值
while (1)
{
get_temp(temp);
if (temp[1] > high_temp) // 如果温度超过高温阈值,发出报警
{
printf("Warning! High temperature: %d.%dC\n", temp[1], temp[0]);
}
delay_ms(1000);
}
}
```
上述代码仅供参考,实际应用中还需要根据具体需求进行修改和调试。