【《基于单片机的火灾安全报警系统设计》11000字】_第1页
【《基于单片机的火灾安全报警系统设计》11000字】_第2页
【《基于单片机的火灾安全报警系统设计》11000字】_第3页
【《基于单片机的火灾安全报警系统设计》11000字】_第4页
【《基于单片机的火灾安全报警系统设计》11000字】_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图3.3复位电路所示。图3.3复位电路图3.4显示模块电路设计1602采用标准的16脚接口,其中:第1脚:VSS为电源地:第2脚:VDD接5V电源正极;第3脚:VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度):第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器:第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作;第6脚:E(或EN)端为使能(enable)端.第7~14脚:D0~D7为8位双向数据端;第15~16脚:空脚或背灯电源;15脚背光正极;16脚背光负极.图3.4液晶LCD1602仿真电路图LCD1602中有80个字节用于显示数据的存储器,显示字符时,需将ASCII码转换成十六进制写入存储器DDRAM中,LCD上就会显示出其对应的字符,当然屏幕中显示的字符位置是与RAM对应的,00H~0FH地址区域是LCD显示出的第一行,40H~4FH区域是LCD显示的第二行,10H~27H和50H~67H这两个地址区域范围属于隐藏区域,若将数据写入其中,LCD将不会显示图3.5LCD1602电路图3.5温度传感器模块DS18B20是一种单总线式数字温度传感器.该系统结构简单,成本较低,体积小[11],不需外接元件,可实现单端口通信;片内ROM包含64位的唯一序列号,可多点组网使用;抗干扰能力强,扩展方便.本文论述了DS18B20的工作原理.利用单片机,开发了基于DS18B20的分布式温度探测节点.采样率在100S/ps~200S/ps之间可调,采样精度为12bit,温度探测范围为-55℃~+125℃,温度精度0.062[12]。图3.6温度传感器仿真电路图3.6报警模块设计报警任务由蜂鸣器完成,当温度超过警戒值或着烟雾传感器受到烟雾的影响时,蜂鸣器发声示警。此电路由三极管,电阻,蜂鸣器,电源组成,提供一个低电平给三极管的基极,导通三极管,蜂鸣器发声。其电路图如图3.9所示。图3.7蜂鸣器报警电路图4系统软件设计4.1主程序流程图火灾报警系统需要实现温度测量、实时显示温度数据、烟雾传感预警、自动报警等功能。程序开始先对控制电路、传感器、LCD1602、报警值等模块进行初始化,按下复位键对报警器进行复位、当传感器收到温度或者烟雾的影响,传感器将信号传给控制电路,控制电路将信号传给报警系统,报警器进行主设计流程如图4.1所示。是是是是图4.1主程序设计流程图4.2硬件模块流程图火灾报警系统的处理器采用51系列的单片机,由单片机控制整个系统。当传感器检测到非电量信号,输出电量信号,通过A/D转换器转成数字量信号,送入控制器进行处理。经火灾探测算法分析后自动输出相应的存储、显示和声光报警信号,若数据采集值超出设置额定值将会发出声光报警以及联动消防系统,否则将继续检测。硬件模块设计流程图如4.2所示。图4.2心率模块设计流程图4.3报警模块流程图要实现火灾报警器的功能,程序控制是必不可少的。AT89S52作为主控芯片,主要对IO端口、驱动A/D转换、逻辑判断等进行控制,在软件设计中采用模块化程序设计的方法,程序结构清晰,各个模块的功能由子程序的调用实现,这样既便于系统维护,又可以进行进一步的功能扩展。系统初始化开始进入工作状态,MQ-2型烟雾传感器正常工作时要先预热,同时,可以通过检测传感器两端电压等方式进行接触不良、断线等的故障检测,对采样数据进行.A/D转换,通过滤波子程序送入单片机处理,如果超过报警限,就会产生中断,转入报警子程序,同时会有烟雾浓度显示及知识等提示。如图4.3所示。图4.3报警模块流程图

