基于51单片机+DHT11温湿度+LCD1602显示

发布者:ikfnpo最新更新时间:2022-09-20 来源: csdn关键字:51单片机  LCD1602显示 手机看文章 扫描二维码
随时随地手机看文章

DHT11温湿度相关介绍

DHT11产品概述

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快 响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的 湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内 部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集 成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使 其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚 封装。连接方便,特殊封装形式可根据用户需求而提供。


1.测量范围

image.png

2.接口说明

建议连接线长度短于20米时用5K上拉电阻 ,大于20米时根据实际情况使 用合适的上拉电阻

3.电源引脚

DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此 期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去 耦滤波。


4.串行接口 (单线双向)

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次 通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下: 一次完整的数据传输为40bit,高位先出。

数据格式: 8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据 +8bit校验和 数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据”所得结果的末8位。


5.相关时序及代码

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主 机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集, 用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集, 如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后 转换到低速模式。

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必 须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束 后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换 到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。

用代码实现上述时序图(起始信号):


DATA = 1; //先高电平维持一小段时间

delay30us();//维持30us

DATA = 0; //拉低电平至少18ms

delay20ms(); //这里给了20ms

DATA=1; //拉高电平维持20-40us 

delay30us(); //我这里维持30us

DATA=1; //拉高电平等待DHT低电平响应

if(DATA == 0) //判断DHT是否响应

{

while(!DATA); //等待DHT80us低电平响应信号过去

while(DATA); //等待DHT80us高电平信号过去

/*然后就开始接收DHT11温湿度数据*/


}


总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉 高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定 了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有 响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线 50us,随后总线由上拉电阻拉高进入空闲状态。

总共数据为40位 8位的湿度整数部分,8位的湿度小数部分,8位的温度整数部分,8位的温度小数部分。8位的校验位(检测是否接收的是正确数据)

下面代码是获取每8位的代码


unsigned char DHT_receive_data()

{

unsigned char i;

unsigned char dat=0;  //0000 0000


for(i=0;i<8;i++)  //循环8次

{

while(!DATA); //等待DHT 50us低电平信号过去

delay30us(); //延时大概30us 如何还是高电平 则为1 


dat<<=1; //左移一位 因为数据是从高位开始传

if(DATA == 1)

{

dat|=0x01;

}

/* else

{

dat|=0x00;

}  

*/

while(DATA); //等待DHT 拉低 准备下一位开始


}

return dat;

}


6. DHT11引脚说明

image.png

程序代码

main.c

#include

#include "lcd1602.h"

#include "delay.h"


sbit DATA = P2^0; //DHT11 数据引脚

unsigned char ret;

unsigned char DHTDATA[5] = {''}; //存放温湿度40位 数据

unsigned char code array[] = {"humi:"}; //湿度

unsigned char code array1[] = {"temp:"}; //温度



/*DHT11接收数据函数*/

unsigned char DHT_receive_data()

{

unsigned char i;

unsigned char dat=0;  //0000 0000


for(i=0;i<8;i++)

{

while(!DATA); //等待DHT 50us低电平信号过去

delay30us(); //延时大概30us 如何还是高电平 则为1


dat<<=1; //左移一位 因为数据是从高位开始传

if(DATA == 1)

{

dat|=0x01;

}

/* else

{

dat|=0x00;

}  

*/

while(DATA); //等待DHT 拉低 准备下一位开始


}

return dat;

}



/*DHT11读取函数*/

void DHT_receive()

{

unsigned char R_H,R_L,T_H,T_L,CHECK;

/*主机发送信号*/

DATA = 1;

delay30us();

DATA = 0;

delay20ms(); //延时大于18ms

DATA=1;

delay30us(); //延时30us  20-40us 均可


DATA=1;

if(DATA == 0)   //判断DHT是否进入响应

{


while(!DATA);    //等待从机80us低电平响应信号过去

while(DATA); //等待从机80us高电平信号过去


    /*获取温湿度数据*/

R_H = DHT_receive_data(); //湿度整数部分

R_L = DHT_receive_data(); //湿度小数部分

T_H = DHT_receive_data(); //温度整数部分

T_L = DHT_receive_data(); //温度小数部分


CHECK = DHT_receive_data(); //校验位


DATA=0; //当最后一bit数据传送完毕后,DHT11拉低总线 50us

delay55us(); //这里延时55us

DATA=1; //随后总线由上拉电阻拉高进入空闲状态。

/*校验接收到的数据是否正确*/

if((R_H + R_L + T_H + T_L) == CHECK) 

{

DHTDATA[0] = R_H;

DHTDATA[1] = R_L;

DHTDATA[2] = T_H;

DHTDATA[3] = T_L;


DHTDATA[4] = CHECK;

}

}

}


/*显示DHT11数据函数*/

void DHT_display()

{

write_com(0x85);

write_data(DHTDATA[0]/10 + 0x30); //湿度整数的十位

write_com(0x86);

write_data(DHTDATA[0]%10 + 0x30); //湿度整数的个位

write_com(0x87);

write_data('.');


write_com(0x88);

write_data(DHTDATA[1]/10 + 0x30); //湿度小数

write_com(0x89);

write_data('%');


write_com(0xC5);

write_data(DHTDATA[2]/10 + 0x30); //温度整数的十位

write_com(0xC6);

write_data(DHTDATA[2]%10 + 0x30); //温度整数的个位

write_com(0xc7);

write_data('.');


write_com(0xC8);

write_data(DHTDATA[3]/10 + 0x30); //温度小数

write_com(0xC9);

write_data(0xDF); //‘度’符号


write_com(0xca);

write_data('C');

}




