proguy 发表于 2010-6-1 20:58:13

老男人成功应用国产温湿度数字探头DHT11成功晒下程序!感谢各位老大的教导!

功能:用Mega16读出温湿度数据显示到电脑上。
电路图:略(因为和18B20的连接图完全一样也是单总线,呵呵)
程序:传上来了!
感想:略
全部工程文件, IAR5.4
DHT11.rar(文件大小:29K)

小女子成功应用国产温湿度数字探头DHT11成功秀下板子晒下程序!感谢各位老大的教导!


//DHT11.c
#include "CPU_Config.h"
#include "DHT11.h"

ucharDHT11T_Data_H, DHT11T_Data_L, DHT11RH_Data_H, DHT11RH_Data_L;

ucharDHT11_ReadChar(void)
{
   uchar dat=0;
   uint count;   //计数防止死等

   for(uchar i=0;i<8;i++)       
   {
      count=2;
      while((!READ_DHT11)&&count++)    //等待50us低电平结束
         ;
      delay_us(40);   //40us

      dat <<= 1;      //50us低电平+28us高电平表示'0'
      if(READ_DHT11)    //50us低电平+70us高电平表示'1'
         dat |= 1;

      count=2;
      while((READ_DHT11)&&count++)
         ;

      if(count==1)      //超时则跳出for循环
         break;
   }
   return dat;
}

bool DHT11_GetRH(void)
{
   uchar TData_H_temp,TData_L_temp,RHData_H_temp,RHData_L_temp,CheckData_temp;
   uchar checktemp;
   uint count;

   SET_DDR_DHT11;
   CLR_OP_DHT11;
   delay_ms(18);   //主机拉低18ms
   SET_OP_DHT11;
   CLR_DDR_DHT11;
   delay_us(40);   //总线由上拉电阻拉高 主机延时20us
                     //主机设为输入 判断从机响应信号
   //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行       
   if(!READ_DHT11)
   {
      count=2;
      //判断从机是否发出 80us 的低电平响应信号是否结束       
      while((!READ_DHT11)&&count++)
         ;

      count=2;
      //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
      while((READ_DHT11)&&count++)
         ;

      RHData_H_temp = DHT11_ReadChar();
      RHData_L_temp = DHT11_ReadChar();
      TData_H_temp = DHT11_ReadChar();
      TData_L_temp = DHT11_ReadChar();
      CheckData_temp = DHT11_ReadChar();

      SET_DDR_DHT11;
      SET_OP_DHT11;

      checktemp = (RHData_H_temp + RHData_L_temp + TData_H_temp + TData_L_temp);
      if (checktemp == CheckData_temp)
      {
         DHT11RH_Data_H = RHData_H_temp;
         DHT11RH_Data_L = RHData_L_temp;
         DHT11T_Data_H = TData_H_temp;
         DHT11T_Data_L = TData_L_temp;
         return true;
      }
   }
   return false;
}

smartzou 发表于 2010-6-1 21:16:07

额,我失意了..倒塌

plaman801123 发表于 2010-6-1 21:49:59

DHT11在哈口气后,湿度值会不会变成零值?我最近用了一下,发现了上述问题。

plaman801123 发表于 2010-6-1 21:54:47

DHT11在哈口气后,湿度值会超出量程。我最近用了一下,发现了上述问题。比较郁闷!只能弃之不用!SHT11没有发现该情况。不知道你试过没有?我给奥松电子的技术支持打了电话,他支吾了半天说不出所以然,不过不错的是,他们寄给我两个样品,我明天再试试。

proguy 发表于 2010-6-1 21:56:02

啊, 一样的情况, DHT21也是这情况.

STM32_Study 发表于 2010-6-1 23:39:10

除了这个,还有没有廉价的湿度测量解决方案?

好像湿敏器件是需要用交流来驱动的?

chenhuanbang 发表于 2010-9-7 13:43:17

mark

skay_mcu 发表于 2010-9-30 10:12:24

问个问题

skay_mcu 发表于 2010-9-30 10:15:51

我最近也用玩DHT11传感器,只是我觉得DHT11的输出应该是BCD码,那要它显示的话应该先把读出来的数据变成十进制才对啊,
可是为那样做完之后,发现原本23度的温度,显示只为17~18度了,,,请问只是为什么呢??难道DHT11的输出数据已经是十进制的了??

danielmi 发表于 2010-9-30 12:35:20

回复【8楼】skay_mcu
-----------------------------------------------------------------------

就是十进制的!!

skay_mcu 发表于 2010-10-4 10:03:51

回复【9楼】danielmi
-----------------------------------------------------------------------

应该是16进制吧,可以直接用,因为我们接收数据的时候都是要判断0101的啊,十进制的话应该就不用判断了吧。。?

ztrx 发表于 2010-10-6 10:46:56

标记

dengxiaofeng 发表于 2010-10-6 16:46:21

我看到的资料是湿敏传感器是需要交流驱动 的   但是我用万用表 电阻挡测量时 哈气 阻值明显变化我怀疑 可以用测电阻的方法测量!!!正当 我准备试试的时候 那玩意 无意间 离奇的坏了 断成2节悲剧中

unknown 发表于 2010-10-15 20:35:14

为啥我这边湿度一直在10   /21 之间跳动呢?

kneken 发表于 2010-10-15 20:49:23

mark

ljmdzyx 发表于 2012-1-3 14:46:09

马克

ddcchh 发表于 2012-11-21 12:29:28

太好了我喜欢

jz701209李 发表于 2013-4-8 17:23:14

学习一下....
页: [1]
查看完整版本: 老男人成功应用国产温湿度数字探头DHT11成功晒下程序!感谢各位老大的教导!