2103|3

1510

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【AT-START-F403A测评】+DHT22温湿度检测及显示 [复制链接]

 

除了显示器件的驱动,对各种数字传感器的驱动也是一件十分有益的事情。

这里就介绍一款单总线数字式温湿度传感器的驱动方法,该器件为DHT22,它较之于DHT11的精度更高,可达小数点后1位。

使用该器件时,其数据引脚与PB11相连接,故有如下的输出高低电平及读取引脚状态的定义引脚:

#define DHT22_D0_H      GPIOB->BSRE = GPIO_Pins_15

#define DHT22_D0_L       GPIOB->BRE = GPIO_Pins_15

#define DHT22_D0_R      GPIO_ReadInputDataBit(GPIOB, GPIO_Pins_15)

 

对DHT22初始化的函数为:

uint8_t DHT22_Init(void)
{
      GPIO_InitType GPIO_InitStructure;
      RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
      GPIO_StructInit(&GPIO_InitStructure);
      GPIO_InitStructure.GPIO_Pins = GPIO_Pins_15;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
      GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
      GPIO_Init(GPIOB, &GPIO_InitStructure);
      DHT22_Rst();
      return DHT22_Check();
}

 

读取DHT22数据的函数为:

uint8_t DHT22_Read_Data(uint8_t *temp,uint8_t *humi)   
{       
         uint8_t buf[5];
         uint8_t 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; 
}

实现温湿度检测功能程序如下:

if(i==4)
{
           showhanzi16h(80,100,5,1);
           showhanzi16h(80,84,6,1);
           showhanzi16h(180,280,13,0);
           showhanzi16h(180,264,14,0);        
           while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0)==0);
           LCD_Clear(WHITE);         
           show_imageh(10,300,0);  //200*200 * 1     
           BACK_COLOR=WHITE;
           POINT_COLOR=RED;
           LCD_ShowStringH(60,90,"DHT22 TEST");
           senflag=DHT22_Init();    
           if(senflag) LCD_ShowStringH(80,90,"NO");
           else   LCD_ShowStringH(80,90,"OK");
           while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0)==0)
           {
                  if(!senflag)
                  {
                     DHT22_Read_Data(&temperature,&humidity);
                     LCD_ShowCharh(100,90,'T',1);
                     LCD_ShowCharh(100,80,'e',1);
                     LCD_ShowCharh(100,70,'m',1);
                     LCD_ShowCharh(100,60,'p',1);
                     LCD_ShowCharh(100,50,':',1);
                     LCD_ShowCharh(100,40,temperature/10+'0',0);
                     LCD_ShowCharh(100,30,temperature%10+'0',0);
                     LCD_ShowCharh(120,90,'H',1);
                     LCD_ShowCharh(120,80,'u',1);
                     LCD_ShowCharh(120,70,'m',1);
                     LCD_ShowCharh(120,60,'i',1);
                     LCD_ShowCharh(120,50,':',1);
                     LCD_ShowCharh(120,40,humidity/10+'0',0);
                     LCD_ShowCharh(120,30,humidity%10+'0',0);
                  }
                  Delay_ms(200u);
          }
          LCD_Clear(WHITE);
          AT32_jm();
          showhanzi16h(80,100,5,1);
          showhanzi16h(80,84,6,1);
          showhanzi16h(180,280,13,0);
          showhanzi16h(180,264,14,0);
}

该程序的运行效果如图1和图2所示,其中图1为选取环境检测功能,图2位温湿度显示界面。

图1 功能选择

图2 温湿度显示

最新回复

雅特力AT-START-F403A测评汇总 汇总贴:https://bbs.eeworld.com.cn/thread-1143018-1-1.html   详情 回复 发表于 2020-10-19 09:46
点赞 关注
 
 

回复
举报

1942

帖子

2

TA的资源

版主

沙发
 

感谢分享,可以把温度小数点后一位也显示出来哦~这样会更能体现DHT22呢!

点评

当时图省事,没加否则需再添加添加一条显示小数位的语句。  详情 回复 发表于 2020-10-16 10:11
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
w494143467 发表于 2020-10-15 21:53 感谢分享,可以把温度小数点后一位也显示出来哦~这样会更能体现DHT22呢!

当时图省事,没加否则需再添加一条显示小数的语句。

 
 
 

回复

1万

帖子

2853

TA的资源

管理员

4
 

雅特力AT-START-F403A测评汇总

汇总贴:https://bbs.eeworld.com.cn/thread-1143018-1-1.html

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表