单片机温湿度-光照-DHT11-烟雾气体检测控制系统-proteus仿真-源程序

一、系统方案
本设计采用52单片机作为主控器,液晶1602显示,DHT11温湿度,光照、烟雾气体检测,按键设置报警阀值,蜂鸣器报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
//
// 1602液晶初始化
/
/
void LcdInit()
{
LcdWriteCmd(0x38); // 162显示,57点阵,8位数据口
LcdWriteCmd(0x0C); // 开显示,不显示光标
LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移
LcdWriteCmd(0x01); // 清屏
}

2、液晶显示程序
//
// 1602液晶写命令函数,cmd就是要写入的命令
/
/
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;
}

//
// 1602液晶写数据函数,dat就是要写入的数据
/
/
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;
}

3、按键程序
//
// 按键扫描
/
/
void KeyScanf()
{
if(KeySet_P0) // 判断是否有按键按下
{
DelayMs(10); // 消除按键按下的抖动
if(KeySet_P
0)
{
while(!KeySet_P); // 等待按键释放
menu_1++;
if(menu_15)
menu_1=0;
}
}
while(menu_1!=0)
{
if(KeySet_P
0) // 判断是否有按键按下
{
DelayMs(10); // 消除按键按下的抖动
if(KeySet_P0)
{
while(!KeySet_P); // 等待按键释放
menu_1++;
if(menu_1
9)
menu_1=0;
}
}
if(menu_11)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Temp_Min set ");
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[0][0]); // 显示当前下限
LcdGotoXY(1,3);
LcdPrintStr("C ");
if(KeyDown_P
0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P0)
{
while(!KeyDown_P); // 等待按键释放
Set_Value[0][0]–;
}
}
if(KeyUp_P
0) // 报警值加处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyUp_P0)
{
while(!KeyUp_P); // 等待按键释放
Set_Value[0][0]++;
}
}
}
if(menu_1
2)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Temp_MAX set ");
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[0][1]); // 显示当前下限
LcdGotoXY(1,3);
LcdPrintStr("C ");
if(KeyDown_P0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P
0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[0][1]–;
}
}
if(KeyUp_P0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P
0)
{
while(!KeyUp_P);
Set_Value[0][1]++;
}
}
}
if(menu_13)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Humi_Min set “);
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[1][0]); // 显示当前下限
LcdGotoXY(1,3);
LcdPrintStr(”%RH ");
if(KeyDown_P
0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[1][0]–;
}
}
if(KeyUp_P
0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P0)
{
while(!KeyUp_P);
Set_Value[1][0]++;
}
}
}
if(menu_1
4)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Humi_MAX set “);
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[1][1]); // 显示当前上限
LcdGotoXY(1,3);
LcdPrintStr(”%RH ");
if(KeyDown_P0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P
0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[1][1]–;
}
}
if(KeyUp_P0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P
0)
{
while(!KeyUp_P);
Set_Value[1][1]++;
}
}
}
if(menu_15)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Light_Min set “);
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[2][0]); // 显示当前下限
LcdGotoXY(1,3);
LcdPrintStr(” ");
if(KeyDown_P
0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[2][0]–;
}
}
if(KeyUp_P
0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P0)
{
while(!KeyUp_P);
Set_Value[2][0]++;
}
}
}
if(menu_1
6)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr("Light_MAX set “);
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[2][1]); // 显示当前上限
LcdGotoXY(1,3);
LcdPrintStr(” “);
if(KeyDown_P0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P
0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[2][1]–;
}
}
if(KeyUp_P0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P
0)
{
while(!KeyUp_P);
Set_Value[2][1]++;
}
}
}
if(menu_17)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr(" YW_Min set ");
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[3][0]); // 显示当前下限
LcdGotoXY(1,3);
LcdPrintStr("ppm ");
if(KeyDown_P
0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[3][0]–;
}
}
if(KeyUp_P
0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P0)
{
while(!KeyUp_P);
Set_Value[3][0]++;
}
}
}
if(menu_1
8)
{
LcdGotoXY(0,0); // 液晶恢复测量时的内容显示
LcdPrintStr(” YW_MAX set ");
LcdGotoXY(1,0); // 定位到第0行第7列
LcdPrintTHD(Set_Value[3][1]); // 显示当前上限
LcdGotoXY(1,3);
LcdPrintStr("ppm ");
if(KeyDown_P0) // 报警值减的处理
{
DelayMs(10); // 消除按键按下的抖动
if(KeyDown_P
0)
{
while(!KeyDown_P);// 等待按键释放
Set_Value[3][1]–;
}
}
if(KeyUp_P0) // 报警值加处理
{
DelayMs(10);
if(KeyUp_P
0)
{
while(!KeyUp_P);
Set_Value[3][1]++;
}
}
}
}
}

