IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103—有关DHT11温湿度传感器模块的代码 -> 正文阅读

[嵌入式]STM32F103—有关DHT11温湿度传感器模块的代码

dht11.c

#include "stm32f10x.h"
#include "dht11.h"
#include "SysTick.h"
#include "sys.h"

uint8_t  dat[5]={0x00,0x00,0x00,0x00,0x00};    //存储读取的温湿度信息
uint32_t sum=0;         //存放校验时的求和

void DHT_GPIO_Config_Output( void )
{		
	GPIO_InitTypeDef GPIO_InitStruct;	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); 
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE, &GPIO_InitStruct);
}

void DHT_GPIO_Config_Input( void )
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); 
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE, &GPIO_InitStruct);
}


uint8_t DHT_Read_Byte(void)
{
	uint8_t temp;  
	uint8_t ReadDat=0; 
	uint8_t t = 0;
	uint8_t i; 

	for(i=0;i<8;i++)
	{
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==0&&t<100)  
		{		
			delay_us(1);
			t++;  //防止卡死
		}
		t=0;
		//由于‘0’代码高电平时间26~28us,1代码高电平时间70us,延时30us,可判断高低电平,数字0读取到的是低电平,高电平则反之
		delay_us(30);
		temp=0;
		if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==1) temp=1;		
			
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==1&&t<100)
		{		
			delay_us(1);
			t++;
		}
		t=0;
		ReadDat<<=1; 
		ReadDat|=temp;
	}	
	return ReadDat;
}

uint8_t DHT_Read(void)
{
	uint8_t i;
	uint8_t t = 0;
	DHT_GPIO_Config_Output();
	DHT11_LOW ;  //拉低
	delay_ms(18);
	DHT11_HIGH;  //拉高
	delay_us(40);
	DHT_GPIO_Config_Input();
	delay_us(20);
	//延时20us,低电平80us,还剩60us,检查是否是低电平以确定是否有响应信号
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==0)  //如果读取到低电平,证明DHT11响应
	{
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==0&&t<100)//接收响应信号低电平剩余60us,等待变高电平
		{
			delay_us(1);
			t++;			
		}
		t=0;//超过100us自动向下运行,以免卡死
		while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_13)==1&&t<100)//接收响应信号高电平80us,等待变低电平
			{
				delay_us(1);
				t++;			
			}
		t=0;
		for(i=0;i<5;i++)  //接收40位数据
			{
				dat[i]=DHT_Read_Byte();//读出1个字节
			}
		delay_us(50);//结束信号
	}
	sum=dat[0]+dat[1]+dat[2]+dat[3];
	if(dat[4]==(u8)sum)  //校验  
	{
		return 1;    
	}
	else
		return 0;    
}

dht11.h

#ifndef  __DHT11_H__
#define  __DHT11_H__

#include "sys.h"
#include "stm32f10x.h"

#define DHT11_PORT      GPIOE
#define DHT11_CLK       RCC_APB2Periph_GPIOE
#define DHT11_TRIG      GPIO_Pin_13
#define DHT11           GPIO_ReadInputDataBit(DHT11_PORT,DHT11_TRIG)

#define DHT11_HIGH      PEout(13)
#define DHT11_LOW       PEin(13)

void DHT11_GPIO_OUT(void);
void DHT11_GPIO_IN(void);
uint8_t DHT_Read_Byte(void);
uint8_t DHT_Read(void);

#endif

main.c

#include "stm32f10x.h"
#include "SysTick.h"
#include "dht11.h"
#include "usart.h"

extern uint8_t dat[5];//存储读取的温湿度信息

int main(void)
{	 
	SysTick_Init (7200);
	USART1_Init(9600);	 	//串口初始化为9600
	printf("湿温度传感器初始化成功!\r\n");
	delay_ms(100);  	

	while(1)
	{ 	
		if(DHT_Read())
		{
			printf("湿度:%d.%d%温度:%d.%d℃\r\n",dat[0],dat[1],dat[2],dat[3]);
			delay_ms(1000);
		}
		
	} 
}

(1条消息) STM32F103C8T6基本功能代码_墨云景阳的博客-CSDN博客

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 11:05:27  更:2021-07-14 11:07:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:24:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码