【51单片机仿真】基于51单片机设计的温湿度采集检测系统仿真源码文档视频——文末资料下载

news2025/1/31 2:50:55

演示

目录

1.系统功能

2.背景介绍

3.硬件电路设计

4.软件设计

4.1 主程序设计

4.2 温湿度采集模块程序设计

 4.3 LCD显示屏程序设计

5.系统测试

6.结束语

源码、仿真、文档视频等资料下载链接


1.系统功能

该系统通过与AT89C51单片机、LCD1602显示屏和DHT11温湿度传感器的集成,实时读取环境中的温度和湿度数据并在LCD1602上显示这些信息,其中系统初始化LCD1602显示屏、通过DHT11_receive()函数接收并校验DHT11传感器的温湿度数据、使用LCD_ShowNum()函数逐位显示湿度和温度数据并在这些数据后附加相应的单位符号,以便用户可以直观地看到当前环境的温湿度情况。

2.背景介绍

在现代社会,随着科技的发展和人们生活水平的提高,环境监测变得愈发重要。准确的环境数据对于家庭、办公室、温室以及工业场所的日常运行和健康维护至关重要。其中,温湿度是两项最为基础且重要的环境参数,能够显著影响人类的舒适程度和许多工业过程的效率。因此,设计一个可靠的温湿度检测系统显得尤为必要。

51单片机(Microcontroller Unit, MCU)是一种广泛使用的嵌入式系统核心,它具有简单易用、功能强大、性价比高等优点。51单片机由于其丰富的外围接口容易与其他设备进行集成,开发环境相对成熟,具有丰富的开发资源。此外,其低功耗、稳定性高等特点使得适合各种嵌入式应用中,包括温湿度检测系统。设计基于51单片机的DHT11温湿度检测系统,旨在利用51单片机的强大功能和DHT11的测量能力,实现对环境温湿度的实时监控。实现温湿度数据实时采集,系统能够定时从DHT11传感器读取温湿度数据。数据处理与显示将采集到的数据进行处理,并通过液晶显示屏LCD1602实时显示出来,供用户方便查看。

3.硬件电路设计

硬件电路设计采用proteus进行仿真电路的设计,如下图1中元件U1为单片机主控AT89C51,是核心控制单元用于处理温湿度数据并控制显示模块,元件U1的引脚P0口连接到LCD的数据引脚(D0-D7);主控的19号引脚和18号引脚连接晶振X1和电容C1、C2,晶振X1用于提供时钟信号,电容C1和C2为33pF的电容保证晶振电路的稳定性,分别连接在XTAL1和XTAL2与地之间;9号引脚为复位引脚,包含有一个复位按键,电阻R1为1kΩ电阻,连接在RST引脚和电源之间,防止复位引脚浮空,电容C3为1uF电容连接在RST引脚和地之间,组合R1形成上电复位电路。电路中的元件RP1为电阻网络,将多个电阻集成在一个封装内,D7配到管脚14,D6配到管脚13,D5配到管脚12,D4配到管脚11,D3配到管脚10,D2配到管脚9,D1配到管脚8,D0配到管脚7。

电路中的元件U2为温湿度传感器采用DHT11传感器,DHT11传感器主要引脚有三个,分别为VDD引脚、DATA引脚和GND引脚,VDD引脚连接系统的电源正极,GND引脚连接电源地,DATA引脚连接单片机的I/O口,连接到引脚P1.1,用于传输温湿度数据。

电路中的元件LCD1为LCD1602显示屏,其数据引脚D0-D7连接到单片机主控的P0口,每个引脚对应同名引脚进行连接。其控制引脚RS连接到单片机控制引脚,用于选择命令/数据寄存器,RW引脚连接到单片机控制引脚,用于选择读/写操作,E引脚是使能引脚,用于使能LCD操作。电源引脚VSS接电源地,VDD引脚连接系统的电源正极,VEE引脚为对比度调节端,通过电位器RV1连接,调节显示对比度。元件RV1为4.7kΩ可调电阻用于调节LCD背光对比度,连接VEE引脚。如下图1为系统仿真电路。

图1 系统仿真图

4.软件设计

4.1 主程序设计

