C语言编程的智能火灾报警监测系统
【《基于单片机智能火灾报警系统设计与实现(论文)》9600字】

基于单片机智能火灾报警系统设计与实现目录第1章绪论 (1)1.1 研究背景与意义 (1)1.2 国内外研究现状及发展趋势 (1)1.3 本文的研究内容 (2)第2章智能家居安防报警系统的总体设计 (3)2.1 系统的整体设计方案与设计 (3)2.1.1 系统总体设计要求 (3)2.1.2 整体设计方案框图 (3)2.2 设计难点及创新 (3)第3章智能火灾报警系统的设计原理与实现 (4)3.1 智能火灾报警系统下位机框图 (4)3.2 硬件电路设计 (4)3.2.1 核心控制芯片 (4)3.2.2 防火报警模块设计 (5)3.2.3 显示屏模块 (7)第4章系统软件设计 (8)4.1 软件开发工具 (8)4.2 系统程序代码设计 (8)4.3 烟雾传感器报警模块设计 (9)4.3.1 烟雾检测模块硬件设计 (9)4.3.2 MQ-2烟雾传感器软件设计 (11)第5章系统测试与误差分析 (12)5.1 系统测试 (12)5.2 误差分析 (13)总结与展望 (15)参考文献 (16)第1章绪论1.1研究背景与意义目前,智能家庭已经渗透到了生活的方方面面,如空调、电热水器、电冰箱等,不但提升了人们的生活质量,同时也为家居产品的设计思想提供了新的思路。
所以,在未来的社会发展中,智能家庭必将成为一种新的、有前途的发展趋势。
火灾是当前危害最大、危害最大、危害最大的灾害,一旦发生火灾,人们往往会束手无策,只有等待消防队的及时赶到才能将其扑灭。
在此期间,极有可能出现危及人民生命和财产安全的意外事件,其破坏程度远远超过了地震。
随着火灾的发生,人们越来越认识到防火工作的重要性和必要性。
如何及早地发现和采取有效的防范措施是非常必要的,因此,寻找一种能够有效地探测和防止火灾的方法和装置是非常必要的。
通过对周边环境的快速探测和预警,可以使人们在第一时间作出相应的应对,使其达到最大程度的减少,所以消防预警系统的设计与研制对于保障居民的日常生活非常重要。
C语言中的智能安防与智能监控系统

C语言中的智能安防与智能监控系统
智能安防与智能监控系统在C语言中的实现方式非常重要,可以帮助我们实现对安全的有效监控和管理。
在C语言中,我们可以利用各种传感器和摄像头来获取各种数据,然后通过编程实现智能识别和处理。
首先,我们可以通过C语言编程来实现基本的智能安防功能,如门禁系统、烟雾报警器、温度监测等。
通过各种传感器和模块,我们可以获取环境数据,然后利用C语言编程实现相应的逻辑判断和控制。
比如,当检测到有人靠近门口时,我们可以通过C语言控制门禁系统开启或关闭,保障安全。
其次,通过C语言编程我们可以实现智能监控系统,利用摄像头和图像处理算法来实现对目标的实时监控和识别。
我们可以通过C语言编写图像处理算法,对摄像头所捕捉到的图像进行分析和识别,如人脸识别、车牌识别等。
这样可以实现对特定目标的有效监控,保障安全。
另外,在C语言中还可以通过网络通信模块实现远程监控和管理。
利用C语言编程,我们可以实现设备与设备之间的数据交换和通信,实现远程监控和管理功能。
比如,可以通过手机App远程查看监控画面,实时掌握安全状态。
总的来说,在C语言中实现智能安防与智能监控系统需要具备一定的编程能力和对硬件的了解。
通过合理的设计和编程,我们可以实现各种智能功能,提高安全性和便利性。
希望以上内容能对您有所帮助。
温度测量、报警系统 C程序

