基于51单片机多路DTH11温湿度检测控制系统

一、系统方案
1、本设计采用51单片机作为主控器。
2、DHT11采集温度度,支持3路温度度,液晶1602显示。
3、按键设置报警阀值。
4、系统声光报警。
在这里插入图片描述

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

三、单片机软件设计
1、首先是系统初始化
//初始化LCD************************************************************
void LCD_Initial()
{
E=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}

2、液晶1602显示程序
//液晶字符输入的位置************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y
1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}

//将字符输出到液晶显示
void Print(unsigned char *str)
{
while(*str!=‘\0’)
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
3、按键程序
void key()// 按键扫描
{
if (k10) //设置调整按键检测
{
delay(10);
if (k1
0)
{
presskeynum++;//切换显示界面
if(presskeynum5)
presskeynum=0;
while(k1
0);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
}
}
if(presskeynum1)//温度上限设置
{
if(k2
0)// 加
{
delay(10);
temp_high++;
if (temp_high>99)
temp_high=0;
while(k20); //加上此句必须松按键才处理
}
if(k3
0)//减
{
delay(10);
temp_high–;
if (temp_high<0)
temp_high=99;
while(k30); //加上此句必须松按键才处理
}
}
if(presskeynum
2)//温度下限设置
{
if(k2==0)// 加
{
delay(10);
temp_low++;
if (temp_low>99)
temp_low=0;

     while(k2==0);}if(k3==0){delay(10);temp_low--;if (temp_low<0)temp_low=99;while(k3==0);}

}
if(presskeynum3)//湿度上限设置
{
if(k2
0)// 加
{
delay(10);
humi_high++;
if (humi_high>99)
humi_high=0;

      while(k2==0);}if(k3==0){delay(10);humi_high--;if (humi_high<0)humi_high=99;while(k3==0);}

}
if(presskeynum4)//湿度下限设置
{
if(k2
0)//加
{
delay(10);
humi_low++;
if (humi_low>99)
humi_low=0;

      while(k2==0);}if(k3==0)// 减{delay(10);humi_low--;if (humi_low<0)humi_low=99;while(k3==0);}

}
if(k40)// 退出键
{
delay(10);
if(k4
0)
{
while(k4==0);
presskeynum=0;

      LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   			//清屏}

}
}
4、核心算法程序
void COM(void)//读DHT11一个字节
{
uchar i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!DATA)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(DATA)U8temp=1;
U8FLAG=2;
while((DATA)&&U8FLAG++);
if(U8FLAG==1)break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}

//--------------------------------
//-----温湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
uchar RH(void)
{
DATA=0; //主机拉低18ms
Delay1(180); //原来为5
DATA=1; //总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
DATA=1; //主机设为输入 判断从机响应信号
if(!DATA) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
U8FLAG=2;

    while((!DATA)&&U8FLAG++);	//判断从机是否发出 80us 的低电平响应信号是否结束	 U8FLAG=2;while((DATA)&&U8FLAG++);    //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态COM();						//数据接收状态U8RH_data_H_temp=U8comdata;COM();U8RH_data_L_temp=U8comdata;COM();U8T_data_H_temp=U8comdata;COM();U8T_data_L_temp=U8comdata;COM();U8checkdata_temp=U8comdata;DATA=1;U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);	//数据校验if(U8temp==U8checkdata_temp){U8RH_data_H=U8RH_data_H_temp;U8RH_data_L=U8RH_data_L_temp;U8T_data_H=U8T_data_H_temp;U8T_data_L=U8T_data_L_temp;U8checkdata=U8checkdata_temp;}return 1;
}
else   									//传感器不响应
{return 0;
}

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

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

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

相关文章

本地项目上传至码云gitee

1、springboot-mgx是需要上传的项目 2、码云后台创建一个新的仓库 3、创建完成后&#xff0c;复制下来https链接&#xff0c;后面要用到。 4、进入项目要上传的文件中 5、对git进行初始化&#xff0c;git指令 git init 6、 上传项目至gitee &#xff08;1&#xff09;连接远…

大数据之-Flink学习笔记

Flink Apache Flink — 数据流上的有状态计算。 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算处理。 任何类型的数据都以事件流的形式生成。信用卡交易、传感器测量、机器日志或网站或移动应用程序 2上的用户交互&#xff0c;…

如何通过百度SEO优化提升网站排名(掌握基础概念,实现有效优化)

随着互联网的发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为了网站优化中不可或缺的一部分。在中国&#xff0c;百度搜索引擎占据着主导地位&#xff0c;因此掌握百度SEO概念和优化技巧对网站的排名和曝光非常重要。 百度SEO排名的6个有效方法&#xff1a; 首…

CTF —— 网络安全大赛(这不比王者好玩吗?)

前言 随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 \ ⚔科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失、网络诈骗、隐私泄露&#xff0c;种种迹象…

PostgreSQL设置主键为自增

1、创建自增序列 CREATE SEQUENCE table_name_id_seq START 1; 2、设置字段默认值 字段默认值中设置 nextval(table_name_id_seq) 3、常用查询 -- 查询所有序列 select * from information_schema.sequences where sequence_schema public; -- 查询自增序列的当前值 select cu…

Python单例模式(3种常用方式)

Python单例模式 1、使用模块&#xff08;推荐&#xff09;2、使用装饰器3、使用new()方法 单例模式是最常见的一种设计模式&#xff0c;该模式确保系统中一个类仅有一个实例 常用的三种实现方式如下&#xff1a; 1、使用模块&#xff08;推荐&#xff09; 模块是天然单例的&a…

2023年浙工商MBA新生奖学金名单公布,如何看待?

浙工商MBA项目官方最新公布了2023年的非全日制新生奖学金名单&#xff0c;按照政策约定&#xff0c;共分为特等奖学金1名&#xff0c;一等奖学金10名&#xff0c;二等奖学金15名&#xff0c;三等奖学金30名&#xff0c;额度对应3万、1万、0.8万、0.5万不等&#xff0c;主要名单…

正式发布 sCrypt CLI命令行工具

sCrypt CLI 使 sCrypt 的开发更快更容易的 CLI 工具。 安装 npm install -g scrypt-cli如何使用 scrypt project my-proj或者 scrypt p my-proj该命令创建一个新目录 my-proj&#xff0c;其中包含一个 demo sCrypt 智能合约以及所需的脚手架。 同时包含一个项目 README.md…

Mac电脑安装Zulu Open JDK 8 使用 spring-kafka 消费不到Kafka Partition中的消息

一、现象描述 使用Mac电脑本地启动spring-kakfa消费不到Kafka的消息&#xff0c;监控消费组的消息偏移量发现存在Lag的消息&#xff0c;但是本地客户端就是拉取不到&#xff0c;通过部署到公司k8s容器上消息却能正常消费&#xff01; 本地启动的服务消费组监控 公司k8s容器服…

C语言入门Day_23 指针的使用

目录 前言&#xff1a; 1.指针运算符 2.指针的运算和使用 3.易错点 4.思维导图 前言&#xff1a; 上一篇博客中我们了解到指针的两个运算符号"&#xff1a; 一个是星号*&#xff0c;一个是&&#xff0c;他们的名字分别是指针运算符和取地址运算符。 1.指针运算…

在windows和linux上玩转Tensorrt

为避免重复&#xff0c;一些安装内容我直接贴其他大佬的帖子了&#xff0c;我是按照他们的步骤来操作的&#xff0c;趟过一遍&#xff0c;没有问题。 本篇着重在tensort在Cmakelist中如何配置&#xff0c;以及如何配置编译动/静态库&#xff0c;比较基础&#xff0c;也是想做个…

MySQL:表所在库及注释信息查找

一、MySQL查看表所在库 ​ 使用数据库过程中&#xff0c;使用到的表太多后&#xff0c;很难记住每张表在哪个库&#xff0c;这时候可以通过以下方式查找表所在位置&#xff1a; &#xff08;一&#xff09;通过表名查找 SELECT * FROM information_schema.TABLES WHERE tabl…

【DIY小记】修复Win10启动出现蓝屏0xc0000185错误的一些方法

近些日子想到自己尘封已久的笔记本电脑没有开机了&#xff0c;很多软件驱动之类的没有更新&#xff0c;就打算把电脑开起来做一轮批量升级。但开电脑的时候很久没有进入Win10桌面&#xff0c;等了很长一段时间蓝屏提示0xc0000185错误&#xff0c;说系统需要恢复。经历了一番折腾…

QT-day5

1、添加注册功能到数据库 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMessageBox> //消息对话框类头文件 #include <QDebug> #include <QPushButton> #include <QSqlDatabase> //数据库管理类 #include…

Vue路由和Node.js环境搭建

文章目录 一、vue路由1.1 简介1.2 SPA1.3 实例 二、Node.js环境搭建2.1 Node.js简介2.2 npm2.3 环境搭建2.3.1 下载解压2.3.2 配置环境变量2.3.3 配置npm全局模块路径和cache默认安装位置2.3.4 修改npm镜像提高下载速度 2.4 运行项目 一、vue路由 1.1 简介 Vue 路由是 Vue.js…

C++项目:仿mudou库实现高性能高并发服务器

文章目录 一、实现目标二、前置知识&#xff08;一&#xff09;HTTP服务器1.概念2.Reactor模型&#xff1a;3.分类 一、实现目标 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器&#xff1a; 通过咱们实现的高并发服务器组件&#xff0c;可以简洁快速的完成⼀…

git的详细使用

文章目录 前言一、Git工作流程二、Git的安装、配置与使用1.Git安装与配置2.从本地仓库推送到远程仓库2.从远程仓库拉取文件到本地,修改、新增并提交到(更新远程仓库)前言 参考网上文章,在这里总结一篇,方便自己查询 参考1 参考2

【深度学习】卷积神经网络(LeNet)【文章重新修改中】

卷积神经网络 LeNet 前言LeNet 模型代码实现MINST代码分块解析1 构建 LeNet 网络结构2 加载数据集3 初始化模型和优化器4 训练模型5 训练完成 完整代码 Fashion-MINST代码分块解析1 构建 LeNet 网络结构2 初始化模型参数3 加载数据集4 定义损失函数和优化器5 训练模型 完整代码…

云服务器ECS_云主机_服务器托管_计算-阿里云

阿里云服务器是什么&#xff1f;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;云服务器可以降低IT成本提升运维效率&#xff0c;免去企业或个人前期采购IT硬件的成本&#xff0c;阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

新手怎样快速上手接口测试?掌握这几个知识点直接起飞!

接口测试是测试系统组件间接口的一种方式&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的增删改查操作&#xff0c;以及系统之间的逻辑关系等 接口的几种类型 接口的类型包括&#xff1a;post &#xff0c;get&am…