在主程序设计中,首先,通过包括头文件reg51.h、lcd1602.h和dht11.h引入了必要的库文件,其中reg51.h是与8051单片机相关的头文件,lcd1602.h和dht11.h分别是处理LCD1602显示屏和DHT11温湿度传感器的头文件。接着,定义了一个指向无符号整数数组的指针dht,用来存放从DHT11传感器接收到的温度和湿度数据。在main函数中,首先调用LCD_Init()函数对LCD1602显示屏进行初始化配置;在进入无限循环后,代码每次调用DHT11_receive()函数读取DHT11传感器的数据并将其存储在dht数组中,然后调用LCD_ShowNum()函数在LCD1602显示屏的第一行第一列显示读取到的湿度值,其中dht[0]即为湿度数据,高两位,并在湿度值后面加上百分号和“RH”标志;随后在第二行第一列调用LCD_ShowNum()函数显示读取到的温度值,其中dht[1]即为温度数据,并在温度值后面加上摄氏度的符号。该程序不断从DHT11传感器读取实时温湿度数据并更新到LCD1602显示屏上,循环执行这些操作,以达到实时显示环境温湿度变化的效果。

主程序代码如下。

#include "reg51.h"
#include "lcd1602.h"
#include "dht11.h"

unsigned int* dht;

void main()
{	
	LCD_Init();
	while(1)
	{
		
		dht=DHT11_receive();
		LCD_ShowNum(1,1,dht[0],2);//湿度
		LCD_ShowString(1,3,"%RH");
		LCD_ShowNum(2,1,dht[1],2);//温度
		LCD_ShowString(2,3,"^C");		

	}

}

4.2 温湿度采集模块程序设计

在主程序设计中,温湿度采集模块主要用到了DHT11_receive()函数,用于接收DHT11传感器发送的40位数据并提取其中的温度和湿度信息。这个函数返回一个指向两个元素的无符号整数数组的指针。定义了无符号字符变量用于存储接收到的湿度和温度数据的高八位和低八位,以及校正位,定义了一个无符号整数数组DHT,初始值为0,用于最后存储湿度和温度。调用DHT11_start()函数开始与DHT11传感器通信。判断Data是否为低电平(0),进入数据接收过程。如果Data为0:等待直到Data拉高,即等待传感器响应。调用延时函数DHT11_delay_us(40)等待80微秒。依次调用DHT11_rec_byte()四次,接收湿度高八位、湿度低八位、温度高八位和温度低八位的数据。调用DHT11_rec_byte()接收校正位数据以用于校正检测。调用DHT11_delay_us(25)延时25微秒表示接收完成。通过校正公式(R_H + R_L + T_H + T_L) == revise进行数据校验。如果校验成功:将湿度高位和低位分别赋值给RH和RL。将温度高位和低位分别赋值给TH和TL。将湿度和温度分别存入DHT数组的第一个和第二个位置。最后,函数返回指向DHT数组的指针,获得温度和湿度数据。

函数代码如下。

unsigned int* DHT11_receive()      //接收40位的数据
{
    unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
	  unsigned int DHT[2]=0;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待拉高
        DHT11_delay_us(40);  //拉高后延时80us
        R_H=DHT11_rec_byte();    //接收湿度高八位
        R_L=DHT11_rec_byte();    //接收湿度低八位
        T_H=DHT11_rec_byte();    //接收温度高八位
        T_L=DHT11_rec_byte();    //接收温度低八位
        revise=DHT11_rec_byte(); //接收校正位

        DHT11_delay_us(25);    //结束

        if((R_H+R_L+T_H+T_L)==revise)      //校正
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
        DHT[0] = RH;
        DHT[1] = TH;
    }
		return DHT;
}

 4.3 LCD显示屏程序设计

LCD显示屏在主函数中首先进行通过调用LCD_Init()函数进行LCD显示屏的初始化,在LCD初始化函数中,首先使用代码LCD_WriteCommand(0x38),设置LCD的工作模式,设置为8位数据接口,显示两行,每行16个字符,并且使用的是5x7像素的字体。然后使用代码LCD_WriteCommand(0x0c)设置LCD的显示状态,在这个状态下,LCD的显示是开启的,光标是关闭的,并且光标不会闪烁。然后使用代码LCD_WriteCommand(0x06)设置LCD的光标和显示的移动方式,在这个设置下,当有数据写入时,光标会自动移动到下一个位置,而不会移动整个显示的内容。然后使用代码LCD_WriteCommand(0x01)清除LCD屏幕上的所有内容,并将光标移动到第一行的开始位置。以上就完成了LCD显示屏的设计。

函数代码如下。

void LCD_Init()
{
	LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
	LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关
	LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动
	LCD_WriteCommand(0x01);//光标复位,清屏
}

在主程序设计中,还使用了void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)函数,该函数有四个参数,该函数接收四个参数:Line表示起始行位置,范围是1到2;Column表示起始列位置,范围是1到16;Number是要显示的数字,范围是0到65535;Length是要显示数字的长度,范围是1到5。在函数内部,通过调用LCD_SetCursor设置显示位置,然后利用一个循环逐位显示数字的每一位,通过调用LCD_WriteData将每一位数字写入到显示屏上,利用除法和取模操作来提取每一位数字,并通过将其转换为字符显示在LCD1602上。

