[活动专区] 【AutoChips 7801x MCU评测报告】+ DHT22 温湿度测量

[复制链接]
1154|9
 楼主| jinglixixi 发表于 2020-6-7 18:46 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2020-6-7 18:55 编辑

DHT22是一种单总线的数字式温湿度传感器,它共有3个引脚,只需占用一个GPIO口接口工作。
DHT22MCU的连接关系为:
DAT——PB12
其余两个引脚则接3.3V工作电源
定义GPIO口读取电位及输出高低电平的语句为:
#define DHT11_D0_H      GPIO_SetPinLevel(GPIOB, GPIO_PIN12, GPIO_LEVEL_HIGH)   // PB12
#define DHT11_D0_L       GPIO_SetPinLevel(GPIOB, GPIO_PIN12, GPIO_LEVEL_LOW)
#define DHT11_D0_R      GPIO_GetPinLevel(GPIOB, GPIO_PIN12)
设置GPIO为输入、输出的函数为:
  1. void DHT11_IO_IN(void)
  2. {
  3.              GPIO_SetDir(GPIOB, GPIO_PIN12, GPIO_IN);        
  4. }
  5. void DHT11_IO_OUT(void)
  6. {
  7.              GPIO_SetDir(GPIOB, GPIO_PIN12, GPIO_OUT);
  8. }

DHT22的初始化函数为:
  1. u8 DHT11_Init(void)
  2. {
  3.              GPIO_SetFunc(GPIOB, GPIO_PIN12, GPIO_FUN0);
  4.              DHT11_Rst();
  5.              return DHT11_Check();
  6. }


DHT22读取数据的函数为:
  1. u8 DHT22_Read_Data(u8 *temp,u8 *humi)   
  2. {      
  3.          u8 buf[5];
  4.          u8 i;
  5.          DHT22_Rst();
  6.          if(DHT22_Check()==0)
  7.          {
  8.                    for(i=0;i<5;i++)
  9.                    {
  10.                             buf[i]=DHT22_Read_Byte();
  11.                    }
  12.                    if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  13.                    {
  14.                             *humi=(buf[0]*256+buf[1])/10;
  15.                             *temp=(buf[2]*256+buf[3])/10;
  16.                    }
  17.          }else return 1;
  18.          return 0;
  19. }

实现图示效果的主程序为:
  1. int main(void)
  2. {   
  3.            u8 senflag;
  4.            InitDelay();
  5.            OLED_Init();
  6.            OLED_Clear();
  7.            OLED_ShowString(0,0,"AC8701",16);
  8.            OLED_ShowString(0,2,"DHT22 TEST",16);
  9.            OLED_ShowString(0,4,"  C   %RH",16);
  10.            senflag=DHT11_Init();         
  11.            if(senflag) OLED_ShowString(64,0,"NO SEN!",16);
  12.            else   OLED_ShowString(64,0,"SEN OK!",16);
  13.            while(1)
  14.            {
  15.                      if(!senflag)
  16.                      {
  17.                                DHT11_Read_Data(&temperature,&humidity);
  18.                                OLED_ShowNum(0,4,temperature,2,16);
  19.                                OLED_ShowNum(32,4,humidity,2,16);
  20.                      }
  21.                      mdelay(500);
  22.            }
  23. }

a.png
                              
DHT22温湿度检测效果
TechHolder 发表于 2020-6-8 08:26 | 显示全部楼层
一看代码就是大神级别的存在
 楼主| jinglixixi 发表于 2020-6-8 08:34 | 显示全部楼层
TechHolder 发表于 2020-6-8 08:26
一看代码就是大神级别的存在

感谢支持!!!
Cjy_JDxy 发表于 2020-6-8 14:19 | 显示全部楼层
 楼主| jinglixixi 发表于 2020-6-8 22:26 来自手机 | 显示全部楼层
多谢!
renzheshengui 发表于 2020-7-7 14:17 | 显示全部楼层
非常感谢楼主分享
wakayi 发表于 2020-7-7 14:18 | 显示全部楼层
二总线通讯是吗
wowu 发表于 2020-7-7 14:18 | 显示全部楼层
这种传感器的精度能达到多少啊
xiaoqizi 发表于 2020-7-7 14:18 | 显示全部楼层
条理清晰啊
木木guainv 发表于 2020-7-7 14:19 | 显示全部楼层
楼主辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2950

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部