DHT11数字温湿度传感器.docx

上传人:b****8 文档编号:11074622 上传时间:2023-02-24 格式:DOCX 页数:13 大小:63.66KB
下载 相关 举报
DHT11数字温湿度传感器.docx_第1页
第1页 / 共13页
DHT11数字温湿度传感器.docx_第2页
第2页 / 共13页
DHT11数字温湿度传感器.docx_第3页
第3页 / 共13页
DHT11数字温湿度传感器.docx_第4页
第4页 / 共13页
DHT11数字温湿度传感器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DHT11数字温湿度传感器.docx

《DHT11数字温湿度传感器.docx》由会员分享,可在线阅读,更多相关《DHT11数字温湿度传感器.docx(13页珍藏版)》请在冰豆网上搜索。

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);

}

}

H文件

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_(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_(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_(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_(DATA_MODE);

//set8bitdatatransmissionmode

LCD_en_(OPEN_SCREEN);

//opendisplay(enablelcddisplay)

LCD_en_(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

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

当前位置:首页 > 高等教育 > 经济学

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

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