4、核心算法程序
//
// 主函数
/
/
void main()
{
LcdInit(); // 执行液晶初始化 ”
DelayMs(500);
DelayMs(500);
while(1)
{
KeyScanf();
ADC_Processing();
LcdPrint_A0(1,0,ADC_Value[0]); // 光强
LcdPrint_A1(1,8,ADC_Value[1]); //

	DHT11_receive();                 // 读取温湿度LcdPrint_RH(0,8,humi_value);     // 显示当前湿度LcdPrint_TH(0,0,temp_value);    // 显示当前温度AlarmJudge();								// 判断一下是否需要报警,是的话则报警
}

}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/181091.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++输出字符菱形 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C输出字符菱形 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C输出字符菱形 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个字符,用它构造一个对角线长…

循环语句--JAVA

循环语句 for循环结构 范例 执行流程 while循环结构 格式 范例 流程 for和while的区别 条件控制语句所控制的自增变量,在for循环结束后,就不可以继续使用了 条件控制语句所控制的自增变量,在while循环结束后,还可以继续使用了 数据类型 基本数据类型 char byte boolean …

register_parameter和register_buffer 详解

在参考yolo系列代码或其他开源代码,经常看到register_buffer和 register_parameter的使用,接下来将详细对他们进行介绍。 1. 前沿 在搭建网络时,我们 自定义的参数,往往不会保存到模型权重文件中,或者成为模型可学习…

操作系统复习(2)进程管理

