DHT11资料.docx

上传人:b****8 文档编号:9038966 上传时间:2023-02-02 格式:DOCX 页数:9 大小:69.01KB
下载 相关 举报
DHT11资料.docx_第1页
第1页 / 共9页
DHT11资料.docx_第2页
第2页 / 共9页
DHT11资料.docx_第3页
第3页 / 共9页
DHT11资料.docx_第4页
第4页 / 共9页
DHT11资料.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

DHT11资料.docx

《DHT11资料.docx》由会员分享,可在线阅读,更多相关《DHT11资料.docx(9页珍藏版)》请在冰豆网上搜索。

DHT11资料.docx

DHT11资料

1、DHT11产品概述

      DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT11传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。

单线制串行接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。

产品为4针单排引脚封装。

连接方便,特殊封装形式可根据用户需求而提供。

2、应用领域

          ►暖通空调         ►测试及检测设备

     ►汽车                ►数据记录器

     ►消费品           ►自动控制

     ►气象站             ►家电

     ►湿度调节器     ►医疗

     ►除湿器应用领域

3、接口说明   

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

4、电源引脚

    DHT11的供电电压为3-5.5V。

传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。

电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。

5、串行接口(单线双向)

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

一次完整的数据传输为40bit,高位先出。

数据格式:

8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和

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

6、封装信息

7、DHT11引脚说明

8、DHT11温湿度1602液晶显示程序示例

主程序:

#include

#include

#include

#include

#include

typedefunsignedcharU8;          

typedefunsignedint  U16;  

U8U8FLAG;

U8U8count,U8temp;

U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8U8comdata;

sbitP2_0=P2^0;

sbitP2_1=P2^1;

sbitP2_2=P2^2;

sbitP2_3=P2^3;

unsignedcharstr1[]="ShiDu:

";

unsignedcharstr2[]="WenDu:

";

voidDelay(U16j)

   {     U8i;

    for(;j>0;j--)

  {

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

  }

   }

voidDelay_10us(void)

     {

       U8i;

       i--;

       i--;

       i--;

       i--;

       i--;

       i--;

      }

       voidCOM(void)

     {   

        U8i;

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

    {

       U8FLAG=2;

   //----------------------

         P2_1=0;//T

         P2_1=1;//T

    //----------------------

   while((!

P2_0)&&U8FLAG++);

   Delay_10us();

   Delay_10us();

  //Delay_10us();

    U8temp=0;

     if(P2_0)U8temp=1;

     U8FLAG=2;

  while((P2_0)&&U8FLAG++);

  

    //----------------------

          P2_1=0;//T

          P2_1=1;//T

   //----------------------

   //超时则跳出for循环   

   if(U8FLAG==1)break;

   //判断数据位是0还是1

  //如果高电平高过预定0高电平值则数据位为1   

    U8comdata<<=1;

      U8comdata|=U8temp;       //0

     }//rof

   

}

//--------------------------------

//-----湿度读取子程序------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位==U8T_data_H------

//----温度低8位==U8T_data_L------

//----湿度高8位==U8RH_data_H-----

//----湿度低8位==U8RH_data_L-----

//----校验8位==U8checkdata-----

//----调用相关子程序如下----------

//----Delay();,Delay_10us();,COM();

//--------------------------------

voidRH(void)

{

  //主机拉低18ms

      P2_0=0;

   Delay(180);

   P2_0=1;

//总线由上拉电阻拉高主机延时20us

   Delay_10us();

   Delay_10us();

   Delay_10us();

   Delay_10us();

//主机设为输入判断从机响应信号

   P2_0=1;

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行  

   if(!

P2_0)  //T!

  

   {

   U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否结束

   while((!

P2_0)&&U8FLAG++);

   U8FLAG=2;

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

   while((P2_0)&&U8FLAG++);

//数据接收状态  

   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;

   P2_0=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;

   }//fi

   }//fi

}

voidmain()