程序名称:DS18B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围0~99.9摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为38℃、默认下限报警温度为5℃报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为0时为关闭下限报警功能编写:最后更新:09/04/16晚于寝室******************************************************************/ #include <AT89X52.h>#include "DS18B20.h"#define uint unsigned int#define uchar unsigned char //宏定义#define SET P3_1 //定义调整键#define DEC P3_2 //定义减少键#define ADD P3_3 //定义增加键#define BEEP P3_7 //定义蜂鸣器bit shanshuo_st; //闪烁间隔标志bit beep_st; //蜂鸣器间隔标志sbit DIAN = P2^7; //小数点uchar x=0; //计数器signed char m; //温度值全局变量uchar n; //温度值全局变量uchar set_st=0; //状态标志signed char shangxian=38; //上限报警温度,默认值为38signed char xiaxian=5; //下限报警温度,默认值为38ucharcode LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x ff};/*****延时子程序*****/void Delay(uint num){while( --num );}/*****初始化定时器0*****/void InitTimer(void){TMOD=0x1;TH0=0x3c;TL0=0xb0; //50ms(晶振12M)}/*****定时器0中断服务程序*****/void timer0(void) interrupt 1{TH0=0x3c;TL0=0xb0;x++;}/*****外部中断0服务程序*****/void int0(void) interrupt 0{EX0=0; //关外部中断0if(DEC==0&&set_st==1){shangxian--;if(shangxian<xiaxian)shangxian=xiaxian; }else if(DEC==0&&set_st==2){xiaxian--;if(xiaxian<0)xiaxian=0;}}/*****外部中断1服务程序*****/void int1(void) interrupt 2{EX1=0; //关外部中断1if(ADD==0&&set_st==1){shangxian++;if(shangxian>99)shangxian=99;}else if(ADD==0&&set_st==2){xiaxian++;if(xiaxian>shangxian)xiaxian=shangxian; }}/*****读取温度*****/void check_wendu(void){uint a,b,c;c=ReadTemperature()-5; //获取温度值并减去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;} //设置温度显示上限}/*****显示开机初始化等待画面*****/Disp_init(){P2 = 0xbf; //显示-P1 = 0xf7;Delay(200);P1 = 0xfb;Delay(200);P1 = 0xfd;Delay(200);P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****显示温度子程序*****/Disp_Temperature() //显示温度{P2 =0xc6; //显示CP1 = 0xf7;Delay(300);P2 =LEDData[n]; //显示个位P1 = 0xfb;Delay(300);P2 =LEDData[m%10]; //显示十位DIAN = 0; //显示小数点P1 = 0xfd;Delay(300);P2 =LEDData[m/10]; //显示百位P1 = 0xfe;Delay(300);P1 = 0xff; //关闭显示}/*****显示报警温度子程序*****/Disp_alarm(uchar baojing){P2 =0xc6; //显示CP1 = 0xf7;Delay(200);P2 =LEDData[baojing%10]; //显示十位P1 = 0xfb;Delay(200);P2 =LEDData[baojing/10]; //显示百位P1 = 0xfd;Delay(200);if(set_st==1)P2 =0x89;else if(set_st==2)P2 =0xc7; //上限H、下限L标示P1 = 0xfe;Delay(200);P1 = 0xff; //关闭显示}/*****报警子程序*****/void Alarm(){if(x>=10){beep_st=~beep_st;x=0;}if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0; else BEEP=1;}/*****主函数*****/void main(void){uint z;InitTimer(); //初始化定时器EA=1; //全局中断开关TR0=1;ET0=1; //开启定时器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z<300;z++){Disp_init();}while(1){if(SET==0){Delay(2000);do{}while(SET==0);set_st++;x=0;shanshuo_st=1;if(set_st>2)set_st=0;}if(set_st==0){EX0=0; //关闭外部中断0EX1=0; //关闭外部中断1check_wendu();Disp_Temperature();Alarm(); //报警检测}else if(set_st==1){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(shangxian);} }else if(set_st==2){BEEP=1; //关闭蜂鸣器EX0=1; //开启外部中断0EX1=1; //开启外部中断1if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st) {Disp_alarm(xiaxian);} }}}/*****END*****/DS18B20.h:#include <AT89X52.h>#define DQ P3_6 //定义DS18B20总线I/O/*****延时子程序*****/void Delay_DS18B20(int num){while(num--) ;}/*****初始化DS18B20*****/void Init_DS18B20(void){unsigned char x=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);}/*****读一个字节*****/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_DS18B20(4);}return(dat);}/*****写一个字节*****/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}}/*****读取温度*****/unsigned int ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=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);}/*****END*****/。
消防主控编程实验报告(3篇)

