logo资料库

基于DS18B20温度传感器和MQ2烟雾传感器的火灾报警器设计.pdf

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
温度传感器和MQ2烟雾传感器的火灾报警器设计 基于基于DS18B20温度传感器和 烟雾传感器的火灾报警器设计 一、概述火灾自动报警系统(Fire Alarm System,简称FAS系统)是人们为了早期发现通报火灾,并及时采取 有效措施,控制和扑灭火灾,而设置在建筑物中或其它场所的一种自动消防设施,是人们同火灾作斗争的有力 工具。【1】本设计中以温度探头和作为的传感装置,并以LED和蜂鸣器作为示警装置。二、功能●高温检测。 传感器选用,当环境温度大于40℃,高温报警指示灯亮,LCD1602行显示温度。●环境烟雾浓度检测。传感器选 用MQ2烟雾传感器,AD0809作模数转换传烟雾浓度数据给单片机。当环境烟雾浓度大于50时,烟雾浓度指示灯 亮,LCD1602第二行显示烟雾浓度。当温度和烟雾浓度同时过高时,蜂鸣器发出 一、概述 火灾自动报警系统(Fire Alarm System,简称FAS系统)是人们为了早期发现通报火灾,并及时采取有效措施,控制和扑灭 火灾,而设置在建筑物中或其它场所的一种自动消防设施,是人们同火灾作斗争的有力工具。【1】 本设计中以温度探头和作为的传感装置,并以LED和蜂鸣器作为示警装置。 二、功能 ●高温检测。传感器选用,当环境温度大于40℃,高温报警指示灯亮,LCD1602行显示温度。 ●环境烟雾浓度检测。传感器选用MQ2烟雾传感器,AD0809作模数转换传烟雾浓度数据给单片机。当环境烟雾浓度大于50 时,烟雾浓度指示灯亮,LCD1602第二行显示烟雾浓度。 当温度和烟雾浓度同时过高时,蜂鸣器发出报警声音。 三、硬件设计 :DS18B20 烟雾传感器:MQ2。MQ2输出的模拟电压信号,使用ADC0809作模数转换后输入单片机。 四、程序设计
部分程序段: ○LCD1602显示部分程序 #define LCD_DATA P0 //lcd1602的引脚 sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2; void LCD_Init(void) { Delay20ms(); LCD_WriteCmd(0x38); //8位机接口、双行显示、5×7字符点阵; LCD_WriteCmd(0x0c); //显示开启、光标不显示也不闪烁; LCD_WriteCmd(0x01); //清屏; LCD_WriteCmd(0x06); //光标右移一位、整屏不移动; LCD_Goto(0,0); } void LCD_WriteDat(unsigned char lcd_dat) { unsigned char tmp; tmp = LCD_ReadStatus(); //读状态; while((tmp & 0x80)) //是否忙 ? { tmp = LCD_ReadStatus();
} LCD_RS = 1; LCD_RW = 0; LCD_DATA = lcd_dat; _nop_(); LCD_EN = 0; _nop_(); _nop_(); LCD_EN = 1; } void LCD_WriteCmd(unsigned char lcd_cmd) { unsigned char tmp; tmp = LCD_ReadStatus(); while((tmp & 0x80)) { tmp = LCD_ReadStatus(); } LCD_RS = 0; LCD_RW = 0; LCD_DATA = lcd_cmd; _nop_(); LCD_EN = 0; _nop_(); _nop_(); LCD_EN = 1; } unsigned char LCD_ReadStatus(void) { unsigned char tmp; #if 0 LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; tmp = LCD_DATA; LCD_EN = 0; #endif
LCD_DATA = 0xff; LCD_RS = 0; LCD_RW = 1; LCD_EN = 0; _nop_(); _nop_(); LCD_EN = 1; tmp = LCD_DATA; return tmp; } void LCD_Goto(unsigned char x,unsigned char y) { unsigned char tmp; if(y) //若是第二行; { tmp = 0xc0 + x; LCD_WriteCmd(tmp); } else { tmp = 0x80 + x; LCD_WriteCmd(tmp); } } void LCD_Display(unsigned char row,unsigned char *str) { if(row) { LCD_Goto(0,1); } else { LCD_Goto(0,0); } while(*str != '\0') { LCD_WriteDat(*str++);
} } ○ADC0809部分程序 //AD0809的IO口以及变量定义 sbit OE=P2^7; sbit EOC=P2^6; sbit START=P3^0; void AD0809()//0809转换数据 { START=0;_nop_(); START=1;_nop_(); START=0;_nop_(); while(EOC==0); OE=1;_nop_(); density=P1;_nop_(); OE=0; } ○DS18B20部分程序 sbit DQ=P2^3; //DS18B20数据端 //2、DS18B2模块 void delay_18B20(unsigned int i) { while(i--); } //ds18b20初始化函数 void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(2); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(60); //延时 大于 480us DQ = 1; //拉高总线 delay_18B20(2); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(15); }
//ds18b20读一个字节 unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat |=0x80; delay_18B20(4); } return(dat); } //ds18b20写一个字节 void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18B20(2); DQ = 1; dat>>=1; } } 五、仿真图
图3 火灾报警器仿真图
分享到:
收藏