{

U8shidu_shi,shidu_ge,wendu_shi,wendu_ge;

  LCD_init();

  delay_nms

(2);

  LCD_write_string(0,LINE1,str1);

  LCD_write_string(0,LINE2,str2);       

while

(1)

{

      RH();

   shidu_shi=0x30+U8RH_data_H/10;

         shidu_ge=0x30+U8RH_data_H%10;

        //shidu_xs=0x30+U8RH_data_L/10;

        wendu_shi=0x30+U8T_data_H/10;

        wendu_ge=0x30+U8T_data_H%10;

        //wendu_xs=0x30+U8T_data_L/10;

     LCD_write_char(6,0,shidu_shi);

        LCD_write_char(7,0,shidu_ge);

  //LCD_write_char(9,0,shidu_xs);

        LCD_write_char(6,1,wendu_shi);

  LCD_write_char(7,1,wendu_ge);

       //LCD_write_char(9,1,wendu_xs);

}

}

LCD显示头文件

ifndeflcd_H

#definelcd_H

#include

#include

/************************************/

//commonpart

#define  HIGH     1

#define  LOW      0

#define  TRUE     1

#define  FALSE     0

#define  ZERO     0

#define  MSB      0x80

#define  LSB      0x01

/************************************/

//lcdpart

#defineLINE1       0

#defineLINE2       1

#defineLINE1_HEAD      0x80

#defineLINE2_HEAD      0xC0

#defineDATA_MODE      0x38

#defineOPEN_SCREEN      0x0C

#defineDISPLAY_ADDRESS    0x80

#defineCLEARSCREEN      LCD_en_com(0x01)

/*************************************/

//changethispartatdifferentboard

#defineLCDIO    P1

sbitLCD1602_RS=P2^4;  

sbitLCD1602_RW=P2^5;

sbitLCD1602_EN=P2^6;

/********************************************************************/

voidLCD_Read_BF(void)

{

unsignedcharread=0;

LCD1602_RS=LOW;  //RS0

LCD1602_RW=HIGH;  //RW1

LCD1602_EN=HIGH;  //EN1ReadBF

LCDIO=0xFF;

do{

  read=LCDIO;

}while(read&MSB);

}

voidLCD_en_com(unsignedcharcommand)   //写指令

{

LCD_Read_BF();

LCD1602_RS=LOW;  //RS0

LCD1602_RW=LOW;  //RW0

LCD1602_EN=HIGH;//EN--\|/__Writecommand

LCDIO=command;

LCD1602_EN=LOW;

}

voidLCD_en_dat(unsignedchardat)  //写数据

{

LCD_Read_BF();

LCD1602_RS=HIGH;//RS1

LCD1602_RW=LOW;  //RW0

LCD1602_EN=HIGH;//EN--\|/__Writedata

LCDIO=dat;

LCD1602_EN=LOW;

}

voidLCD_set_xy(unsignedcharx,unsignedchary)

{

unsignedcharaddress;

if(y==LINE1)

  address=LINE1_HEAD+x;

else   

  address=LINE2_HEAD+x;

LCD_en_com(address);

}

voidLCD_write_char(unsignedx,unsignedchary,unsignedchardat)

{

LCD_set_xy(x,y);

LCD_en_dat(dat);

}

voidLCD_write_string(unsignedcharx,unsignedchary,unsignedchar*s)

{

LCD_set_xy(x,y);

while(*s)

{

  LCDIO=*s;

  LCD_en_dat(*s);  

  s++;

}

}

voidLCD_init(void)

{

LCD_en_com(DATA_MODE);

//set8bitdatatransmissionmode

LCD_en_com(OPEN_SCREEN);

//opendisplay(enablelcddisplay)

LCD_en_com(DISPLAY_ADDRESS);

//setlcdfirstdisplayaddress

CLEARSCREEN;

//clearscreen

}

#endif

延时子程序头文件

#ifndefDELAY_H

#defineDELAY_H

voiddelay_nms(unsignedintn)     

{

   unsignedinti=0,j=0;

   for(i=n;i>0;i--)

    for(j=0;j<1140;j++);

}

#endif

 

本程序本人亲自测试,绝对好用!

LCD1602第一行显示当前的湿度,第二行显示温度!

请各位放心下载!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1