功能介绍:
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/