函数代码如下。

void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');
	}
}

 在主程序设计中,也使用了void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)函数在LCD1602指定位置开始显示所给字符串。该函数接收三个参数,Line表示起始行位置,范围是1到2;Column表示起始列位置,范围是1到16;String是要显示的字符串。在函数内部,通过调用LCD_SetCursor设置显示位置,然后利用一个循环逐个字符地显示字符串。通过检查字符串中的每一个字符(直到遇到空字符'\0'),调用LCD_WriteData将每个字符写入到显示屏上,从而将整个字符串显示在LCD1602上。

函数代码如下。

void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=0;String[i]!='\0';i++)
	{
		LCD_WriteData(String[i]);
	}
}

5.系统测试

系统上电后,仿真电路中的LCD显示屏会实时显示DHT11温湿度传感器的数据,如下图2所示。

图2 系统上电界面

如下图3所示,当温湿度数据发生变化时,LCD显示屏的数据也会实时发生变化。

图3 温湿度变化

6.结束语

通过本项目的深入研究和系统测试,我们成功地设计并实现了一个基于AT89C51单片机、LCD1602显示屏和DHT11温湿度传感器的实时温湿度监测系统,该系统不仅能够准确读取和显示环境温湿度数据,而且具有简单可靠的硬件电路设计,其核心控制单元——AT89C51单片机通过与LCD1602显示屏和DHT11温湿度传感器的集成,利用proteus进行仿真电路设计,确保了系统的高效运行和精确数据展示。

硬件电路设计方面,AT89C51单片机作为系统的核心控制单元,结合晶振和电容组成的时钟信号电路、复位电路、以及连接DHT11传感器和LCD1602显示屏的数据传输电路,确保了数据的准确采集和显示;DHT11传感器的温湿度数据通过单片机的I/O口传输到主控单元,并且LCD1602显示屏通过与单片机的数据、控制引脚直接连接,实现了系统的稳定性和高效性。

在软件设计方面,首先通过包括必要的头文件以及定义指向无符号整数数组的指针,处理温湿度数据的存储和传输,并且在main函数中,通过反复调用LCD_Init()函数初始化LCD1602显示屏、DHT11_receive()函数读取DHT11传感器的数据、LCD_ShowNum()函数和LCD_ShowString()函数在LCD1602显示屏上逐位、逐字符地显示温湿度数据显示,确保了实时环境数据的准确展示;温湿度采集模块设计方面,利用DHT11_receive()函数接收和校验DHT11传感器发送的温湿度数据,保证数据的精确和可靠性;在LCD显示屏的初始化和显示数据操作中,通过一系列设置命令和数据写入操作,实现了数据的直观、清晰显示。

经过系统测试,上电时,LCD1602显示屏能够实时显示来自DHT11温湿度传感器的温湿度数据,当传感器检测到环境温湿度发生变化时,显示屏的数据也会同步更新,证明了系统在数据采集、传输和显示方面的有效性和可靠性。

源码、仿真、文档视频等资料下载链接

基于51单片机设计的温湿度采集检测系统仿真&源码&文档视频.zip(毕设/课设/竞赛/实训/项目开发)资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89610881

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

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

相关文章

makefile(1)

文章目录 概述简单Makefilemakefile三要素makefile:工作原理编译程序 小结 概述 makefile这个编译在c中很常见,看下操作系统,都是基于makefile编译的。来简单看下, 这个就不看了,每一个模块下都有一个对应的makefile…

前端:javaScript基础知识

一、输出语句 ①window.alert():弹出框 ②ducument.write():写入HTML输入 ③console.log():在浏览器控制台输出 二、声明变量 ①使用关键字var来声明变量 ②javaScript是一门弱类型语言,变量可以存放不同类型的值 ③变量需要遵…

【Python】字符串练习题及代码示例

1、使用while循环实现对字符串中每个字符进行输出。 代码示例: 2、请将代码实现如下进制的转换。 (1)v1675,请将v1转换为二进制。 代码: 注意:将十进制数转换为二进制数的方法是:bin(a),a是整型&#x…

使用 addRouteMiddleware 动态添加中间

title: 使用 addRouteMiddleware 动态添加中间 date: 2024/8/4 updated: 2024/8/4 author: cmdragon excerpt: 摘要:文章介绍了Nuxt3中addRouteMiddleware的使用方法,该功能允许开发者动态添加路由中间件,以实现诸如权限检查、动态重定向及…

html+css 实现hover双层按钮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…

AI人工智能开发环境配置

AI人工智能 为什么使用Python来开发AI 人工智能被认为是未来的趋势技术。 已经有了许多应用程序。 因此,许多公司和研究人员都对此感兴趣。 但是这里出现的主要问题是,在哪种编程语言中可以开发这些 AI 应用程序? 有各种编程语言&#xff0c…

