【Proteus仿真】基于DHT11的温度测量,LCD1602显示

【Proteus仿真】基于DHT11的温湿度测量,LCD1602显示

测试工具

软件:Proteus8.13

仿真器件:蜂鸣器警报,按键输入,DHT11温湿度,传感器LCD1602显示。

功能叙述

利用DHT11检测环境中的温湿度,并实时显示到LCD1602上,且在实时显示数据的后面,还显示有当前设定的预警上限值。实时数据一旦大于设定的预警上限的值,就会触发蜂鸣器。独立按键,可以改变温湿度的上限预警值。

仿真图示

仿真运行原图

原理图在未运行仿真时,LCD1602有点显示不出,运行了就能显示了。

仿真原图

原图中数据加标注
仿真标注后图

代码节选

代码跨越库有点多,这里就先放预览图。具体的可以看文件。
还粘贴了部分代码(不贴部分代码,字数少了,不给发)

代码预览
/**************************************************************************************
实验名称:DHT11温湿度检测(LCD1602显示)
接线说明:DHT11温湿度模块-->单片机IO
		  VCC-->5V
		  DATA-->P2.3
		  GND-->GND	
实验现象:下载程序后,LCD1602上显示DHT11温湿度传感器采集的温度和湿度值																		  
***************************************************************************************/
#include "public.h"
#include "lcd1602.h"
#include "dht11.h"

//LCD1602引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;

//LCD1602函数声明:
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
//要用函数声明
void Button1();	//按钮1检测
void Button2();	//按钮2检测
void Button3();	//按钮3检测
void Button4();	//按钮4检测
void BUZ_Use(char Num);		//蜂鸣器控制
void Delay(unsigned int xms);

/*******************************************************************************
变量区
*******************************************************************************/
int temp_Max=30;
int humi_Max=90;

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	u8 temp=0,humi=0;
	u8 i=0;
	u8 temp_buf[3],humi_buf[3];

	lcd1602_init();
	while(DHT11_Init())	//检测DHT11是否存在
	{
		lcd1602_show_string(0,0,"Error");		
	}
	lcd1602_show_string(0,0,"Temp:   C");
	lcd1602_show_string(0,1,"Humi:   %RH");
	

	while(1)
	{
		Button1();	//按钮1检测
		Button2();	//按钮2检测
		Button3();	//按钮3检测
		Button4();	//按钮4检测
		i++;
		if(i%200==0)
		{
			DHT11_Read_Data(&temp,&humi);
			temp_buf[0]=temp/10+0x30;	
			temp_buf[1]=temp%10+0x30;
			temp_buf[2]='\0';
			lcd1602_show_string(6,0,temp_buf);
			LCD_ShowNum(1,14,temp_Max,2);

			humi_buf[0]=humi/10+0x30;	
			humi_buf[1]=humi%10+0x30;
			humi_buf[2]='\0';
			lcd1602_show_string(6,1,humi_buf);
			LCD_ShowNum(2,14,humi_Max,2);
		}
		delay_ms(1);
		if(temp>=temp_Max || humi>=humi_Max)
		{
			BUZ_Use(0);
		}
		else
		{
			BUZ_Use(1);
		}
	}
}

//蜂鸣器控制
//0:响声   1:不响
void BUZ_Use(char Num)
{
	switch(Num)
	{
		case 0:
			P10=0;
		break;
		case 1:
			P10=1;
		break;
	}
}

void Button1()
{
	if(P11==0)			//如果Button1按键按下
	{
		Delay(20);		//延时消抖
		//按键1事件
		temp_Max--;
		while(P11==0);	//松手检测
		Delay(20);		//延时消抖
	}
}

void Button2()
{
	if(P12==0)			//如果Button1按键按下
	{
		Delay(20);		//延时消抖
		//按键2事件
		temp_Max++;
		while(P12==0);	//松手检测
		Delay(20);		//延时消抖
	}
}

void Button3()
{
	if(P13==0)			//如果Button1按键按下
	{
		Delay(20);		//延时消抖
		//按键3事件
		humi_Max--;
		while(P13==0);	//松手检测
		Delay(20);		//延时消抖
	}
}

void Button4()
{
	if(P14==0)			//如果Button1按键按下
	{
		Delay(20);		//延时消抖
		//按键4事件
		humi_Max++;
		while(P14==0);	//松手检测
		Delay(20);		//延时消抖
	}
}
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

问题答疑

时间为2024/1/2,有部分读者在使用工程时出现了编译后无法使用的问题,随后我进行尝试没发现问题,工程能正常运行。

关于【Proteus仿真】DHT11+LCD1602问题答疑

工程源码

