[活动专区]

【AutoChips 7801x MCU评测报告】+ DHT22 温湿度测量

[复制链接]
628|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为输入、输出的函数为:
void DHT11_IO_IN(void)
{
             GPIO_SetDir(GPIOB, GPIO_PIN12, GPIO_IN);        
}
void DHT11_IO_OUT(void)
{
             GPIO_SetDir(GPIOB, GPIO_PIN12, GPIO_OUT);
}

DHT22的初始化函数为:
u8 DHT11_Init(void)
{
             GPIO_SetFunc(GPIOB, GPIO_PIN12, GPIO_FUN0);
             DHT11_Rst();
             return DHT11_Check();
}


DHT22读取数据的函数为:
u8 DHT22_Read_Data(u8 *temp,u8 *humi)   
{      
         u8 buf[5];
         u8 i;
         DHT22_Rst();
         if(DHT22_Check()==0)
         {
                   for(i=0;i<5;i++)
                   {
                            buf[i]=DHT22_Read_Byte();
                   }
                   if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
                   {
                            *humi=(buf[0]*256+buf[1])/10;
                            *temp=(buf[2]*256+buf[3])/10;
                   }
         }else return 1;
         return 0;
}

实现图示效果的主程序为:
int main(void)
{   
           u8 senflag;
           InitDelay();
           OLED_Init();
           OLED_Clear();
           OLED_ShowString(0,0,"AC8701",16);
           OLED_ShowString(0,2,"DHT22 TEST",16);
           OLED_ShowString(0,4,"  C   %RH",16);
           senflag=DHT11_Init();         
           if(senflag) OLED_ShowString(64,0,"NO SEN!",16);
           else   OLED_ShowString(64,0,"SEN OK!",16);
           while(1)
           {
                     if(!senflag)
                     {
                               DHT11_Read_Data(&temperature,&humidity);
                               OLED_ShowNum(0,4,temperature,2,16);
                               OLED_ShowNum(32,4,humidity,2,16);
                     }
                     mdelay(500);
           }
}

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 | 显示全部楼层
楼主辛苦了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

36

粉丝