Stable Diffusion绘画 | 图生图-基础使用介绍—提示词反推

按默认设置直接出图 拖入图片值图生图框中,保持默认设置,直接生成图片,出图效果如下: 因为重绘幅度0.7,所出图片与原图有差异,但整体的框架构图与颜色与原图类似。 输入关键词后出图 在正向提示词中输入…

PMP–知识卡片--Scrum框架

定义 Scrum框架包含由产品负责人、开发团队、敏捷专家构成的Scrum团队,以及活动工件。框架中的每一个组件都服务于一个特定的目标,且是Scrum成功和运用的基本要素。 Scrum的规则将角色、活动和工件绑定在一起,管理它们之间的关系和交互。 …

JavaEE 第2节 线程安全知识铺垫1

目录 一、通过jconsole.exe查看线程状态的方法 二、Thread类的几种常见属性 三、线程状态 一、通过jconsole.exe查看线程状态的方法 通过jconsole查看线程状态非常实用的方式 只要你安装了jdk,大致按照这个目录就可以找到这个可执行程序: 然后双击这…

YOLOv10改进 | 注意力篇 | YOLOv10引入24年最新的上下文锚注意力机制(CAA),并构建C2f_CAA(适用于小目标检测)

1. CAA介绍 1.1 摘要:遥感图像中的目标检测面临着越来越多的挑战,包括目标尺度的变化和背景的多样性。先前的方法试图通过扩大骨干的空间感受野来解决这些挑战,无论是通过大核卷积还是扩张卷积。然而,前者通常会引入相当大的背景噪声,而后者则会产生过于稀疏的特征表示。…

[CTF]-PWN:ORW题型综合解析

经典ORW: 例题(极客大挑战 2019 Not Bad): 这里使用mmap函数创造了一个内存映射区域 从地址0x123000开始,大小位0x1000 权限为可写可执行(可读0x1,可写0x2,可执行0x3)…

Halcon 二维匹配

匹配:在训练图像中呈现一个所谓的模板。系统从这个模板中派生出一个模型,通过使用该模型来定位于搜索图像中的相似模板对象。此方法能够处理打光、杂乱、位置和旋转变换的图像。 匹配优点:鲁棒性和灵活性。匹配不需要对目标进行任何形式的分割…

50 选择结构

常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构及嵌套的分支结构,也可以构造跳转表来实现类似的逻辑。循环结构和异常处理结构中也可以实现带有 else 子句,可以看作特殊形式的选择结构。 所有的 Python 合法表达式都可以作为条件表达…

MySQL数据库入门:掌握数据管理的关键步骤!

前言 竹竹零将带您深入探索MySQL数据库的基础知识和实用技能,一同走进Java逻辑控制语句的 学习吧!!! 本节目标 数据库的操作:创建数据库、删除数据库常用数据类型表的操作:创建表、删除表 1. 数据库的操作…

跨域以及解决方案

禹神:一小时彻底搞懂跨域&解决方案_哔哩哔哩_bilibili该直播回放对跨域的多种解决方案进行了梳理,内容包括:分析同源策略、分析预检请求、跨域的多种解决方案(CORS、JSONP、代理)、同时也从后端人员角度梳理了各种…

计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置

1、场景需求分析 针对6.18,11.11这种场景,平台一次性发布500w张优惠券,或者对于锁单用户统一发下100w张确认信息,同时我们平时有抢购茅台的场景,京东一次性发布10w个验证码,主要是针对高并发多线程大数据批处理任务的场景,一般用于二维码、优惠券、邮件、短信等场景。 …

MyBatis的适用场合与优势

MyBatis的适用场合与优势 1、适用场合2、优势 💖The Begin💖点点关注,收藏不迷路💖 1、适用场合 SQL灵活控制: 适合需要精确控制SQL语句生成和执行的项目。 高性能需求: 对于性能要求高的系统,…

02:【stm32】工程模板的创建

工程模板的创建 1、创建工程文件2、创建STM32的启动文件3、Keil软件里面添加启动文件4、创建我们编写程序的文件夹5、创建存放标准库函数的文件夹6、Keil软件的一些设置 1、创建工程文件 2、创建STM32的启动文件 ①创建Start文件夹用来保存STM32的启动文件 ②下载STM32的固件库…

Apple在Swift中引入同态加密

--->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<--- 在计算过程中确保数据隐私和安全性很重要&#xff0c;尤其是在使用云服务。传统的加密方法要求在处理数据之前对数据进行解密&#xff0c;使其面临潜在风险。同态加密是隐私计算的分支&#xf…