目录
一、主要功能
1、LCD1602液晶显示检测到的烟雾值、温度值
2、通过按键设置烟雾的下限值和温度的上下限值
3、按键一键警报或取消
4、当超过设定的范围,LED警报灯闪烁
5、当满足烟雾、温度异常,继电器吸合控制电机转动
二、使用步骤
51单片机温度烟雾控制系统是一种集成了温度监测和烟雾检测功能的智能报警系统,主要用于火灾预警和环境监控。该系统以51系列单片机(如STC89C51/52或AT89C51)为核心控制器,结合DS18B20温度传感器和烟雾传感器,实现对环境参数的实时监测和报警控制。
三、硬件资源
1、51单片机核心模块
2、按键模块
3、温度传感器、MQ烟雾传感器模块
4、蜂鸣器模块
5、继电器模块
6、LCD1602显示模块
四、软件设计
#include <reg52.h>
#include <intrins.h>
#include <key.h>
#include "DS18B20.h"
#define uint unsigned int
#define uchar unsigned char //宏定义
#define BEEP P3_4 //定义蜂鸣器
#define hujiao P1_3
sbit BEEP=P3^4;
sbit hujiao=P1^3;
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
sbit led_h=P1^4;
sbit led_l=P1^5;
sbit JDQ=P2^0;
sbit ADCS = P3^7;
sbit ADCLK = P3^5;
sbit ADDI = P3^6;
sbit ADDO = P3^6;
bit shanshuo_st; //闪烁间隔标志
bit beep_st; //蜂鸣器间隔标志
bit flag=0;//紧急呼叫标志
sbit DIAN = P2^5; //小数点
uint abc;
uchar x=4; //计数器
signed char m; //温度值全局变量
uchar n; //温度值全局变量
uchar data disdata[5];
uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00}; // 摄氏温度符号
/*****初始化定时器0*****/
void InitTimer(void)
{
TMOD=0x1;
TH0=0x4c;
TL0=0x00; //50ms(晶振11.0592M)
}
/*****定时器0中断服务程序*****/
void timer0(void) interrupt 1
{
TH0=0x4c;
TL0=0x00;
x++;
}
/*****读取温度*****/
void check_wendu(void)
{
uint a,b,c;
c=ReadTemperature(); //获取温度值并减去DS18B20的温漂误差
a=c/100; //计算得到十位数字
b=c/10-a*10; //计算得到个位数字
m=c/10; //计算得到整数位
n=c-a*100-b*10; //计算得到小数位
if(m<0){m=0;n=0;} //设置温度显示上限
if(m>99){m=99;n=9;} //设置温度显示上限
}
/*************************lcd1602程序**************************/
void delay1ms(uint ms)//延时1毫秒(不够精确的)
{ uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
/*****主函数*****/
void main(void)
{
InitTimer(); //初始化定时器
EA=1; //全局中断开关
TR0=1;
ET0=1; //开启定时器0
BEEP=0;
led_h=1;
led_l=1;
JDQ=1;
check_wendu();
check_wendu();
lcd_init();//初始化显示
delay1ms(100);
lcd_init();//初始化显示
delay1ms(100);
while(1)
{
if(hujiao==0)
{
Delay(2000);
while(hujiao==0);
flag=~flag;
}
check_wendu();
checkkey();
abc = ADC0832(0,0); //差分模式,CH0-CH1
abc = abc*9/255; //转换为实际电压便于显示
disp();
baojing();
if(flag==1)
{
Alarm1();
JDQ=0;
}
else
Alarm(); //报警检测
if(set_st==0)
wr_com(0x0c);
if(set_st==1)
{
wr_com(0xc6);
wr_com(0x0d);
delay1ms(150);
wr_com(0x0c);
}
if(set_st==2)
{
wr_com(0xca);
wr_com(0x0d);
delay1ms(150);
wr_com(0x0c);
}
if(set_st==3)
{
wr_com(0xcd);
wr_com(0x0d);
delay1ms(150);
wr_com(0x0c);
}
}
}/*****END*****/
五、实验现象
演示视频: