微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于DHT11制作的简易温湿度测量设备

基于DHT11制作的简易温湿度测量设备

时间:10-02 整理:3721RD 点击:

最近心血来潮想用温湿度传感器DHT11和数码管做一个简易的温湿度测量设备,刚好手边有闲置的传感器和STC单片机,做了一下简单的焊接和编程。设计思路是DHT11用于采集数据,数码管显示当前温度和湿度,蜂鸣器可以在预设的温度或湿度下报警。DHT11属于单总线设备,只要时序正确,数据读取还是没问题的。


下面是DHT11实现数据读取的程序:

  1. void Signal_request(void)      //信号请求函数
  2. {
  3.         DHTIO = 0;   
  4.         Delay10ms();
  5.         Delay10ms();   //拉低数据线至少18ms
  6.         DHTIO = 1;
  7.         Delay30us();   //拉高数据线20~40us
  8. }

  9. u8 Respond(void)           //信号响应
  10. {
  11.         u8 retry=100;
  12.         while(DHTIO && retry--);   //等待数据线被拉低
  13.         retry = 100;
  14.         while(!DHTIO && retry--);
  15.         return 1;     //响应正确
  16. }

  17. u8 Data_Read_Bit(void)   //按位接收数据
  18. {        
  19.         u8 retry=100;
  20.         while(DHTIO && retry--);    //等待开始位
  21.         retry =100;
  22.         while(!DHTIO && retry--);  //等待数据位
  23.         retry =100;
  24.         Delay30us();
  25.         if(DHTIO)
  26.         {
  27.                 return 1;   //接收到的数据为1
  28.         }
  29.         else return 0;
  30. }

  31. u8 Data_Read_Byte(void)   //按字节接收数据
  32. {
  33.         u8 i;
  34.         u8 Data_Byte,Data_Bit;
  35.         for(i=0;i<8;i++)
  36.         {
  37.                 Data_Bit = Data_Read_Bit();
  38.                 Data_Byte <<= 1;
  39.                 Data_Byte |= Data_Bit;
  40.         }
  41.         return Data_Byte;
  42. }

  43. void Data_Receive(void)      //接收数据
  44. {
  45.         u8 HZ,HX,TZ,TX,Check;
  46.         u8 respond;
  47.         Signal_request();       //信号请求
  48.         respond = Respond();   //响应结果
  49.         if(respond)
  50.         {
  51.                 HZ = Data_Read_Byte();
  52.                 HX = Data_Read_Byte();
  53.                 TZ = Data_Read_Byte();
  54.                 TX = Data_Read_Byte();
  55.                 Check = Data_Read_Byte();
  56.                 if(HZ+HX+TZ+TX == Check)
  57.                 {
  58.                         Humidity_Z = HZ;      //湿度整数部分
  59.                         Humidity_X = HX;      //湿度小数部分
  60.                         Temperature_Z = TZ;   //温度整数部分
  61.                         Temperature_X = TX;   //温度小数部分
  62.                 }
  63.         }
  64. }

复制代码

DHTIO是总线数据端口,不同单片机移植时只要更改该端口就可以了。
在实际使用中还存在不足的地方,DHT11和单片机通信时间在3ms左右,而如果以此频率刷新数码管的话人眼就会明显感觉到数据在不断的跳变,目前正在尝试不同的解决办法,如果大家有好的解决方法的话还望指点一下。

                                       不错

搞半天木有20楼

这个值得学习,下载中

怎么没有完整程序?

只是提供了DHT11的驱动程序,使用时直接调用相关函数就行了

你用的7960驱动的数码管?

用三极管驱动的,浪费了好多引脚

这个太好了 最近正在学着用dht11  希望也能做一个和小编一样的东西出来

值得参考

不错不错

怎么变松4~20mA输出

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top