51单片机温度报警器代码
时间: 2023-10-19 13:07:47 浏览: 227
以下是一个基于51单片机的温度报警器代码,使用DS18B20温度传感器,当温度超过设定的阈值时,将会触发报警。
```c
#include <reg51.h>
#include <ds18b20.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^7; // DS18B20数据线连接到P3.7
void delay(uint t)
{
while(t--);
}
void init()
{
init_DS18B20(); // 初始化DS18B20
}
void main()
{
uchar temperature;
init(); // 初始化
while(1)
{
temperature = read_DS18B20(); // 读取温度
if(temperature > 30) // 如果温度超过30度
{
P1 = 0xff; // 触发报警
delay(50000); // 延时
P1 = 0x00; // 关闭报警
delay(50000); // 延时
}
}
}
```
需要注意的是,该代码仅供参考,具体实现需要根据自己的硬件环境进行调整。此外,需要自行编写 DS18B20 库文件,可以参考以下代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^7;
uchar init_DS18B20()
{
uchar i;
DQ = 1;
delay(10);
DQ = 0;
delay(500);
DQ = 1;
delay(10);
i = DQ;
delay(500);
return i;
}
void write_DS18B20(uchar dat)
{
uchar i, j;
for(i = 0; i < 8; i++)
{
j = dat >> i;
j &= 0x01;
DQ = 0;
delay(5);
DQ = j;
delay(50);
DQ = 1;
}
}
uchar read_DS18B20()
{
uchar i, j, dat;
dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0;
delay(5);
DQ = 1;
delay(5);
j = DQ;
delay(50);
dat |= (j << i);
}
return dat;
}
void convert_DS18B20()
{
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0x44);
}
uchar read_temp_DS18B20()
{
uchar temp_l, temp_h;
init_DS18B20();
write_DS18B20(0xcc);
write_DS18B20(0xbe);
temp_l = read_DS18B20();
temp_h = read_DS18B20();
return temp_l;
}
void init_DS18B20()
{
uchar i;
DQ = 1;
delay(10);
DQ = 0;
delay(500);
DQ = 1;
delay(10);
i = DQ;
delay(500);
}
void delay(uint t)
{
while(t--);
}
```
阅读全文