1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于51单片机的智能环境监测光强火焰有害气体检测proteus仿真原理图PCB

基于51单片机的智能环境监测光强火焰有害气体检测proteus仿真原理图PCB

时间:2019-02-24 12:29:58

相关推荐

基于51单片机的智能环境监测光强火焰有害气体检测proteus仿真原理图PCB

功能介绍:

0.本系统采用STC89C52作为单片机

1.系统实时监测当前的有害气体状态/光强信息/火焰状态

2.当有害气体浓度超过阈值或检测到火焰时,蜂鸣器报警,并启动风扇进行通风

3.按键可设定阈值

4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

/*************************************************************智能环境监测系统补充说明:***************************************************************/#include "main.h"/*******************变量定义*********************/enum _MODE_DF_ dispMode;bit alarmFlag = 0; //报警标志uchar setIndex = 0; //设置位置uchar gasMax = 30; //煤气浓度阈值char gas = 0; //煤气浓度uchar light = 0;//光照强度bit dispFlag = 0;//显示标志bit fireFlag = 0;//火焰标志char dis[16];/********************************************************函数名称:void mian()函数作用:主函数参数说明:********************************************************/void main(){BUZZER= OFF;RELAY_FAN = OFF;Timer0_Init(); //初始化定时器0LCD_Init(); //初始化液晶DelayMs(200); //延时有助于稳定LCD_DispStr(4, 0, "Welcome!");DelayS(1);LCD_Clear(); //清屏while (1) //死循环{if (dispFlag == 1) //显示标志{dispFlag = 0;if (dispMode == NORMAL){DispNormal();}}if (FIRE_PIN == 0) //检测到火焰{DelayMs(200);if (FIRE_PIN == 0) //确认检测到火焰{fireFlag = 1;alarmFlag = 1;}}if (gas > gasMax) //检测到浓度大于阈值{alarmFlag = 1; //报警标志}if (alarmFlag == 1){BUZZER = ON; //打开蜂鸣器RELAY_FAN = ON; //打开排气扇}else{BUZZER = OFF; //关闭蜂鸣器RELAY_FAN = OFF; //关闭排气扇}KeyProcess(); //按键检测及处理} }/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Timer0_Init(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0 = (65536 - 9216) / 256; //重新赋值 10msTL0 = (65536 - 9216) % 256;EA = 1; //总中断打开ET0 = 1; //定时器中断打开TR0 = 1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/void Timer0_Interrupt(void) interrupt 1{static unsigned int time10ms = 0;TH0 = (65536 - 9216) / 256; //重新赋值 10msTL0 = (65536 - 9216) % 256;time10ms++;if (time10ms > 20){dispFlag = 1; //显示标志time10ms = 0;}}void DispNormal(void){int gasBuf;TR0 = 0;gasBuf = ReadADC(AIN0_GND);if (gasBuf <= 29){gasBuf = 29;}gas = (100 * (gasBuf-29)) / 227; //计算有害气体浓度百分比light = 100 - 100 * ReadADC(AIN1_GND) / 255; //计算光强百分比TR0 = 1;sprintf(dis, "Gas:%3d%%", (int)gas); //打印有害气体浓度百分比LCD_DispStr(0, 0, dis);if (fireFlag == 1){LCD_DispStr(9, 0, "Fire "); //显示火焰}else{LCD_DispStr(9, 0, "Normal");}sprintf(dis, "Light:%3d%%", (int)light); //打印显示光强LCD_DispStr(0, 1, dis);}void DispSetGasLimit(unsigned char setIndex) //显示设定阈值{LCD_DispStr(0, 0, " Set GasLimit ");sprintf(dis, " Max:%3d%% ", (int)gasMax);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(10, 1, 1); break;default:;} }

仿真演示视频:

/video/BV15A4y1Z7m9/

实物演示视频:

/video/BV1c34y1J7Uu/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。