/*主函数入口*/

void main()

{

unsigned char i;

init_lcd(); //初始化1602

write_com(0x80);  //第一行第一个开始显示 humi:

for(i=0;i<5;i++)

{

write_data(array[i]);

}


write_com(0xc0);  //第二行第一个开始显示 temp:

for(i=0;i<5;i++)

{

write_data(array1[i]);

}


while(1)

{

delay1s(); //等待 1s 以越过不稳定状态

DHT_receive();   //DHT11读取函数

DHT_display();//1602显示温湿度

}

}


项目展示

关键字:51单片机  LCD1602显示 引用地址:基于51单片机+DHT11温湿度+LCD1602显示

上一篇:基于51单片机+DS18B20温度测温器+LCD1602显示
下一篇:基于51单片机+红外遥控解码+LCD1602显示

推荐阅读最新更新时间:2024-11-10 09:18

51单片机-流水灯
[单片机]
<font color='red'>51单片机</font>-流水灯
uart接口_基于51单片机的UART串口通信
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信
[单片机]
uart接口_基于<font color='red'>51单片机</font>的UART串口通信
51单片机+hx711电子秤
单片机源程序如下: #include reg52.h #include intrins.h #include string.h #include main.h #include LCD1602.h #include HX711.h #include eeprom52.h #define uchar unsigned char #define uint unsigned int unsigned long HX711_Buffer = 0; unsigned long Weight_Maopi = 0; unsigned long Weight_Maopi_0 = 0; long Weight_Shiwu =
[单片机]
<font color='red'>51单片机</font>+hx711电子秤
C51单片机串口通讯的硬件电路图
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如下图所示。
[单片机]
C<font color='red'>51单片机</font>串口通讯的硬件电路图
51单片机教程第2讲_下载程序
stc是国内最大的51单片机提供商,他的产品也是非常的丰富,应用广泛,所以我们以stc51单片机为例进行学习。其它厂家的51单片机大同小异。 stc51单片机都可以使用串口下载程序,即ISP下载。串口分为电脑的串口和单片机的串口。每个单片机都有串口,外部表现为2个引脚,即RXD和TXD。以前,每个电脑上都有串口,现在,家用型电脑已经不配置串口,只有工控电脑还带有串口。但是,电脑不带串口并不会影响你下载程序,你不必非要买一个带有串口的电脑。因为现在市面上,有一种线,叫做“USB转串口线”,它可以把你电脑的USB口变成串口,和以前电脑上的串口外表和功能一模一样,如下图所示:   DB9串口头一共9个引脚,其中两个是RXD 和TXD
[单片机]
51单片机学习:外部中断0实验
实验名称:外部中断0实验 接线说明: 实验现象:下载程序后,当按下K3键可控制D1指示灯亮灭 注意事项:将红外接收传感器取下,防止对P3.2口干扰 ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义LED1管脚 sbit LED1=P2^0; //定义独立按键K3控制脚 sbit KEY3=P3^2; /**********
[单片机]
51单片机多任务机制的实现策略
0 引言 51单片机在微型智能控制系统中应用很广,随着人们对控制系统的要求不断提高,51单片机的功能局限越发明显。特别是51系列单片机不具有实时多任务支持功能,大大限制其在控制系统中的进一步发展。而多任务恰恰是现在操作系统的突出特点,将多任务机制引入51单片机系统,可以大大提高先有单片机系统的工作效率,满足多任务要求。 1 多任务机制在51单片机上的实现原理 多任务要求在同一时间内执行多个任务,如果只有一个处理,计算机并不是真的在给定时间段内运行多个程序,而是按时间片在各个程序间飞快切换,由于求欢非常快,所以就有了在同一时间内运行多个程序的错觉了。 就操作系统的特点来看,多任务系统不外乎两种方式:协同式和抢占式。在一个协同式多
[单片机]
<font color='red'>51单片机</font>多任务机制的实现策略
基于51单片机的炭黑复合导电材料的电阻一温度测量系统
0 引 言 随着电子工业及信息技术等产业的迅速发展,对于具有导电功能的高分子材料的需求越来越迫切。导电复合材料具有质量轻、无锈蚀、易于加工成各种复杂形状,尺寸稳定性好,电导率在较大范围内可调,易于大批量生产以及价格便宜等特点,因此广泛应用于抗静电、微波吸收、自控温发热材料、电磁波屏蔽等领域。其中,炭黑复合导电材料是目前应用最广,用量最大的一种。在此以AT89S51单片机为核心,设计一种简易的测量炭黑复合导电材料电阻和温度系统,系统框图如图1所示。 单片机通过热电偶放大器芯片采集当前的温度值;通过电压转换电路采集电阻值,送到FM24C02以备查询,LCD显示当前的电阻和温度情况,使用者可以方便地读出电阻和温度的变化,还可以通
[单片机]
基于<font color='red'>51单片机</font>的炭黑复合导电材料的电阻一温度测量系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved