标题:
基于STM32设计的DHT11温湿度传感器源文件
[打印本页]
作者:
ZADS
时间:
2020-6-20 19:34
标题:
基于STM32设计的DHT11温湿度传感器源文件
#include "dht11.h"
#include "delay.h"
#include "stdio.h"
/*
函数名:DHT11_InAndOutConfig
函数功能:DHT11管脚配置为输入/输出功能 --PA11
函数参数:flag 0 -- 输入 1 -- 输出
函数返回值:无
*/
void DHT11_InAndOutConfig(void)
{
//打开A端口时钟 -- PA11
RCC->APB2ENR |= (1<<2);
GPIOA->CRH &= ~(0xf<<11);
GPIOA->CRH |= (0x3<<11);//推挽输出
}
/*
函数名:DHT11_ReadTAndH
函数功能:DHT11读取温度和湿度值
函数参数:t -- 保存温度值 h -- 湿度值
函数返回值:0 -- 不成功 1 -- 成功
*/
u8 DHT11_ReadTAndH(u8 *t,u8 *h)
{
u8 rxbuffer[5];//保存40位数据
u8 i,j;
u32 errortime=0;
//1.MCU发送开始信号
//1.1 配置为输出模式
GPIOA->CRH &= ~(0xf<<11);
GPIOA->CRH |= (0x3<<11);
//1.2 输出18ms的低电平
DHT11_HL(0);
Delay_nms(18);
//1.3 输出高电平(20~40us)
DHT11_HL(1);
Delay_us(20);
//2.DHT11返回应答信号
//配置为输入模式
GPIOA->CRH &= ~(0xf<<11);
GPIOA->CRH |= (0x4<<11);
while(DHT11_RD())//等待应答信号,低电平到来
{
if(errortime++>0xfffff) // 2^40 -1
return 0;
}
errortime = 0;
while(DHT11_RD() == 0)//等待应答信号,高电平到来
{
if(errortime++>0xfffff)
return 0;
}
errortime = 0;
//3.DHT11发送40位数据
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
while(DHT11_RD()) //等待数据到来(低电平)
{
if(errortime++>0xfffff)
return 0;
}
errortime = 0;
while(DHT11_RD() == 0)//等待数据到来(高电平)
{
if(errortime++>0xfffff)
return 0;
}
errortime = 0;
Delay_us(30);
rxbuffer[i]<<=1;
if(DHT11_RD())
rxbuffer[i]++;
}
}
//4.校验和
if(rxbuffer[4] == (rxbuffer[0]+rxbuffer[1]+rxbuffer[2]+rxbuffer[3]))
{
*t = rxbuffer[2];
*h = rxbuffer[0];
return 1;
}
else
return 0;
}
复制代码
温湿度传感器.7z
2020-6-21 03:02 上传
点击文件名下载附件
下载积分: 黑币 -5
201.04 KB, 下载次数: 23, 下载积分: 黑币 -5
作者:
admin
时间:
2020-6-21 03:02
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1