课程设计 基于51单片机的智能温度烟雾红外报警器(温度,烟雾,红外)原理图 PCB 仿真 源代码及proteus 软件
系统采用单片机为核心硬件平台,传感器选用热释电红外模块。系统能自动探测人员出入,火灾异常,并及时做出声光报警。
温度过高、烟雾过限、红外有信号,启动报警
LED指示报警类型
#include "reg51.h"
#include "lcd1602.h"
#include"Ds18b20.h"
#include "ADC0832.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^3;//按钮
sbit k2=P3^4;
sbit k3=P3^5;
sbit k4=P3^6;
sbit led3=P2^3;//led
sbit led1=P2^4;
sbit led2=P2^5;
sbit beep=P2^6;//蜂鸣器
sbit in=P3^7;//红外
uchar time=0,mode=0;//系统变量
uint wendu=0,lim1=60;//温度
uchar yan=0,lim2=80;
uchar disp1[]="T:00.0C Lim:00C";//显示
uchar disp2[]="Yan:00% Lim:00% ";
//延时
void delay(uint i)
{
while(i--);
}
void main() //主函数
{
init_1602();
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
if(!k1)//温度加
{
delay(1000);
if(!k1)
{
if(lim1<99)
lim1++;
while(!k1);
}
}
if(!k2)//温度减
{
delay(1000);
if(!k2)
{
if(lim1>0)
lim1--;
while(!k2);
}
}
if(!k3)//烟雾加
{
delay(1000);
if(!k3)
{
if(lim2<99)
lim2++;
while(!k3);
}
}
if(!k4)//烟雾减
{
delay(1000);
if(!k4)
{
if(lim2>0)
lim2--;
while(!k4);
}
}
}
}
//定时器中断
void Timer0() interrupt 1
{
uint i;
if(time<10)//0.5s
time++;
else
{
time=0;
Ds18b20ReadTemp();//测温
wendu=ds18b20_temp*10;
i=ADC0832(0);//测量烟雾
yan=i*99/255;
//显示
disp1[2]=wendu/100+0x30;
disp1[3]=wendu%100/10+0x30;
disp1[5]=wendu%10+0x30;
disp1[12]=lim1/10+0x30;
disp1[13]=lim1%10+0x30;
write_string(1,0,disp1);
disp2[4]=yan%100/10+0x30;
disp2[5]=yan%10+0x30;
disp2[12]=lim2/10+0x30;
disp2[13]=lim2%10+0x30;
write_string(2,0,disp2);
//报警
if(wendu>lim1*10)
led1=0;
else
led1=1;
if(yan>lim2)
led2=0;
else
led2=1;
led3=in;//红外
if(!led1 || !led2 || !led3)
beep=0;
else
beep=1;
}
TH0=0X3C;
TL0=0XB0;
}