第1篇一、实验目的1. 掌握消防主控系统的基本原理和组成。
2. 熟悉消防主控编程的基本方法和技巧。
3. 能够根据实际需求设计并实现消防主控程序。
4. 提高编程能力和实际应用能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发工具:Visual Studio 20194. 实验设备:消防主控实验箱、计算机、网络连接三、实验原理消防主控系统是火灾自动报警系统中重要组成部分,其主要功能是实现火灾探测、报警、联动控制等功能。
本实验主要研究消防主控编程,包括以下几个方面:1. 火灾探测器编程:实现火灾探测器的数据采集、处理和传输。
2. 报警器编程:实现火灾报警信号的输出,包括声光报警和短信报警等。
3. 联动控制编程:实现消防设备(如灭火器、喷淋系统等)的自动控制。
四、实验内容1. 火灾探测器编程(1)数据采集:通过模拟传感器接口读取火灾探测器的模拟信号,转换为数字信号。
(2)数据处理:对采集到的数字信号进行滤波、阈值判断等处理,判断是否发生火灾。
(3)数据传输:将处理后的数据通过通信接口发送到消防主控主机。
2. 报警器编程(1)声光报警:当检测到火灾信号时,触发声光报警器,发出声光报警信号。
(2)短信报警:通过短信发送功能,将火灾报警信息发送给相关人员。
3. 联动控制编程(1)灭火器控制:当检测到火灾信号时,自动启动灭火器,进行灭火。
(2)喷淋系统控制:当检测到火灾信号时,自动启动喷淋系统,进行灭火。
五、实验步骤1. 火灾探测器编程(1)搭建实验环境:连接消防主控实验箱和计算机,确保通信接口正常。
(2)编写数据采集程序:使用C/C++语言编写数据采集程序,实现模拟传感器接口的读取。
(3)编写数据处理程序:对采集到的数据进行分析和处理,判断是否发生火灾。
(4)编写数据传输程序:将处理后的数据通过通信接口发送到消防主控主机。
2. 报警器编程(1)编写声光报警程序:使用C/C++语言编写声光报警程序,实现声光报警器的控制。
基于STM32F103C8T6单片机的火灾报警系统的设计与实现

基于STM32F103C8T6单片机的火灾报警系统的设计与实现基于STM32F103C8T6单片机的火灾报警系统的设计与实现电子与信息工程技术的快速发展为日常生活带来了许多便捷,同时也引发了一系列安全隐患。
其中最为危险的一类安全问题就是火灾。
为了及时检测和报警火灾,设计并实现一个可靠而高效的火灾报警系统是至关重要且迫切需要的。
本文将从系统设计和实现的角度,介绍基于STM32F103C8T6单片机的火灾报警系统。
一、系统设计1. 硬件设计火灾报警系统主要由传感器模块、控制模块、报警模块和显示模块四部分组成。
传感器模块:火灾报警系统的传感器模块使用烟雾传感器和温度传感器。
烟雾传感器可以检测烟雾浓度,一旦超过设定阈值,即发出火灾报警信号。
温度传感器可以检测环境温度,一旦超过安全范围,也会触发火灾报警信号。
控制模块:火灾报警系统的控制模块采用STM32F103C8T6单片机作为核心处理器。
通过该单片机,可以实现对传感器模块的数据采集、处理和控制。
在接收到传感器模块发出的火灾报警信号后,控制模块将触发报警模块发出警报。
报警模块:火灾报警系统的报警模块通常采用声光报警器。
当系统检测到火灾时,报警模块会发出巨大声响并同时亮起红灯,提醒人们火灾发生。
显示模块:火灾报警系统的显示模块通常采用液晶显示屏。
通过显示模块,可以实时显示环境温度和烟雾浓度等信息,方便人们了解火灾情况。
2. 软件设计火灾报警系统的软件设计包括嵌入式控制程序和人机界面程序两部分。
嵌入式控制程序:嵌入式控制程序主要运行在STM32F103C8T6单片机上,负责对传感器模块采集到的数据进行处理和控制。
一旦检测到火灾报警信号,嵌入式控制程序将触发报警模块发出警报。
人机界面程序:人机界面程序运行在上位机上,通过串口与STM32F103C8T6单片机进行通信。
人机界面程序可以实时接收并显示传感器模块采集到的数据,同时提供手动控制功能,例如手动触发报警模块。
火灾报警源代码

