//dht11.h

#ifndef __DHT_H__

#define __DHT_H__

#include "stm32f10x.h"

#include "systick.h"

#include "led.h"

#include "stdio.h"

#include "Usart1.h"



#define DHT11_GPIO_TYPE  GPIOA

#define DHT11_GPIO_PIN   GPIO_Pin_8

#define DHT11_RCC        RCC_APB2Periph_GPIOA




#define DHT11_OUT_H GPIO_SetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)

#define DHT11_OUT_L GPIO_ResetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)

#define DHT11_IN    GPIO_ReadInputDataBit(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)


void dht11_gpio_input(void);

void dht11_gpio_output(void);

u16 dht11_scan(void);

u16 dht11_read_bit(void);

u16 dht11_read_byte(void);

u16 dht11_read_data(u8 buffer[4]);


#endif


//dht11.c

#include "dht.h"

 

void dht11_gpio_input(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    

    RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);

    

    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

    

    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);

}

 

void dht11_gpio_output(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    

    RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);

    

    GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

 

    GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);

}

 

void dht11_reset(void)

{

    dht11_gpio_output();//配置IO口输出模式

    DHT11_OUT_L;//拉低IO口

    Delay_us(19000);//延时18ms-30ms之间

    DHT11_OUT_H;//拉高IO口

    Delay_us(30);//延时30us,等待接收

    dht11_gpio_input();//配置为输入模式

}

 

u16 dht11_scan(void)

{

    return DHT11_IN;

}

 

u16 dht11_read_bit(void)

{

    while (DHT11_IN == RESET);//等待低电平结束

    Delay_us(40);//延时40us,如果是信号0,高电平信号在26-28us之间,如果是信号1,高电平信号在70us

    if (DHT11_IN == SET)//如果还是高电平就是信号1

    {

        while (DHT11_IN == SET);//等待此信号结束

        return 1;

    }

    else

    {

        return 0;

    }

}

 

u16 dht11_read_byte(void)

{

    u16 i;

    u16 data = 0;

    for (i = 0; i < 8; i++)

    {

        data <<= 1;

        data |= dht11_read_bit();

    }

    return data;

}

 

u16 dht11_read_data(u8 buffer[5])

{

    u16 i = 0;

    u8 checksum;

    dht11_reset();//发送起始信号

    if (dht11_scan() == RESET)

    {

        //等待响应信号结束

        while (dht11_scan() == RESET);

        while (dht11_scan() == SET);

        for (i = 0; i < 5; i++)

        {

            buffer[i] = dht11_read_byte();

        }

        

        while (dht11_scan() == RESET);//接收结束,拉高片选

        dht11_gpio_output();

        DHT11_OUT_H;


         checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];//校验数据

        if (checksum != buffer[4])

        {

            // checksum error

            return 1;

        }

    }

    

    return 0;

}


//main.c测试

if(dht11_read_data(buf)==0){

            hum = buf[0] + buf[1] / 10.0;

            temp = buf[2] + buf[3] / 10.0;

}

printf("湿度 == %.2f%%RHrn",hum);

printf("温度 == %.2f℃rn",temp);

Delay_ms(2000);

关键字:DHT11  温湿度传感器  stm32  测试程序 引用地址:DHT11温湿度传感器stm32测试程序

上一篇:STM32入门篇之DHT11温湿度传感器
下一篇:STM32外设驱动篇——DHT11温湿度传感器

推荐阅读

凤凰网科技讯 (作者/刘正伟)9月7日消息,自上月发布7nm工艺量产芯片后,国内芯片设计公司嘉楠科技正式发布具备AI神经网络运算能力的SoC芯片——勘智。嘉楠科技成立于2013年,专注于高性能重复计算ASIC芯片的设计,可以同时把握人工智能芯片和区块链硬件这两大领域。勘智是嘉楠推出的第一代人工智能芯片(产品型号:K210),它定位于人工智能与边缘计算...
新建一个system.h文件,包含以下内容#ifndef _system_H#define _system_H#include "stm32f10x.h"//位带操作,实现51类似的GPIO控制功能//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).//IO口操作宏定义#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volat...
今天下午,华为开发者大会2020在东莞松山湖开幕。华为消费者业务CEO余承东发表主题演讲,并正式发布鸿蒙OS 2.0。余承东表示,今年12月份将面向开发者提供鸿蒙2.0的beta版本,明年华为智能手机将全面升级支持鸿蒙2.0。此外,从9月10日起,鸿蒙OS将面向大屏、手表、车机等128KB-128MB终端设备开源。2021年4月将面向内存128MB-4GB终端设备开源,2021年1...
近年来瑞声科技以MEMS麦克风为切入点进入半导体领域,通过多年的技术积累,掌握了从芯片设计到封装测试的全流程核心技术。并推出了国内首款完全自主知识产权的MEMS麦克风产品。现有技术的MEMS麦克风在基座上间隔设置有振膜,在振膜上方再间隔内腔设置有背板。振膜和背板相互平行,构成了平板电容系统。当声波气流进入背板和振膜之间的内腔时,声压作用于振...

史海拾趣

问答坊 | AI 解惑

IPTV的全方位解析

       随着宽带在中国的普及。目前我国上网人数以超过一亿。宽带用户超过三千万。伴随而来的是互联网社会化时代的到来。人们对互联网的需求不再是单一地网上冲浪、查看新闻,而是提出了多样化的应用需求。现在存在 ...…

查看全部问答∨

有关移植问题请教

我在往CCS移植过程中, 其中有个WINAPI我该把它替换成什么东西 有知道的么告诉我下谢谢  我所移植的程序为 BOOL WINAPI thinningDIBD(...)我把BOOL换成INT型 定义了宏变量 这个函数是个细化程序 移植完后我实现不了细化功能,我自己猜想是WINA ...…

查看全部问答∨

高速电路设计/信号完整性的一些基本概念

高速电路设计/信号完整性的一些基本概念 1.信号完整性(Signal Integrity):就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收端,我们就称该信号是完整的。 2.传输线(Transmission Line):由两个具有一定长度的 ...…

查看全部问答∨

MFC下面怎么用Sql Server CE?

一切完好,在.NET下面也可以用System.Data.SqlServerce下面的提供的函数成功的对数据库进行操作.包括RDA和合并复制等. 但是我在想如果不用.Net而用MFC使用系统API如果实现对Sql server ce数据操作包括RDA和合并复制之类的.有不有达人相告.感激不尽.…

查看全部问答∨

我做的51开发板板子回来了。。。哈哈!!!

  还没有焊接完。两块大的芯片,一块是STC的52,一块是8255. 这块开发板主要是为在校学生学习微机原理做的,因为串口,定时器,中断51中都有,可以直接做实验,唯独8255没有。所以在这里我们加上了8255,并把8255的所有引脚的引出来了,并 ...…

查看全部问答∨

智能绿色照明系统的设计及实现

智能绿色照明系统的设计及实现…

查看全部问答∨

请各位指导下小弟

最近再做一个事情 就是把角度化为0到 2π 之前 比如一个角度是8 π 也就是4 π + 2π 我要把前面的4 π 去掉 也就是把 2nπ 去掉 用FPGA实现 怎么去做啊 谢谢指导一下…

查看全部问答∨

stm8的选项字节软件里怎么配置

                                 我也想问你这个问题…

查看全部问答∨

本科G组的

本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 有么有什么群有老师或大神指导的 给个号加下    …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved