一、设计简介:
本设计是基于51单片机温度烟雾GSM短信火灾报警器系统设计,主要实现以下功能:
1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机
2.实时显示当前的烟雾值和温度值
3.温度和烟雾的报警值可以通过按键设定
4.当前温度值超过上限时,红灯亮,蜂鸣器响。
5.当前烟雾值超过上限时,黄灯亮,蜂鸣器响。
6.当烟雾或可燃气体浓度超过报警值时启动A继电器,A继电器带动风扇转动模拟排烟。
7. 当温度和烟雾都超过报警值时启动B继电器,B继电器带动水泵,模拟洒水。
8.温度或烟雾超标时GSM模块会发送短信到手机。
主要硬件组成:
51单片机+LCD1602液晶显示、DS18B20温度传感器、MQ-2烟雾传感器或MQ-5可燃气体传感器、ADC0832模数转换芯片和GSM模块
二、原理图
三、PCB图
四、Proteus仿真
五、程序源码
部分代码:
#include <reg52.h>
#include "xiugai.h" //在这里面改其他不用改了
#include <intrins.h> //包含头文件
#include <display.h> //显示函数
#include "uart.c"
#include "gsm.h"
#define uint unsigned int
#define uchar unsigned char //宏定义
#include "eeprom52.h"
/*******************************定义全局变量********************************/
unsigned char dat = 0x00; //AD值
unsigned char count = 0x00; //定时器计数
unsigned char CH; //通道变量
unsigned char dis[4]; //显示数值
unsigned int sum=0; //平均值计算时的总数
unsigned char m=0;
signed char w; //温度值全局变量
uint c; //温度值全局变量
uchar temp;
uchar yushe_wendu; //报警温度值
uchar yushe_yanwu; //烟雾报警值
uchar flag_fasong[3]; //0是温度1是浓度2是都超标
//按钮模式|
uchar Mode=0;
//函数声明
extern void Key();
/******************把数据保存到单片机内部eeprom中******************/
void write_eeprom()
{
SectorErase(0x2000);
byte_write(0x2000, yushe_wendu);
byte_write(0x2001, yushe_yanwu);
byte_write(0x2002, dianhuahaoma[0]);
byte_write(0x2003, dianhuahaoma[1]);
byte_write(0x2004, dianhuahaoma[2]);
byte_write(0x2005, dianhuahaoma[3]);
byte_write(0x2006, dianhuahaoma[4]);
byte_write(0x2007, dianhuahaoma[5]);
byte_write(0x2008, dianhuahaoma[6]);
byte_write(0x2009, dianhuahaoma[7]);
byte_write(0x200a, dianhuahaoma[8]);
byte_write(0x200b, dianhuahaoma[9]);
byte_write(0x200c, dianhuahaoma[10]);
byte_write(0x2060, a_a);
}
/******************把数据从单片机内部eeprom中读出来*****************/
void read_eeprom()
{
yushe_wendu = byte_read(0x2000);
yushe_yanwu = byte_read(0x2001);
dianhuahaoma[0]=byte_read(0x2002);
dianhuahaoma[1]=byte_read(0x2003);
dianhuahaoma[2]=byte_read(0x2004);
dianhuahaoma[3]=byte_read(0x2005);
dianhuahaoma[4]=byte_read(0x2006);
dianhuahaoma[5]=byte_read(0x2007);
dianhuahaoma[6]=byte_read(0x2008);
dianhuahaoma[7]=byte_read(0x2009);
dianhuahaoma[8]=byte_read(0x200a);
dianhuahaoma[9]=byte_read(0x200b);
dianhuahaoma[10]=byte_read(0x200c);
a_a = byte_read(0x2060);
}
/**************开机自检eeprom初始化*****************/
void init_eeprom()
{
read_eeprom(); //先读
if(a_a != 1) //新的单片机初始单片机内问eeprom
{
yushe_wendu = 50;
yushe_yanwu = 45;
dianhuahaoma[0]=0;
dianhuahaoma[1]=0;
dianhuahaoma[2]=0;
dianhuahaoma[3]=0;
dianhuahaoma[4]=0;
dianhuahaoma[5]=0;
dianhuahaoma[6]=0;
dianhuahaoma[7]=0;
dianhuahaoma[8]=0;
dianhuahaoma[9]=0;
dianhuahaoma[10]=0;
a_a = 1;
write_eeprom(); //保存数据
}
}
/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
unsigned char i,test,adval;
adval = 0x00;
test = 0x00;
Clk = 0; //初始化
DATI = 1;
_nop_();
CS = 0;
_nop_();
Clk = 1;
_nop_();
if ( CH == 0x00 ) //通道选择
{
Clk = 0;
DATI = 1; //通道0的第一位
_nop_();
Clk = 1;
_nop_();
Clk = 0;
DATI = 0; //通道0的第二位
_nop_();
Clk = 1;
_nop_();
}
else
{
Clk = 0;
DATI = 1; //通道1的第一位
_nop_();
Clk = 1;
_nop_();
Clk = 0;
DATI = 1; //通道1的第二位
_nop_();
Clk = 1;
_nop_();
}
Clk = 0;
DATI = 1;
for( i = 0;i < 8;i++ ) //读取前8位的值
{
_nop_();
adval <<= 1;
Clk = 1;
_nop_();
Clk = 0;
if (DATO)
adval |= 0x01;
else
adval |= 0x00;
}
for (i = 0; i < 8; i++) //读取后8位的值
{
test >>= 1;
if (DATO)
test |= 0x80;
else
test |= 0x00;
_nop_();
Clk = 1;
_nop_();
Clk = 0;
}
if (adval == test) //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉
dat = test;
nop_();
CS = 1; //释放ADC0832
DATO = 1;
Clk = 1;
return dat;
}
六、资源获取
本项目包含的所有文件都可以点击下面的名片,发送 “ 61、基于51单片机温度烟雾GSM短信火灾报警器系统设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!