#include <AT89X52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define WENDU 40sbit deng = P1^1; //发光二极管sbit DQ = P1^2; //温度传送数据IO口sbit guang = P1^3; //光电传感器检测口sbit beep = P1^5; //蜂鸣器sbit anjian = P2^0; //控制按键char done,count,temp,flag,up_flag,down_flag; //uchar temp_value,biaozhi; //温度值uchar TempBuffer[7];uchar LCDyanwu[7];uchar lcdsx[5];sbit sw3=P1^0;sbit sw1=P1^6;sbit sw2=P1^7;uchar num1;uchar yanwu;uchar getdata=55;//检测值uint shangxian=100;//设定上限uint getdate;void kongzhi();//void show_time(); //液晶显示程序/***********1602液晶显示部分子程序****************///Port Definitions********************************************************** sbit LcdRs = P2^3;sbit LcdRw = P2^2;sbit LcdEn = P2^1;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/****************内部等待函数*******************************/unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0;return DBPort;}/**************向lcd写入命令或数据****************/#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************ #define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}//设置输入模式************************************************************ #define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************ void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//液晶字符输入的位置************************void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0')//while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}/***********ds18b20子程序*************************//***********ds18b20延迟子函数(晶振12MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar 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(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01; //取最低位delay_18B20(5);DQ = 1; //上升沿将数据送入dat>>=1;}}/**************读取ds18b20当前温度************/void ReadTemp(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp_value=b<<4; //左移四位,扩大16倍,变为一个字节的高四位temp_value+=(a&0xf0)>>4;//取温度值的地位的高四位,右移四位后与温度的高四位相加得到温度值}void temp_to_str() //温度数据转换成液晶字符显示{TempBuffer[0]=temp_value/10+'0'; //十位TempBuffer[1]=temp_value%10+'0'; //个位TempBuffer[2]='.';TempBuffer[3]='0';TempBuffer[4]=0xdf; //温度符号TempBuffer[5]='C';TempBuffer[6]='\0';}void shangxiang_to_str() //烟雾上限数据转换成液晶字符显示{lcdsx[0]=shangxian/100+'0'; //百位lcdsx[1]=shangxian/10+'0'; //十位lcdsx[2]=shangxian%10+'0'; //个位lcdsx[3]='\0';}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--){for(i=0;i<20;i++) //1ms延时.{;}}}/*************按键模块程序设计*********************/ void key() //按键检测程序{if(sw3==0) //上限设置{if(sw1==0) //上限减功能{if(shangxian>0) shangxian--;else( shangxian=255);}if(sw2==0) //上限加功能{if(shangxian<255) shangxian++;else( shangxian=0);}}}/*************ad转换子程序******************///防止头文件被重复调用#ifndef __TLC549_ADC_H__#define __TLC549_ADC_H__#include<intrins.h> //包含头文件//TLC549管脚定义与开发板硬件对应sbit CLK = P2^5; //时钟sbit DO = P2^4; //数据输出sbit CS = P2^6; //片选//数据定义unsigned int Volt;unsigned char LCDyanwu[7]; //电压数据转化成液晶字符显示unsigned char TLC549_ADC(void); //获得数据void Data_Conversion(void); //电压换算并扩大1000倍void Volt_To_LCDyanwu(void); //数据转化成液晶字符显示//获得数据unsigned char TLC549_ADC(void){unsigned char i, tmp;CS = 1; //CS 置高,片选无效CLK = 0;CS = 0; //CS 置低,片选有效,同时DO 输出最高位_nop_();_nop_(); //适当延迟时间1.4us Setup Timefor(i = 0; i < 8; i++) //串行数据移位输入{tmp <<= 1;tmp |= DO;CLK = 1; //0.4us_nop_(); //CLK transition time Max 0.1usCLK = 0; //0.4us}CS = 1; //CS 置高,片选无效for(i = 17; i != 0; i--) _nop_(); //需要延迟时间17us return (tmp);}//电压换算并扩大1000倍void Data_Conversion(void){unsigned char AD_Data;AD_Data = TLC549_ADC();V olt = 5.0 / 256 * AD_Data * 1000;}//数据转化成液晶字符显示void Volt_To_LCDyanwu(void){Data_Conversion(); //电压换算并扩大1000倍LCDyanwu[0] = Volt / 1000 + '0'; //千位LCDyanwu[1] = '.'; //小数点LCDyanwu[2] = Volt / 100 % 10 + '0'; //百位LCDyanwu[3] = Volt / 10 % 10 + '0'; //十位LCDyanwu[4] = Volt % 10 + '0'; //个位LCDyanwu[5] = '\0'; //字符串结束标志符}#endif/*********烟雾比较子程序**************/void kongzhi(){ if(getdate>=shangxian){num1++;if(num1>=20){num1=0;yanwu=0;//烟雾异常}}else {yanwu=1;}}void show_time() //液晶显示程序{GotoXY(0,0);Print("wd:");ReadTemp(); //开启温度采集程序temp_to_str(); //温度数据转换成液晶字符GotoXY(3,0); //液晶字符显示位置Print(TempBuffer); //显示温度GotoXY(0,1);Print("yan:");TLC549_ADC();Data_Conversion();Volt_To_LCDyanwu();GotoXY(5,0);Print("Lcdyanwu");GotoXY(12,0);Print(";");shangxiang_to_str() ;GotoXY(13,0);Print(lcdsx);if(biaozhi==1){biaozhi=0;beep=~beep;deng=0;GotoXY(11,0);Print("yichang");}else{beep=1;deng=1;GotoXY(11,0);Print("zhengchang ");}}//主程序***********************main(){ getdate=TLC549_ADC();Data_Conversion();key();// 按键检测kongzhi();LCD_Initial(); //液晶初始化Init_DS18B20( ) ; //DS18B20初始化while(1){if(((temp_value>=WENDU)&&(yanwu==0))||((temp_value>=WENDU)&&(guang==0))||((guang ==0)&&(yanwu==0))||((temp_value>=WENDU)&&(yanwu==0)&&(guang==0))||( anjian==0)) {biaozhi=1;}elsebiaozhi=0;show_time(); //液晶显示数据}}。
智能火灾报警程序

