资源简介

压缩包里边包含DHT11.C和DHT11.H文件,里边封装了DHT11的驱动程序,可在STM32中快速移植.

资源截图

代码片段和文件信息

#include “stm32f10x.h“                  // Device header
#include “dht11.h“
/*******************************************************************************
* 函 数 名         : DHT11_Init()
* 函数功能      : DHT11初始化 
* 引    脚         : PA4
* 输    出         : 返回0:初始化成功,1:失败
*******************************************************************************/
u8 DHT11_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOAENABLE);

GPIO_InitStructure.GPIO_Pin=DHT11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIO_DHT11&GPIO_InitStructure);
GPIO_SetBits(GPIO_DHT11DHT11);    //拉高

DHT11_Rst();   
return DHT11_Check();
}
/*******************************************************************************
* 函 数 名         : DHT11_Rst(),DHT11_Check() 
* 函数功能      : 复位DHT11,检测DHT11
* 引    脚         : PA4
* 输    出         ://返回1:未检测到DHT11的存在,返回0:存在
*******************************************************************************/
void DHT11_Rst()    
{                 
DHT11_IO_OUT();  //配置io口为输出模式
    DHT11_DQ_OUT=0;  //拉低DQ
    delay_ms(20);     //拉低至少18ms
    DHT11_DQ_OUT=1;  //DQ=1 
delay_us(30);      //主机拉高20~40us
}
u8 DHT11_Check()     
{   
u8 retry=0;
DHT11_IO_IN();//配置io口为输入模式 
    while (DHT11_DQ_IN&&retry<100)//高电平循环,低电平跳出
{
retry++;
delay_us(1);
};  
if(retry>=100)return 1;
else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~50us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;     
return 0;
}


/*******************************************************************************
* 函 数 名         : DHT11_Read_Bit(void) 
* 函数功能      : 从DHT11读取一个位
* 引    脚         : PA4
* 输    出         :返回值:1/0
*******************************************************************************/
u8 DHT11_Read_Bit(void)   
{
  u8 retry=0;
while(DHT11_DQ_IN&&retry<100)//等待变为低电平 12-14us 开始
{
retry++;
delay_us(1);
}
retry=0;
while(!DHT11_DQ_IN&&retry<100)//等待变高电平  26-28us表示0116-118us表示1
{
retry++;
delay_us(1);
}
delay_us(40);//等待40us
if(DHT11_DQ_IN)return 1;
else return 0;    
}
/*******************************************************************************
* 函 数 名         : DHT11_Read_Byte(void)
* 函数功能      : 从DHT11读取一个字节
* 引    脚         : PA4
* 输    出         :返回值:读到的数据
*******************************************************************************/
u8 DHT11_Read_Byte(void)    
{        
    u8 idat;
    dat=0;
for (i=0;i<8;i++) 
{
    dat<<=1; 
    dat|=DHT11_Read_Bit();
    }     
    return dat;
}
/*******************************************************************************
* 函 数 名         : DHT11_Read_Data(u8 *tempu8 *humi) 
* 函数功能      : 从DHT11读取一次数据
* 引    脚         : PA4
* 输    出         :返回值:0正常;1读取失败
*******************************************************************************/
u8 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4051  2019-02-18 17:19  dht11.c
     文件         448  2019-02-18 13:12  dht11.h

评论

共有 条评论