一、概述 1.1程序的顺序执行 一个具有独立功能的程序独占CPU运行,直至得到最终结果的过程称为程序的顺序执行。 程序的并发执行所表现出的特性说明两个问题 ⑴ 程序和计算机执行程序的活动不再一一对应 ⑵ 并发程序间存在相互制约关系(要求共享信息&…

docker-compose 简单部署MySQL Database

docker-compose 简单部署MySQL Database 本博文部署MySQL 并与上篇部署的 Flask进行关联 主博客目录:《从零开始学习搭建量化平台笔记》 文章目录 docker-compose 简单部署MySQL Database部署 MySQLMySQL 开放端口与权限 主项目计划需要搭建一个MySQL 数据库为其他部…

python 深度学习 解决遇到的报错问题8

本篇继python 深度学习 解决遇到的报错问题7-CSDN博客 目录 一、OSError: [WinError 127] 找不到指定的程序。 Error loading "D:\my_ruanjian\conda-myenvs\deeplearning\lib\site-packages\torch\lib\caffe2_detectron_ops.dll" or one of its dependencies. 二、…

COCOS2DX3.17.2 Android升级targetSDK30问题解决方案

一、luajit不兼容问题 不兼容版本:【2.1.0-bate2、2.1.0-bate3都存在异常】 出问题系统:Android11;Android10的系统部分机型有问题,部分机型正常 异常点1:c调用lua接口,pushObjiect的时候crash 异常点2…

从Spring说起

一. Spring是什么 在前面的博文中,我们学会了SpringMVC的使用,可以完成一些基本功能的开发了,但是铁子们肯定有很多问题,下面来从Spring开始介绍,第一个问题,什么是Spring? Spring是包含了众多工具方法的IOC容器. Spring有两个核心思想--IOC和AOP,本章先来讲解IOC...... 1.1…

前端框架Vue学习 ——(一)快速入门

文章目录 Vue 介绍Vue快速入门 Vue 介绍 Vue 是一套前端框架,免除原生 JavaScript 中的 DOM 操作,简化书写。基于 MVVM (Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网: https://v2.cn.vuejs.or…

区块链与教育:颠覆传统,引领未来

区块链与教育:颠覆传统,引领未来 摘要:本文将探讨区块链技术在教育领域的应用及其潜在影响。通过介绍区块链技术的基本原理、教育领域的现状,以及区块链技术在教育中的实际应用案例,我们将展望一个去中心化、安全可信…

想学计算机编程从什么学起?零基础如何自学计算机编程?中文编程开发语言工具箱之渐变标签组构件

想学计算机编程从什么学起?零基础如何自学计算机编程? 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,…

Prometheus+Grafana

一、Prometheus 获取配置文件 docker run -d -p 9090:9090 --name prometheus prom/prometheusmkdir -p /app/prometheusdocker cp prometheus:/etc/prometheus/prometheus.yml /app/prometheus/prometheus.yml停止并删除旧的容器,重新启动 docker run -d --name…

【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacsweblogicScanner3、漏洞验证 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic < 10.3.…

【驱动开发】注册字符设备使用gpio设备树节点控制led三盏灯的亮灭

注册字符设备使用gpio设备树节点控制led三盏灯的亮灭 设备树&#xff1a; 头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int OD…

Redis7.x 高级篇

Redis7.x 高级篇 Redis版本发行时间Redis单线程说的是什么东西 Redis版本发行时间 Redis单线程说的是什么东西

强化学习的动态规划二

一、典型示例 考虑如下所示的44网格。 图1 非终端状态为S {1, 2, . . . , 14}。在每个状态下有四种可能的行为&#xff0c;A {up, down, right, left}&#xff0c;这些行为除了会将代理从网格上移走外&#xff0c;其他都会确定性地引起相应的状态转换。因此&#xff0c;例如&…

MYSQL 8.0 配置CDC(binlog)

CDC&#xff08;Change Data Capture&#xff09;即数据变更抓取&#xff0c;通过源端数据源开启CDC&#xff0c;ROMA Connect 可实现数据源的实时数据同步以及物理表的物理删除同步。这里介绍通过开启Binlog模式CDC功能。 注意&#xff1a;1、使用MYSQL8.0及以上版本。 2、不…

ok-解决qt5发布版本,直接运行exe缺少各种库的问题

已实验第二种方法可用。 工具&#xff1a;电脑必备、QT下的windeployqt Qt 官方开发环境使用的动态链接库方式&#xff0c;在发布生成的exe程序时&#xff0c;需要复制一大堆 dll&#xff0c;如果自己去复制dll&#xff0c;很可能丢三落四&#xff0c;导致exe在别的电脑里无法…

抵押贷款巨头 Mr. Cooper 遭受网络攻击,影响 IT 系统

导语 近日&#xff0c;美国抵押贷款巨头 Mr. Cooper 遭受了一次网络攻击&#xff0c;导致该公司的 IT 系统受到影响。这一事件引起了广泛的关注&#xff0c;使得 Mr. Cooper 的在线支付平台无法正常运行。本文将为大家详细介绍这次网络攻击事件的具体情况及其对用户和公司造成的…

题解:轮转数组及复杂度分析

文章目录 &#x1f349;前言&#x1f349;题目&#x1f34c;解法一&#x1f34c;解法二&#xff1a;以空间换时间&#x1f95d;补充&#xff1a;memmove &#x1f34c;解法三&#xff08;选看&#xff09; &#x1f349;前言 本文侧重对于复杂度的分析&#xff0c;题解为辅。 …