//单片机P3.1——>GSM模块:TX2
//单片机P3.6——>GSM模块:IGT
#include <reg51.h>
#include <stdio.h>
#include"LCD1602.h"
#define uchar unsigned char
char code str12[]="AT+CMGS=13826593718\n" //接收短信手机号码
; //定义字符串12
****************************************************/
void dsreset(void)
{
uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
//////////////////////////////////////////////////////////
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
C语言智能安防系统设计

C语言智能安防系统设计
智能安防系统是当今社会智能化发展的必然趋势,通过结合C语言的编程技术,可以设计出高效、稳定的智能安防系统。
在本文中,将介绍如何基于C语言开发
智能安防系统的设计方法和实现步骤。
首先,设计智能安防系统需要明确系统的功能需求。
一般来说,智能安防系统
包括视频监控、入侵检测、报警系统、门禁控制等功能。
针对不同的需求,可以逐步设计和实现每个功能模块。
在C语言中,可以通过使用各种传感器和模块,如
摄像头、红外传感器、声音传感器等,来实现这些功能。
其次,设计智能安防系统还需要考虑系统的数据处理和分析能力。
通过C语言的编程技术,可以编写数据处理算法和机器学习模型,实现对监控画面的实时分析和识别。
例如,可以利用图像处理技术对监控画面进行人脸识别、车牌识别等操作,从而实现智能报警功能。
另外,智能安防系统的实现还需要考虑系统的稳定性和可靠性。
在C语言编程中,需要充分考虑系统的内存管理、异常处理和错误处理机制,以确保系统在长时间运行中的稳定性和可靠性。
同时,对系统进行充分的测试和调试,保证系统运行正常。
最后,在设计智能安防系统时,要考虑系统的可扩展性和可维护性。
通过模块
化的设计,可以方便对系统进行功能扩展和升级。
同时,编写良好的代码注释和文档,有助于他人理解和维护系统。
总而言之,通过C语言编程技术,可以设计实现高效、稳定的智能安防系统。
在系统设计过程中,需要充分考虑功能需求、数据处理能力、稳定性和可维护性等方面,以实现一个功能完善、性能优越的智能安防系统。
希望本文对您在设计智能安防系统时有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能火灾报警监测系统【摘要】本系统由检测装置烟雾传感器SS-168、光电传感器ST-178和温度传感器DS18B20,显示装置LCD和声光报警装置组成,并由单片机AT89S51来控制。
单片机巡回检测温度、红外辐射、烟雾并用LCD显示当前温度,当温度采集、红外检测、烟雾检测模块中任意两项检测到异常时系统发出声光报警,只到任意一项异常排除时系统才自动停止声光报警。
当检测模块出现故障时可使用手动控制模块,只需按下控制按键系统发出声光报警,直到按下复位按键,系统复位并停止报警。
该系统适用于居民住宅区、机房、办公室等小型防火单位。
【关键词】单片机,检测装置,声光报警,显示装置Intelligent Frie Alarm Detecting SystemAbstrsct:This system is controlled by SCM A T89S51 and comprised of display device LCD,sound and light alarm and detector,which include smoke sensor SS-168,photoelectric sensor ST-178,temperature sensor DS18B20. The SCM is for circuitously measuring temperature,infra-red radiation,smoke and display the temperature through LCD screen.The system will sent sound and light alarm when abnormalities occur during the detecting of temperature,sound and light and smoke.If any abnormality is eliminated,it will automatically stop sound and light alarm. The manual control module is a standby when the automatical system has breakdown. The system will sent sound and light alarm when pressing the controlling button.It will reset and stop the alarming when pressing the reset button. The system be appropriate for small fire prevention units,such as residential areas,machine rooms,offices.Key Words: SCM, detector,sound and light alarm, display device1、引言近年来随着人民生活水平的不断提高,家庭物质条件有了很大的改善,致使家庭用火用电增多,而由此引发的家庭火灾更是连续不断。
据近几年的火灾统计,城镇居民家庭火灾占有相当的比例,人员伤亡和经济损失都不容忽视。
现代家庭陈设、装修日趋增多,用电、用火、用气不断改善,发生火灾机率相应地增大。
居民家庭起火,往往具有燃烧猛烈、火势蔓延迅速、烟雾弥漫、易造成人员伤亡等火灾特点。
一些城乡结合部居民住在平房里,其房顶有些是用可燃材料建造的,起火后,火势极易烧到顶棚,沿屋顶可燃物迅速蔓延,造成火灾扩大蔓延,导致建筑倒塌破坏。
居民家庭中,发生火灾后往往因为缺少自救能力而造成人员伤亡和严重的经济损失。
家庭起火后如果得不到及时控制,还会殃及四分邻,使整幢居民楼或整个村庄遭受到火灾危害。
因而我们除了要增强对火灾的自防自救能力和消防法制观念外,还需在房间合适位置装火灾报警系统,以便尽早检测到火灾并给予及时控制于减少人员伤亡和经济损失。
目前国内厂家多偏重用于大型仓库、商场、高级写字楼、宾馆等场所大型火灾报警系统的研发,他们采用集中区域报警控制方式,其系统复杂、成本较高。
而在居民住宅区、机房、办公室等小型防火单位,需要设置一种单一或区域联网、廉价实用的火灾自动探测报警装置,因此,研制一种结构简单、价格低廉的语音数字联网火灾报警器是非常必要的。
2、系统硬件设计2.1硬件组成单片机巡回检测温度、红外辐射、烟雾并用LCD显示当前温度,当温度采集、红外检测、烟雾检测模块中任意两项检测到异常时系统发出声光报警,只到任意一项异常排除时系统才自动停止声光报警。
当报警系统出现故障时可使用手动控制模块,只需按下控制按键系统发出声光报警,直到按下复位按键,系统复位并停止报警[4]。
图2-1如图2-1所示本系统主要由单片机控制模块、烟雾检测模块、温度采集模块、红外检测模块、LCD显示模块、声光报警模块、手动控制模块组成。
2.2:单片机控制模块因本系统要求实时显示环境温度,同时考虑到功耗等问题,通过与89C51 程序存储器写入方式、电源范围、工作频率、市场价格、兼容型、加密功能、抗干扰性、烧写寿命更长综合考虑后选择AT89S51作为本系统的中央控制器[10]。
采用Atmel公司的AT89S51单片机作为主控制器,AT89S51是一个低功耗,高性能的51内核的CMOS 8位单片机,片内含8K空间的可反复擦些1000次的Flash只读存储器,具有256bytes的随机存取数据(RAM),32个IO口,2个16位可编程定时计数器。
且该系统的51单片机可以不用烧写器而直接用串口或并口就可以向单片机中下载程序。
2.2.1系统各模块控制端口说明图2-2单片机控制、手动控制模块接线图如图2-2所示P1.1用于控制发光二极管,P0口接LCD显示数据口,P0口上拉电阻为1K,P2.1、P2.2、P2.3分别接LCD使信号端(E),读写选择端(R/W),数据命令选择端(RS)。
P1.2 接温度传感器DS18B20的数据脚,用于读入温度。
P1.3接红外辐射的检测口。
P1.4接烟雾传感器的检测口。
P1.5作为蜂鸣器的控制口。
P2.0接控制开关按钮,当系统检测出现故障时按下控制按键即发出声光报警。
20脚接地,40脚接电源,18、19接12MHZ晶振输入端,31脚接电源端。
2.3:温度采集模块图2-3温度采集模块2.3.1:DS18B20设计要求这里用到温度芯片DS18B20。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式。
测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。
其工作电源既可在远端引入,也可采用寄生电源方式产生。
CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路[1]。
DS18B20支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
对硬件结构简单的单线数字温度传感器DS18B20 进行操作,需要用较为复杂的程序完成。
编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写[3]。
尤其在使用DS18B20 的高测温分辨力时,对时序及电气特性参数要求更高,根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉640微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功[2]。
本系统用于居民住宅区、机房、办公室等小型防火单位,然而室内温度一般不会超过40℃,只有发生特殊情况才会达到40℃以上。
因而本系统设置在温度大于或等于40℃时为异常(单片机P1.2口检到异常),接线如图2-3可知。
2.3.2: DS18B20的内部结构DS18B20内部结构图DS18B20有4个主要的数据部件:① 64位激光ROM。
64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。
②温度灵敏元件。
③非易失性温度报警触发器TH和TL。
可通过软件写入用户报警上下限值。
④配置寄存器。
配置寄存器为高速暂存存储器中的第五个字节。
DS18B20在0工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如图所示。
TM R1 R0 1 1 1 1 1 MSB DS18B20配置寄存器结构图LSB其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。
配置寄存器与分辨率关系表:R0 R1 温度计分辨率/bit 最大转换时间/us0 0 9 93.750 1 10 187.51 0 11 3751 1 12 750(2)高速暂存存储器高速暂存存储器由9个字节组成,其分配如下图所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如图所示。
对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
LSB DS18B20 存储器映像图MSB温度值格式图DS18B20 温度数据表:典型对应的温度值表:DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。
2.4:烟雾,红外检测模块图2-4烟雾,红外检测模块接线图如图2-4所示,当没有检测到火光时,光电传感器1脚(检测口)电压约为0.5V;当光电传感器检测到火光时,1脚(检测口)电压约为4.2V。
烟雾传感器没有检测到烟雾时,YW脚(检测口)电压约为0.2V,当检测到烟雾时,YW脚(检测口)电压约为3V。
烟雾传感器供电电压为9V,因此烟雾检测模块要单独供电。
而系统其它模块的供电电压为5V,因此要把烟雾传感器的电源负极与系统的地相连接。
才能达到设计目的。