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

news2024/11/25 12:58:48

一、系统方案
本设计采用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.coloradmin.cn/o/1169943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(免费领源码)php#MySQL软件测试文档管理系统28035-计算机毕业设计项目选题推荐

目 录 摘 要 Abstract 第1章 前 言 1.1 研究背景 1.2 开发意义 1.3 系统开发目标 第2章 系统开发环境 6 2.1 HTTP协议 6 2.2 HTML网页技术 6 2.3 B/S结构 6 2.4 PHP脚本语言 7 2.5 MySQL数据库 7 2.6 Apache简介 8 第3章 需求分析 3.1 需求分析 3.2 系统可…

ChatGPT商务英语邮件写作方法及案例模板

目录 1 前言 2 商务英语email写作技巧 3 商务email完整模板 4 求学科研email模板 5 工作email模板 6 商务沟通email模板 在现代商务环境中,通过电子邮件进行沟通已经成为一种普遍的方式。良好的商务英语邮件写作技巧和模板能够帮助我们有效地传达信息&#xf…

K8s-----pod详解

目录 一、Pod介绍 1、Pod的基础概念 2、pod定义(资源清单) 二、Pod相关实例 1、初始化容器(init容器) 2、镜像拉取策略(image PullPolicy) 3、pod容器重启策略(restartPolicy&#xff09…

自定义类型枚举

目录 枚举类型枚举类型的声明扩展枚举类型的优点枚举的优点 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️&#x1f43f…

取消elementUI中table的选中状态和勾选状态赋值

一、取消所有选中 1、表格上绑定ref 2、清空用户选中数据 this.$refs.loopRef.clearSelection()二、勾选状态赋值 获取数据,flag为true则是选中状态,并将前面勾选框设为选中状态 this.listData.forEach(item> {if(row.flag1){this.$refs.loopRef.to…

elasticsearch索引按日期拆分

1.索引拆分原因 如果单个索引数据量过大会导致搜索变慢,而且不方便清理历史数据。 例如日志数据每天量很大,而且需要定期清理以往日志数据。例如原索引为sc_all_system_log,现按天拆分索引sc_all_system_log20220902,sc_all_syste…

IOS渲染流程之提交图层数据至RenderThread进程

大致链路 UIView/CALayer---->CoreAnimation./Core Graphics/Core Image---->GPU Drive-->GPU 图层树/视图树 一个UIView(视图)对应一个CALayer(图层),CALayer对应显示的数据其有个content代表Bitamp&#…

答题测评考试小程序的效果如何

在线答题系统是一种在线练习、考试、测评的智能答题系统,适用于企业培训、测评考试、知识竞赛、模拟考试等场景,管理员可任意组题、随机出题,答题者成功提交后,系统自动判分。 多种题目类型,两种答题模式 练习模式&a…

漏洞复现--大华ICC readpic任意文件读取漏洞

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

Linux--动静态库

1.背景知识 软硬链接: 软硬链接的创建 软链接:ln -s 文件名 s_link 结果: 可以看到text1.txt和s_link->text.txt这两个文件地址,也就是inode编号是不一样的,且硬链接数都为1; 硬链接:l…

VR实景导航在医院内使用有哪些好处?

近年来,VR全景逐渐普及开来,被大众所熟知,而VR全景在医院的应用也是逐渐广泛起来,对于医院各种错综复杂的楼层,VR全景的VR实景导航功能,能够将患者代入一个三维、逼真的虚拟环境中,帮助患者快速…

企业数据库中了360勒索病毒怎么办,勒索病毒解密,数据恢复

随着网络技术的不断发展,越来越多的企业开始走向数字化办公,网络技术的发展给企业的生产运行提供了强有力的支撑。但随之而来的网络安全威胁也不断增加,数据安全成为众多企业关心的主要话题。近期,云天数据恢复中心的工程师接到很…

Pytorch网络模型训练

现有网络模型的使用与修改 vgg16_false torchvision.models.vgg16(pretrainedFalse) # 加载一个未预训练的模型 vgg16_true torchvision.models.vgg16(pretrainedTrue) # 把数据分为了1000个类别print(vgg16_true) 以下是vgg16预训练模型的输出 VGG((features): S…

apollo云实验:定速巡航场景仿真调试

定速巡航场景仿真调试 概述启动仿真环境仿真系统修改默认巡航速度 实验目的福利活动 主页传送门:📀 传送 概述 自动驾驶汽车在实现落地应用前,需要经历大量的道路测试来验证算法的可行性和系统的稳定性,但道路测试存在成本高昂、…

基于LDA主题+协同过滤+矩阵分解算法的智能电影推荐系统——机器学习算法应用(含python、JavaScript工程源码)+MovieLens数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据爬取及处理2. 模型训练及保存1)协同过滤2)矩阵分解3)LDA主题模型 3. 接口实现1)流行电影推荐2)相邻用户推荐3)相似内容推荐 相关其它博…

submit使用share buffer传参问题及解决办法

有个程序,因为处理逻辑复杂,时间长,所以启用了job。 本来是直接把耗时的核心函数 in background。 但是这种情况有个麻烦,不方便检查报错信息,只能用SM58监控。 所以改为了open job submit program。因为可以sm37查看…

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。 上传文件有两种场景:input控制上传和非input控件上传。 大多数情况都是input控件上传文件,只有非常少数的使用自定义的非input上传文件。 一、input控…

快手群控软件可同时控制多个账号!

随着社交媒体的普及,越来越多的人开始使用快手平台来分享自己的生活、展示才艺、开展商业活动等,然而,要想在快手上获得更多的关注和收益,需要投入大量的时间和精力,这时,快手群控软件应运而生,…

2023红帽论坛:探索数字化转型的下一步

作为全球领先的企业级开源解决方案提供商,红帽的一举一动在业界都备受关注。 近日,以“探索下一步”为主题,2023红帽论坛在北京盛大揭幕。 红帽全球副总裁兼大中华区总裁曹衡康在主题演讲中表示,智能创新并不是一个单纯依赖技术的…

d3dcompiler_47.dll是什么?d3dcompiler_47.dll缺失修复教程

d3dcompiler_47.dll丢失是一个比较常见的问题,尤其是在玩一些大型游戏或者使用一些图形处理软件时。这个问题可能会让你感到非常困扰,因为它可能会导致你的程序无法正常运行。但是,别担心,我在这里为你提供了四种解决方案&#xf…