【51单片机】【protues仿真】基于51单片机烟雾温湿度检测控制系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶烟雾值,温度和湿度值

2、可以设置烟雾、温湿度上下限报警值

3、烟雾值高于报警值,会发出声光报警

4、温湿度值低于或高于设定的范围时,会发出声光报警

5、满足烟雾温度过高、湿度过低时,控制继电器吸合,表示灭火

6、数据掉电存储功能

二、使用步骤

基于51单片机的烟雾温湿度检测控制系统通常由传感器模块、显示模块、报警模块及控制模块组成,可实现环境参数的实时监测与智能报警。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、DHT11温湿度传感器、MQ烟雾传感器模块

4、蜂鸣器模块

5、继电器模块

6、LCD1602显示模块

四、软件设计

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char // 以后unsigned char就可以用uchar代替

#define uint unsigned int // 以后unsigned int 就可以用uint 代替

sbit LcdRs_P = P2^5; // 1602液晶的RS管脚

sbit LcdRw_P = P2^6; // 1602液晶的RW管脚

sbit LcdEn_P = P2^7; // 1602液晶的EN管脚

uchar AlarmTL; // 温度下限报警值

uchar AlarmTH; // 温度上限报警值

uchar AlarmHL; // 湿度下限报警值

uchar AlarmHH; // 湿度上限报警值

uint AlarmLG; // 烟雾报警值

/*********************************************************/

// 毫秒级的延时函数,time是要延时的毫秒数

/*********************************************************/

void DelayMs(uint time)

{

uint i,j;

for(i=0;i<time;i++)

for(j=0;j<112;j++);

}

/*********************************************************/

// 10us级延时程序

/*********************************************************/

void Delay10us()

{

nop(); // 执行一条指令,延时1微秒

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

}

void LcdWriteCmd(uchar cmd)

{

LcdRs_P = 0;

LcdRw_P = 0;

LcdEn_P = 0;

P0=cmd;

DelayMs(2);

LcdEn_P = 1;

DelayMs(2);

LcdEn_P = 0;

}

void LcdWriteData(uchar dat)

{

LcdRs_P = 1;

LcdRw_P = 0;

LcdEn_P = 0;

P0=dat;

DelayMs(2);

LcdEn_P = 1;

DelayMs(2);

LcdEn_P = 0;

}

/*********************************************************/

// 1602液晶初始化函数

/*********************************************************/

void LcdInit()

{

LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口

LcdWriteCmd(0x0C); // 开显示,不显示光标

LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移

LcdWriteCmd(0x01); // 清屏

}

/*********************************************************/

// 主函数

/*********************************************************/

void main(void)

{

uchar i; // 循环变量

LcdInit(); // 液晶功能初始化

LcdShowInit(); // 液晶显示初始化

AlarmInit(); // 报警值初始化

while(1)

{

light=Get_ADC0832(); // 读取烟雾强度

light=light/2.5; // 缩小烟雾检测结果(在0-99)

if(light>99) // 如果大于99

light=99; // 则依然保持99

LcdGotoXY(0,9); // 液晶定位到第0行第6列

LcdPrintNum1(light); // 显示测量结果

/*温湿度读取*/

EA=0;

ReadDhtData(); // 检测温湿度数据;

EA=1;

LcdGotoXY(1,2); // 定位到要显示温度的地方

LcdPrintNum2(temp); // 显示温度值

LcdGotoXY(1,11); // 定位到要显示湿度的地方

LcdPrintNum2(humi); // 显示湿度值

// 报警判断

AlarmJudge();

/*按键扫描和延时*/

for(i=0;i<30;i++)

{

KeyScanf(); // 按键判断

DelayMs(10);

}

}

}

void UartInt(void) interrupt 4

{

uchar VoutH,VoutL;

if(RI==1)

{

RI=0;

if(SBUF==0xAA) // 起始位

{

while(!RI);

VoutH=SBUF; // Vout(H)

RI=0;

while(!RI);

VoutL=SBUF; // Vout(L)

RI=0;

while(!RI); // Vref(H)

RI=0;

while(!RI); // Vref(L)

RI=0;

while(!RI); // 校验位

RI=0;

while(!RI); // 停止位

RI=0;

ValuegIndex=VoutH*256+VoutL;

gIndex++;

if(gIndex==20)

gIndex=0;

}

}

}

五、实验现象

演示视频:

相关推荐
我不会JAVA!17 分钟前
【无标题】
嵌入式硬件·h.264
芯岭技术郦26 分钟前
OM6625A芯片 Timer 定时器计数模式使用说明
stm32·单片机·嵌入式硬件
wuminyu1 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
Dr.kangder2 小时前
嵌入式面试总结(八)——大小端
嵌入式硬件·面试·职场和发展·架构·嵌入式
zlinear数据采集卡4 小时前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
zcmodeltech4 小时前
双碳沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的碳捕集-零碳园区-综合能源全场景联动方案
stm32·嵌入式硬件·能源·嵌入式实时数据库·多分类
LCG米4 小时前
STM32零基础入门教程:从环境搭建到实战项目(点亮LED + 串口打印 + 呼吸灯)
stm32·单片机·嵌入式硬件
云泽8084 小时前
深入浅出 STM32(十一):从寄存器映射到 HAL 库位操作源码详解
stm32·单片机·嵌入式硬件
哥不想学算法4 小时前
STM32零基础教程(六):ADC、I2C、SPI与DMA
stm32·单片机·嵌入式硬件
小龙报5 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