功能介绍:
0.本系统采用STC89C52作为单片机
1.系统实时监测当前的有害气体状态和温湿度,并定时向WIFI串口发送监测信息
2.当温湿度超过阈值或有害气体浓度过高时,控制对应继电器,同时蜂鸣器报警
3.按键可设定阈值
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB:

主程序:

#include "main.h"/*******************变量定义*********************/
enum _MODE_DF_ dispMode;
bit alarmFlag = 0; //报警标志
bit alarmFlag1 = 0; //报警标志1
bit alarmFlag2 = 0; //报警标志2
uchar setIndex = 0; //设置位置
uint humidity; //湿度
uint temperature; //温度uint hmMin= 35;
uint hmMax= 70;uint tempMin = 10;
uint tempMax = 40;bit dispFlag = 0;
bit sendFlag = 0;char dis[32];/********************************************************
函数名称:void mian()
函数作用:主函数
参数说明:
********************************************************/
void main()
{BUZZER     = OFF;RELAY_HEAT = OFF;RELAY_COOL = OFF;RELAY_HM   = OFF;RELAY_DHM  = OFF;RELAY_FAN  = OFF;Timer0_Init(); //初始化定时器0UART_Init(); //初始化串口LCD_Init();   //初始化液晶DelayMs(200); //延时有助于稳定LCD_DispStr(4, 0, "Welcome!");UART_SendStr("AT+CIPMUX=1\r\n", 13); //打开多连接DelayS(1);UART_SendStr("AT+CIPSERVER=1,8080\r\n", 21); //建立服务 端口号为8080DelayS(1);LCD_Clear();  //清屏while (1) //死循环{if (dispFlag == 1){dispFlag = 0;if (dispMode == NORMAL){DispNormal();}}if (sendFlag == 1){sendFlag = 0;SendData();}if (PIN_MQ2 == 0) //检测到有害气体浓度较高{DelayMs(200);if (PIN_MQ2 == 0) //确认检测到有毒气体{RELAY_FAN = ON; //打开排气扇alarmFlag = 1;}}else{RELAY_FAN = OFF; //关闭排气扇alarmFlag = 0;}if (humidity > hmMax){RELAY_DHM = ON; //打开除湿继电器RELAY_HM = OFF; //关闭加湿继电器alarmFlag1 = 1;}else if (humidity < hmMin){RELAY_DHM = OFF; //关闭除湿继电器RELAY_HM = ON; //打开加湿继电器alarmFlag1 = 1;}else{RELAY_DHM = OFF; //关闭除湿继电器RELAY_HM = OFF; //关闭加湿继电器alarmFlag1 = 0;}if (temperature > tempMax){RELAY_COOL = ON; //打开降温继电器RELAY_HEAT = OFF; //关闭加热继电器alarmFlag2 = 1;}else if (temperature < tempMin){RELAY_COOL = OFF; //关闭降温继电器RELAY_HEAT = ON; //打开加热继电器alarmFlag2 = 1;}else{RELAY_COOL = OFF; //关闭降温继电器RELAY_HEAT = OFF; //关闭加热继电器alarmFlag2 = 0;}if (alarmFlag == 1 || alarmFlag1 == 1 || alarmFlag2 == 1){BUZZER = ON;}else{BUZZER = 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 % 50 == 0){dispFlag = 1; //显示标志}if (time10ms > 500){time10ms = 0;sendFlag = 1; //WIFI发送信息标志}}void SendData(void)
{UART_SendStr("AT+CIPSEND=0,18\r\n", 17); //发送数据DelayMs(150);sprintf(dis, "Hm:%2d%% Temp:%3d'C\r\n", humidity, temperature); //串口发送UART_SendStr(dis, 18); //发送数据DelayMs(200);DelayMs(200);UART_SendStr("AT+CIPSEND=0,18\r\n", 17); //发送数据DelayMs(150);if (PIN_MQ2 == 0){UART_SendStr("Gas: Warning!!! \r\n", 18);}else{UART_SendStr("Gas:   Normal   \r\n", 18);}
}void DispNormal(void)
{DHT11_0_ReadData();//读取温湿度temperature = U8T_data_H;humidity = U8RH_data_H; sprintf(dis, "Hm:%2d%% Temp:%2d", humidity, temperature);LCD_DispStr(0, 0, dis);LCD_DispOneChar(14, 0, 0xdf);LCD_DispOneChar(15, 0, 'C');if (PIN_MQ2 == 0){LCD_DispStr(0, 1, "Gas: Warning!!! ");}else{LCD_DispStr(0, 1, "Gas:   Normal   ");}}void DispSetHm(unsigned char setIndex)
{LCD_DispStr(0, 0, "  Set Humidity  ");sprintf(dis, "   H:%2d%% L:%2d%%  ", hmMax, hmMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(12, 1, 1); break;default:;}
}void DispSetTemp(unsigned char setIndex)
{LCD_DispStr(0, 0, "Set Temperature ");sprintf(dis, "   H:%3d L:%3d  ", tempMax, tempMin);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(7, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;}
}void UART_Init(void)
{SCON = 0x50;TH2 = 0xFF;TL2 = 0xFD;RCAP2H = 0xFF;  //(65536-(FOSC/32/BAUD))   BAUD = 115200 FOSC = 11059200RCAP2L = 0xFD;/*****************/TCLK = 1;RCLK = 1;C_T2 = 0;EXEN2 = 0;/*****************/TR2 = 1;ES   = 1; //打开串口中断EA   = 1; //打开总中断}void UART_SendByte(unsigned char dat) //串口发送单字节数据
{unsigned char time_out;time_out = 0;SBUF = dat;                        //将数据放入SBUF中while ((!TI) && (time_out < 100)) //检测是否发送出去{time_out++;DelayUs10x(2);}      //未发送出去 进行短暂延时TI = 0; //清除ti标志
}void UART_SendStr(unsigned char *s, unsigned char length) //发送定长度字符串
{unsigned char num;num = 0x00;while (num < length) //发送长度对比{UART_SendByte(*s); //放松单字节数据s++;            //指针++num++;            //下一个++}
}void UART_Interrupt(void) interrupt 4 //串行中断服务程序
{if (RI)//判断是接收中断产生{RI = 0; //标志位清零}
}

仿真演示视频:
https://www.bilibili.com/video/BV1X5411Q7cx/

实物演示视频:
https://www.bilibili.com/video/BV1zr4y147ZA/

基于51单片机的鸡舍智能环境控制有害气体检测无线WiFi通信proteus仿真原理图PCB相关推荐

  1. 基于51单片机的智能窗户烟雾浓度雨滴检测无线wifi控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602实时显示当前环境温湿度,烟雾浓度,室外是否下雨 2.按键可设定烟雾浓度,环境温湿度阈值,雨滴检测阈值 3.当环境适宜时,打开窗户 ...

  2. 基于51单片机智能停车场管理车位引导系统蓝牙手机通信proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统采用LCD1602液晶实时显示当前车位状态 2.蓝牙串口间隔5秒发送一次当前车位状态 3.车位检测传感器采用的是红外光电模块,该模块的检测距离 ...

  3. 基于51单片机的三路超声测距仪设计wifi通信proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时循环显示3路超声波探测距离,同时WIFI串口上报 2.带有WiFi模块,可与手机实现数据交互,WiFi模块型号采用是常见 ...

  4. 基于51单片机万年历可调电子时钟闹钟温度(实物图+源码+仿真+原理图+论文)

     资料编号:038 硬件构成:51单片机+最小系统+LCD1602液晶显示模块+时钟模块+温度采集模块+蜂鸣器模块+按键模块 1.采用LCD1602液晶屏显示.DS1302时钟芯片和DS18B20温度 ...

  5. 基于51单片机的教室智能照明灯控制系统仿真原理图方案设计

    方案框图: 原理图: 仿真图: 系统控制模块的硬件构成及简介 系统控制单元是以AT89S51单片机主控模块为核心,其它外围电路主要包括:环境光采集电路.时钟模块.热释红外传感器模块.看门狗模块.按键电 ...

  6. 基于51单片机煤气天然气有毒气体检测系统蓝牙手机通信proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统采用LCD1602作为显示液晶,可以实时显示气体的检测情况以及其他功能设置信息 2.检测有毒气体传感器用的是MQ-4系列传感器 3.蜂鸣器和L ...

  7. 基于51单片机心率计脉搏体温测量仪WIFI无线通信proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测当前佩戴者的心率和体温,通过LCD1602显示相关数据 2.定时通过WIFI串口发送佩戴者的心率和体温 3.系统预留出串口接口,需要注 ...

  8. 基于51单片机的教室智能照明控制设计

    具体实现功能 系统由STC89C52单片机+时钟芯片DS1302+液晶屏LCD1602+光敏电阻+红外对管+LED灯模块+按键模块构成. 具体功能: 1.用4个LED灯模拟教室的照明灯,人数小于10人 ...

  9. 基于51单片机的电动智能小车(完整论文)

    基于51单片机的电动智能小车(完整论文): 摘 要 80C51单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评.这里介绍的是如何用80C51单片机来实现长春工业大学的毕业设计,该设计 ...

最新文章

  1. SQL关键字转换大写核心算法实现
  2. 产品经理经常使用工具
  3. CF919D Substring (dag dp)
  4. python 中一些常用的内置函数
  5. Linux中printk和strace命令调试的一些技巧
  6. 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
  7. linux进程配置异常中断自动重启_Linux系统配置及服务管理 (四)进程管理
  8. jpa 多层嵌套一对多_JPA一对多、多对多json序列化死循环问题解决
  9. java动态分区分配_动态分区分配--最先适应分配算法
  10. linux find mtime 用法,Linux find命令常见用法汇总(4)
  11. IP 库的 8020 法则与那些高大上的名词~
  12. 485无线传输通讯模块
  13. 战略项目——科龙空调中高层干部培训记
  14. Window 开机连接ocsp.globalsign.com
  15. office excel无法打开超链接解决方法
  16. 对计算机专业的认识和理想
  17. 如何快速生成gif动图表情包?教你制作gif表情包图片
  18. Lua初学者(一)--Lua 简单教学
  19. 记录:mac和win共享磁盘(同一局域网)
  20. 木兰开源社区分论坛 | ChinaOSC

热门文章

  1. MyBatis学习笔记(六)——高级查询之一对多映射
  2. 【机器学习实战】k-近邻算法案例——改进约会网站的配对效果
  3. renqun_youhua=2004892,竞价链接后缀标识都是什么含义?
  4. 华为鸿蒙删除视频报错rm: local.mp4: Owner died
  5. windows下Net命令详解
  6. javaScript和JQuery
  7. matlab双曲函数
  8. scanf函数和回车、空格 及其返回值
  9. ETABS结构指标查看
  10. Apache安装与基本配置