温度报警器的设计程序报告,单片机AT89C52芯片
时间: 2023-11-24 14:05:11 浏览: 163
温度报警器的设计程序需要涉及到硬件设计和软件编程两个方面。下面是单片机AT89C52芯片的温度报警器设计程序报告。
一、硬件设计
1. 温度传感器
温度传感器一般选择数字式温度传感器,如DS18B20。DS18B20是一种数字式温度传感器,可以直接与单片机相连,采用单总线接口,具有精度高、稳定性好、抗干扰能力强、体积小等优点。
2. 报警器
报警器可以使用蜂鸣器或LED灯,当温度超过设定值时,报警器会发出警报或者LED灯会亮起。
3. 单片机
单片机采用AT89C52芯片,它是一种8位单片机,具有较高的运算速度和存储容量,在温度报警器中可以完成数据采集和处理、报警等功能。
二、软件编程
根据硬件设计,编写单片机程序,实现温度数据的采集、处理和报警功能。
程序主要流程如下:
1. 初始化DS18B20温度传感器,设置温度转换分辨率,开始温度转换。
2. 等待温度转换完成,读取温度值。
3. 将温度值与设定的报警温度比较,如果超过报警温度,则触发报警器,否则继续进行温度采集。
4. 等待一定时间后,重新开始温度转换。
程序代码如下:
```c
#include <reg52.h>
sbit DQ = P3^7; // DS18B20总线引脚
unsigned char temperature[2]; // 存储温度值
unsigned char alarm_temperature = 30; // 报警温度值
void delay(unsigned int time); // 延时函数
void ds18b20_init(); // 初始化DS18B20
void ds18b20_write(unsigned char dat); // 写数据到DS18B20
unsigned char ds18b20_read(); // 从DS18B20读取数据
void ds18b20_get_temperature(); // 获取DS18B20温度值
void alarm(); // 报警函数
void main()
{
while(1)
{
ds18b20_init(); // 初始化DS18B20
ds18b20_write(0xcc); // 跳过ROM操作
ds18b20_write(0x44); // 启动温度转换
delay(1000); // 等待温度转换完成
ds18b20_init(); // 初始化DS18B20
ds18b20_write(0xcc); // 跳过ROM操作
ds18b20_write(0xbe); // 读取温度值
temperature[0] = ds18b20_read(); // 读取温度低位
temperature[1] = ds18b20_read(); // 读取温度高位
ds18b20_init(); // 释放总线
ds18b20_get_temperature(); // 获取温度值
if(temperature[1] >= 0x80) // 判断温度是否小于0
{
temperature[0] = ~temperature[0] + 1; // 取反加1
temperature[1] = ~temperature[1]; // 取反
if(temperature[0] == 0) // 如果低位为0,高位加1
{
temperature[1]++;
}
}
if(temperature[0] >= alarm_temperature) // 判断温度是否超过报警温度
{
alarm(); // 报警
}
delay(5000); // 等待5秒
}
}
void delay(unsigned int time)
{
unsigned int i, j;
for(i = 0; i < time; i++)
{
for(j = 0; j < 125; j++);
}
}
void ds18b20_init()
{
DQ = 1;
delay(2);
DQ = 0;
delay(80);
DQ = 1;
delay(2);
}
void ds18b20_write(unsigned char dat)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
dat >>= 1;
delay(6);
DQ = 1;
delay(2);
}
}
unsigned char ds18b20_read()
{
unsigned char i, dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0;
_nop_();
DQ = 1;
_nop_();
dat >>= 1;
if(DQ)
{
dat |= 0x80;
}
delay(6);
DQ = 1;
delay(2);
}
return dat;
}
void ds18b20_get_temperature()
{
unsigned int t;
t = temperature[1];
t <<= 8;
t |= temperature[0];
t >>= 4;
temperature[0] = t % 10 + 0x30;
temperature[1] = t / 10 % 10 + 0x30;
}
void alarm()
{
P1 = 0xff; // 点亮LED灯或者发出蜂鸣器声音
delay(5000); // 等待5秒
P1 = 0x00; // 熄灭LED灯或者关闭蜂鸣器
}
```
以上是单片机AT89C52芯片的温度报警器设计程序报告,程序中需要根据实际情况进行修改和优化。
阅读全文