2632|6

1582

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【AT32F421测评】+ DHT22温湿度检测 [复制链接]

  本帖最后由 jinglixixi 于 2021-5-20 23:36 编辑

DHT22是一种常见的数字式温湿度传感器,它采用单总线方式进行工作,故较为节省GPIO口资源。将它与OLED屏组合在一起即可形成一个小巧而便捷的温湿度检测装置,其起始界面和工作界面分别如图1和图2所示。

图1 起始界面

图2 工作界面

 

DHT22与MCU的连接关系为:

Dat---PB11

VCC---5V

GND--- GND

 

实现DHT22输出高低电平及读取的语句定义为:

#define DHT22_D0_H        GPIOB->BSRE= GPIO_Pins_11

#define DHT22_D0_L        GPIOB->BRE= GPIO_Pins_11

#define DHT22_D0_R        GPIO_ReadInputDataBit(GPIOB,GPIO_Pins_11)

 

DHT22的初始化函数为:

  • uint8_t DHT22_Init(void)
  • {
  •     GPIO_InitType GPIO_InitStructure;
  •     RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
  •     GPIO_StructInit(&GPIO_InitStructure);
  •     GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;       
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  •     GPIO_InitStructure.GPIO_OutType = GPIO_OutType_PP;
  •     GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;    
  •     GPIO_Init(GPIOB, &GPIO_InitStructure);
  •     DHT22_Rst();
  •     return DHT22_Check();
  • }

DHT22读取模式的设置函数为:

  • void DHT22_IO_IN(void)
  • {
  •   GPIO_InitType GPIO_InitStructure;
  •   RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOB, ENABLE);
  •   GPIO_StructInit(&GPIO_InitStructure);
  •   GPIO_InitStructure.GPIO_Pins = GPIO_Pins_11;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  •   GPIO_InitStructure.GPIO_Pull = GPIO_Pull_PD;
  •   GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  •   GPIO_Init(GPIOB, &GPIO_InitStructure);
  • }

 

DHT22位读取函数为:

  • uint8_t DHT22_Read_Bit(void)
  • {
  •     uint8_t retry=0;
  •     while(DHT22_D0_R&&retry<100)
  •     {
  •         retry++;
  •         Delay_us(2);
  •     }
  •     retry=0;
  •     while(!DHT22_D0_R&&retry<100)
  •     {
  •         retry++;
  •         Delay_us(2);
  •     }
  •     Delay_us(40);
  •     if(DHT22_D0_R) return 1;
  •     else return 0;
  • }

DHT22字节读取函数为:

  • uint8_t DHT22_Read_Byte(void)
  • {
  •     uint8_t i,dat;
  •     dat=0;
  •     for (i=0;i<8;i++)
  •     {
  •         dat<<=1;
  •         dat|=DHT22_Read_Bit();
  •     }
  •     return dat;
  • }

 

实现显示效果的主程序为:

  • int main(void)
  • {
  •     uint8_t  senflag;
  •     AT32_Board_Init();
  •     AT32_OLED_Init();
  •     OLED_Init();
  •     OLED_Clear();
  •     OLED_ShowString(0,0,"AT32F421",16);
  •     OLED_ShowString(0,2,"OLED & DHT22",16);     
  •     senflag=DHT22_Init();
  •     Delay_ms(2000u);
  •     if(!senflag) OLED_ShowString(100,0,"NO",16);
  •     else   OLED_ShowString(100,0,"OK",16);
  •     OLED_ShowString(0,2,"T=  C H=  %RH",16);
  •     while(1)
  •     {
  •        if(senflag)
  •        {
  •        DHT22_Read_Data(&temperature,&humidity);
  •        OLED_ShowNum(16,2,temperature,2,16);
  •        OLED_ShowNum(64,2,humidity,2,16);
  •        }
  •        Delay_ms(500u);
  •        AT32_LEDn_Toggle(LED2);
  •     }
  • }

 

最新回复

AM2302这个传感器以前弄过,当时的程序能用,但是数据偶尔会有错误很是奇怪. 直到最近用定时器通道捕获方式才看出当时的问题,那个传感器在发送完一个字节后会有一个超长的低电平,手册上并没有说清楚.   详情 回复 发表于 2021-5-26 12:06

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

1930

帖子

3

TA的资源

版主

沙发
 

不错不错,期待后续哈~

 
 
 

回复

1582

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
w494143467 发表于 2021-5-21 10:39 不错不错,期待后续哈~

 
 
 

回复

7763

帖子

2

TA的资源

五彩晶圆(高级)

4
 

谢谢分享

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

71

帖子

2

TA的资源

一粒金砂(中级)

5
 

谢谢分享,话说楼主后面还有测评吗,今天就结束了。

点评

哈哈,计划的任务已全部完成!  详情 回复 发表于 2021-5-24 11:36
 
 
 

回复

1582

帖子

1

TA的资源

五彩晶圆(初级)

6
 
Albert.G 发表于 2021-5-24 11:22 谢谢分享,话说楼主后面还有测评吗,今天就结束了。

哈哈,计划的任务已全部完成!

 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 

AM2302这个传感器以前弄过,当时的程序能用,但是数据偶尔会有错误很是奇怪.

直到最近用定时器通道捕获方式才看出当时的问题,那个传感器在发送完一个字节后会有一个超长的低电平,手册上并没有说清楚.

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 14

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表