5系统测试5.1程序调试在KeilμVision5软件中对程序进行编译,若编译过程中出现error时,需要按照提示信息找出错误代码的地并加以修改方,直至整个编译过程没有error和Warning,将其生成可读的HEX文件。再通过Proteus软件进行仿真,按各个模块画出仿真图,将已生成的HEX文件烧录至仿真单片机里,观察仿真运行是否正常。5.2调试结果这个阶段我们要做的工作就是寄存器的初始化、各个输入输出情况的设置等。我们首先要设置定时器的工作方法。其次、打开系统中断为了便于响应中断定时,及时采集到气体浓度和温度的信息。然后关闭蜂鸣器,开启绿灯,设置报警限初值。图5.2PCB图5.3系统数据分析系统对温度和烟雾进行了两次数据采集与判断,每次信号采集后根据得到的数据与设定的阈值比较,当温度≥57℃,温度异常,置寄存器变量a为1,否则为0;当烟雾浓度≥3.2%,烟雾浓度异常,置寄存器变量b为1,否则为0。综合两次温度烟雾信号的采集,根据温度和烟雾的寄存器变量a和b的状态,判断现场情况:2个寄存器变量均为0,表示情况正常;2个中仅有1个为1,表示情况异常:2个均为1,表示有火灾发生。系统对现场进行报警判断后,间隔20s后(通过系统的延时程序实现),再一次采集现场的温度烟雾信号进行判断,即每一次语音报警持续20s,直到系统做出下一次判断结果。图5.3.1蜂鸣器不报警时脉冲频率图5.3.2实物图图5.3.3蜂鸣器报警时脉冲频率图5.3.4实物图LCD液晶屏显示数据与DS18B20传感器输出数据显示一致,符合设计要求,如图5.3.5,图5.3.6所示。图5.3.5传感器温度图5.3.6温度显示数据

6结论火灾报警器可保障生产与生活的安全,避免火灾和爆炸事故以及煤气中毒的发生,它是防火、防爆和安全生产所必备的仪器,具有广阔的市场空间与发展前景。本论文是在对烟雾、温度传感器和报警技术进行深入研究的基础上,全面比较国内外同类产品的技术特点,合理地确定系统的设计方案,并对仪器的整体设计和各个组成部分进行了详细的分析和设计。本次毕业设计经过努力,整个系统实现了预期的目标。本系统通过设计一个以AT89S51单片机为核心的火灾报警器可以实现语音报警、温度浓度显示、报警限设置、延时报警等功能。是一种结构简单、性能稳定、使用方便、价格低廉、智能化的火灾报警器,具有一定的实用价值。本报警器电路结构简单、可维护性好。由于实现了对普通环境中烟雾浓度和温度的实时监控,因此具有非常普遍的意义,能广泛应用于居民家庭、企事业单位等多方面的安全防范。但是也存在不少的不足。由于电源的波动,传感器的电气特性等问题,使得A/D转换结果有时波动很大,这样就可能出现误报警。由于时间的关系,系统中本应具有的串行通信的功能没有实现,而只是实现了烟雾浓度、温度显示。由于上述缺点的存在,此系统不是很完善,还有待进一步改进。

参考文献[1]马欣如.基于单片机的火灾报警系统设计[J].科技创新与应用,2021,11(28):103-105.[2]王泽斌,黄佐华.火灾报警系统的发展与探讨[J].科协论坛(下半月),2012,(08):106-108.[3]步亚昆,郭俊美,刘海英.基于51单片机的智能火灾报警系统的设计与实现[J].齐鲁工业大学学报,2021,35(04):53-58.[4]邱小川.火灾报警系统国内外现状综述[D].电子科技大学,2021.[5]步亚昆,郭俊美,刘海英.基于51单片机的智能火灾报警系统的设计与实现[J].齐鲁工业大学学报,2021,35(04):53-58.[6]李圣斐.基于单片机的智能火灾报警系统研究——以住宅楼为例[J].赤子(下旬),2016(12):107.[7]孙小春.基于单片机的无线火灾报警系统研究[J].海南大学学报(自然科学版),2013,31(03):254-256.[8]祁卫.火灾报警系统的设计与应用[D].华中科技大学,2011.[9]袁晓溪.基于单片机的LED显示系统[D].吉林大学,2015.[10]崔谦.迎接LCD普及时代[N].中国计算机报,2001-04-30(D16).[11]周琛晖,冯少怀.基于DS18B20的温度测量系统[C]//第三届全国软件测试会议与移动计算、栅格、智能化高级论坛论文集.,2009:226-228.[12]李显宝,何鹏.基于DS18B20的分布式温度探测节点[C]//2010中国仪器仪表与测控技术大会论文集.,2010:80-83.[13]单片机原理与应用[M].王浩全,李晋华,张敏娟,李文强,编著.人民邮电出版社.2013.[14]单片机原理及接口技术[M].李朝青,刘艳玲,编著.北京航空航天大学出版社.2013.[15]韩倩倩.基于LoRa的文物建筑无线火灾报警系统研究[J].消防科学与技术,2020,25(7):18-22.[16]张响亮.智能建筑火灾自动自动报警系统的设计与研究[D].武汉:武汉理工大学,2017.[17]刘速.博物馆内火灾烟雾报警器设计[J].现代电子技术,2017,40(23):104-108.[18]张仲明,郭东伟,吕巍,等.基于DS18B20温度传感器的温度测量系统设计[J].2018,35(5):76-79,88.[19]朱英龙.基于MCS-51的家庭安防系统的设计与实现[J].环球市场信息导报,2014,(26):129.[20]王娜,时磊.一种智能火灾报警系统的设计[J].南方农机,2019,50(23):217-219.[21]缪顺兵,熊光明,李永萍.自动火灾报警系统设计与研究[J].装备制造技术,2006,(4):90-92.[22]王雨婷,张朝龙,俞敏.烟雾煤气安全报警器的设计[J].电气应用,2019,(A1):119-123.[23]杨建.基于嵌入式的高精度温度传感系统设计[J].现代电子技术,2018,41(14):44-47.