链接:https://pan.baidu.com/s/12pteUJCeVncpl9nny5l3Ow
提取码:n9b9

  • 10
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 42
    评论
### 回答1: DHT11是一款常用的湿度传感器,STM32是一款常用的单片机,而Proteus是一款常用的电子产品仿真软件。 DHT11传感器使用数字信号输出,可以方便地测量周围环境的温度和湿度。它具有低功耗、高准确度、价格便宜等特点,因此被广泛应用于各种湿度监测系统中。 而STM32是一种基于ARM Cortex-M内核的32位单片机,具有较高的性能和灵活性。它的开发环境丰富,支持各种开发工具和编程语言,因此受到了广大开发者的喜爱。在使用DHT11传感器时,可以通过STM32的GPIO口读取传感器输出的数字信号,并进行相应的处理和显示Proteus是一款功能强大的电子产品仿真软件,它可以对电子电路进行软件仿真,方便开发者在软件环境下进行实验和调试。在使用DHT11和STM32时,我们可以在Proteus中建立一个虚拟的电路板,并将STM32和DHT11连接到电路板上,通过仿真功能,模拟整个系统的工作过程,从而验证系统的正确性和稳定性。 总之,DHT11和STM32在湿度监测系统中可以很好地配合使用,而Proteus作为一款强大的电子产品仿真软件,可以帮助开发者在软件环境下验证系统的正确性,提高开发效率。 ### 回答2: DHT11是一款数字湿度传感器,能够测量环境中的温度和湿度,并将数据以数字形式输出。它采用单一总线通信协议,通过引脚与控制器进行连接。STM32是一类32位微控制器,具有高性能、低功耗、丰富的外设和强大的处理能力,广泛应用于各种电子设备中。 在Proteus软件中,我们可以利用仿真功能来模拟DHT11与STM32的连接和通信过程。首先,我们需要在Proteus的元件库中找到DHT11传感器和STM32微控制器,并将它们拖放到工作区中。接下来,我们可以使用导线工具将DHT11的引脚与STM32的引脚进行连接。一般来说,DHT11的数据引脚需要连接到STM32的GPIO引脚,通常选择一个可用的数字输入引脚。然后,我们需要在STM32的程序中编写代码,以实现与DHT11的通信和数据读取。 在编程中,我们需要使用STM32的相关函数和库来设置GPIO引脚的输入输出状态、发送信号以及从DHT11读取数据。具体的代码和函数使用方式可以参考STM32的开发手册和DHT11的数据手册。一般来说,我们需要先发送一个启动信号给DHT11,然后等待一段时间,再读取DHT11返回的湿度数据。最后,我们可以通过串口或LCD显示屏等方式输出读取到的湿度数据。 通过在Proteus中进行仿真,我们可以验证STM32和DHT11的正常连接和通信。我们可以观察湿度数据的变化,并与实际环境中的湿度进行对比,以验证DHT11的准确性和可靠性。通过这种方式,我们可以在软件环境中先进行验证和调试,从而节省了实际硬件调试的时间和成本。 总的来说,DHT11和STM32在Proteus中的应用可以帮助我们进行湿度监测和控制系统的设计和开发。通过仿真验证和调试,我们可以确保系统的可靠性和性能,并进行相关的优化和改进。这种综合应用可以有效提高开发效率,降低开发成本,同时提供了一种方便的方法来学习和理解数字湿度传感器和微控制器的工作原理。 ### 回答3: DHT11是一种数字湿度传感器,主要用于测量环境的温度和湿度。STM32是一系列32位的单片机,其具有高性能、低功耗和丰富的外设接口等特点。Proteus是一款电子电路设计软件,可用于模拟和验证电路的功能。 在使用DHT11传感器时,可以通过STM32单片机来读取湿度数据,并通过Proteus来模拟整个电路的运行情况。首先,需要将DHT11传感器的数据引脚连接到STM32单片机的GPIO口。然后,在STM32中编写相应的程序,使用合适的GPIO配置和协议来与传感器进行通信,并读取传感器返回的湿度数据。可以使用C语言或者其他编程语言来实现这个功能。 在Proteus中,可以创建一个新的工程,并添加STM32单片机DHT11传感器的模型。然后,根据实际连接情况,在电路图中完成相应的连线。接下来,可以设置STM32单片机的引脚和时钟配置,并在Proteus中运行仿真来验证电路的功能。通过仿真可以模拟单片机与传感器的通信过程,并查看湿度数据的变化情况。 综上所述,使用DHT11传感器、STM32单片机Proteus软件可以实现湿度监测系统的设计和仿真。通过合理的硬件连接和软件编程,可以准确地读取环境的湿度数据,并通过仿真来验证整个电路的功能。这样的系统在农业、环境监测等领域具有广泛的应用前景。
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值