附录#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include"intrins.h" #defineu8 unsignedchar#defineu16 unsignedint#defineuchar unsignedchar#defineuint unsignedintucharyushe_wendu=50; //温度预设值ucharyushe_yanwu=100; //烟雾预设值uintwendu; //温度值全局变量ucharyanwu; //用于读取ADC数据//运行模式ucharMode=0; //=1是设置温度阀值=2是设置烟雾阀值 =0是正常监控模式//管脚声明sbitLed_Reg =P2^2; //红灯sbitLed_Yellow=P2^4; //黄灯sbitBuzzer =P2^0; //蜂鸣器/*********************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无***********************************************************************/voiddelay_ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<110;j++);}/***********************************************************************************************************LCD1602相关函数***********************************************************************************************************///LCD管脚声明(RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)sbitLCDRS=P2^7;sbitLCDEN=P2^6;sbitD0 =P0^0;sbitD1 =P0^1;sbitD2 =P0^2;sbitD3 =P0^3;sbitD4 =P0^4;sbitD5 =P0^5;sbitD6 =P0^6;sbitD7 =P0^7;//LCD延时voidLCDdelay(uintz) //该延时大约100us(不精确,液晶操作的延时不要求很精确){uintx,y;for(x=z;x>0;x--)for(y=10;y>0;y--);}voidLCD_WriteData(u8dat) { if(dat&0x01)D0=1;elseD0=0; if(dat&0x02)D1=1;elseD1=0; if(dat&0x04)D2=1;elseD2=0; if(dat&0x08)D3=1;elseD3=0; if(dat&0x10)D4=1;elseD4=0; if(dat&0x20)D5=1;elseD5=0; if(dat&0x40)D6=1;elseD6=0; if(dat&0x80)D7=1;elseD7=0;}//写命令voidwrite_com(ucharcom){LCDRS=0; LCD_WriteData(com);//DAT=com;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;}//写数据voidwrite_data(uchardate){LCDRS=1; LCD_WriteData(date);//DAT=date;LCDdelay(5);LCDEN=1;LCDdelay(5);LCDEN=0;}/*选择写入位置*/voidSelectPosition(unsignedcharx,unsignedchary){ if(x==0) { write_com(0x80+y);//表示第一行 } else { write_com(0xC0+y);//表示第二行 }}/*写入字符串函数*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){ SelectPosition(x,y); while(*s) { write_data(*s); s++; }}//========================================================================//函数:voidLCD_Write_Char(u8x,u8y,u16s,u8l)//应用:LCD_Write_Char(0,1,366,4);//描述:在第0行第一个字节位置显示366的后4位,显示结果为0366//参数:x:行,y:列,s:要显示的字,l:显示的位数//返回:none.//版本:VER1.0//日期:2013-4-1//备注:最大显示65535//========================================================================voidLCD_Write_Char(u8x,u8y,u16s,u8l){ SelectPosition(x,y); if(l>=5) write_data(0x30+s/10000%10); //万位 if(l>=4) write_data(0x30+s/1000%10); //千位 if(l>=3) write_data(0x30+s/100%10); //百位 if(l>=2) write_data(0x30+s/10%10); //十位 if(l>=1) write_data(0x30+s%10); //个位}/*1602指令简介write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示无光标无光标闪烁write_com(0x0d);//打开显示阴影闪烁write_com(0x0d);//打开显示阴影闪烁*///1602初始化voidInit1602(){uchari=0;write_com(0x38);//屏幕初始化write_com(0x0c);//打开显示无光标无光标闪烁write_com(0x06);//当读或写一个字符是指针后一一位write_com(0x01);//清屏 }voidDisplay_1602(yushe_wendu,yushe_yanwu,c,temp){ //显示预设温度 LCD_Write_Char(0,6,yushe_wendu,2); //显示预设烟雾 LCD_Write_Char(0,13,yushe_yanwu,3); //时时温度 LCD_Write_Char(1,6,c/10,2); write_data('.'); LCD_Write_Char(1,9,c%10,1); //时时烟雾 LCD_Write_Char(1,13,temp,3);}/***********************************************************************************************************ADC0832相关函数***********************************************************************************************************/sbitADCS =P1^5;//ADC0832片选sbitADCLK=P1^2;//ADC0832时钟sbitADDI =P1^3;//ADC0832数据输入 /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,sbitADDO =P1^3;//ADC0832数据输出 /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上//========================================================================//函数:unsignedintAdc0832(unsignedcharchannel)//应用: temp=Adc0832(0);//描述:读取0通道的AD值//参数:channel:通道0和通道1选择//返回:选取通道的AD值//版本:VER1.0//日期:2015-05-29//备注://========================================================================unsignedintAdc0832(unsignedcharchannel){ uchari=0; ucharj; uintdat=0; ucharndat=0; ucharVot=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) { dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1; if(i==7)dat|=ADDO; } for(i=0;i<8;i++) { j=0; j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; } ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端 ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat; return(dat);//returnaddata}/***********************************************************************************************************DS18B20相关函数***********************************************************************************************************/sbitDQ=P1^0; //ds18b20的数据引脚/*****延时子程序:该延时主要用于ds18b20延时*****/voidDelay_DS18B20(intnum){while(num--);}/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ复位Delay_DS18B20(8);//稍做延时DQ=0;//单片机将DQ拉低Delay_DS18B20(80);//精确延时,大于480usDQ=1;//拉高总线Delay_DS18B20(14);x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);}/*****读一个字节*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****写一个字节*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay_DS18B20(5);DQ=1;dat>>=1;}}/*****读取温度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器a=ReadOneChar();//读低8位b=ReadOneChar();//读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;//放大10倍输出并四舍五入return(t);}//=====================================================================================//=====================================================================================//=====================================================================================/*****校准温度*****/u16check_wendu(void){ u16c; c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 if(c<1)c=0; if(c>=999)c=999; returnc;}/***********************************************************************************************************按键检测相关函数***********************************************************************************************************///按键sbitKey1=P1^6; //设置键sbitKey2=P1^7; //加按键sbitKey3=P3^2; //减按键#defineKEY_SET 1 //设置#defineKEY_ADD 2 //加#defineKEY_MINUS 3 //减//========================================================================//函数:u8Key_Scan()//应用:temp=u8Key_Scan();//描述:按键扫描并返回按下的键值//参数:NONE//返回:按下的键值//版本:VER1.0//日期:2015-05-29//备注:该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下//========================================================================u8Key_Scan(){ staticu8key_up=1;//按键按松开标志 if(key_up&&(Key1==0||Key2==0||Key3==0)) { delay_ms(10);//去抖动 key_up=0; if(Key1==0) return1; elseif(Key2==0)return2; elseif(Key3==0)return3; } elseif(Key1==1&&Key2==1&&Key3==1) key_up=1; return0;//无按键按下}voidmain(void){ u8key; wendu=check_wendu(); //初始化时调用温度读取函数防止开机85°C Init1602(); //调用初始化显示函数 LCD_Write_String(0,0,"SETT:00E:000");//开机界面 LCD_Write_String(1,0,"NOWT:00.0E:000"); delay_ms(1000); wendu=check_wendu(); //初始化时调用温度读取函数防止开机85°C while(1) //主循环 { key=Key_Scan(); //按键扫描 yanwu=Adc0832(0); //读取烟雾值 wendu=check_wendu(); //读取温度值 if(key==KEY_SET) { Mode++; } switch(Mode) //判断模式的值 { case0: //监控模式 { Display_1602(yushe_wendu,yushe_yanwu,wendu,yanwu);//显示预设温度,预设烟雾,温度值,烟雾值 if(yanwu>=yushe_yanwu) //烟雾值大于等于预设值时 { Led_Reg=0; //烟雾指示灯亮 Buzzer=0; //蜂鸣器报警 } else //烟雾值小于预设值时 { Led_Reg=1; //关掉报警灯 } if(wendu>=(yushe_wendu*10)) //温度大于等于预设温度值时(为什么是大于预设值*10:因为我们要显示的温度是有小数点后一位,是一个3位数,25.9°C时实际读的数是259,所以判断预设值时将预设值*10) { Buzzer=0; //打开蜂鸣器报警 Led_Yellow=0; //打开温度报警灯 } else //温度值小于预设值时 { Led_Yellow=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论