STM32之温湿度DHT11驱动
STM32之温湿度DHT11驱动
- DHT11 API
- 原文件 dht11.c
- 头文件 dht11.h
DHT11 API
原文件 dht11.c
u8 DHT11_Init(void);
初始化DHT11u8 DHT11_Read_Data(u8 *temp,u8 *humi);
读取温湿度u8 DHT11_Read_Byte(void);
读出一个字节u8 DHT11_Read_Bit(void);
读出一个位u8 DHT11_Check(void);
检测是否存在DHT11void DHT11_Rst(void);
复位DHT11
#include "dht11.h"//复位DHT11
void DHT11_Rst(void)
{ DHT11_IO_OUT(); //SET OUTPUTDHT11_DQ_OUT=0; //拉低DQdelay_ms(20); //拉低至少18msDHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主机拉高20~40us
}//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{ u8 retry=0;DHT11_IO_IN();//SET INPUT while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us{retry++;delay_us(1);}; if(retry>=100)return 1;else retry=0;while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us{retry++;delay_us(1);};if(retry>=100)return 1; return 0;
}//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)
{u8 retry=0;while(DHT11_DQ_IN&&retry<100)//等待变为低电平{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry<100)//等待变高电平{retry++;delay_us(1);}delay_us(40);//等待40usif(DHT11_DQ_IN)return 1;else return 0;
}//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)
{ u8 i,dat;dat=0;for (i=0;i<8;i++) {dat<<=1; dat|=DHT11_Read_Bit();} return dat;
}//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(u8 *temp,u8 *humi)
{ u8 buf[5];u8 i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i<5;i++)//读取40位数据{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}else return 1;return 0;
}//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
u8 DHT11_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO口GPIO_SetBits(GPIOA,GPIO_Pin_0); //PA0 输出高DHT11_Rst(); //复位DHT11return DHT11_Check();//等待DHT11的回应
}
头文件 dht11.h
#ifndef __DHT11_H
#define __DHT11_H
#include "sys.h"
#include "delay.h"//PA.11
//IO方向设置 L H
#define DHT11_IO_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3;}IO操作函数
#define DHT11_DQ_OUT PAout(0) //数据端口 PA0
#define DHT11_DQ_IN PAin(0) //数据端口 PA0 u8 DHT11_Init(void);//初始化DHT11
u8 DHT11_Read_Data(u8 *temp,u8 *humi);//读取温湿度
u8 DHT11_Read_Byte(void);//读出一个字节
u8 DHT11_Read_Bit(void);//读出一个位
u8 DHT11_Check(void);//检测是否存在DHT11
void DHT11_Rst(void);//复位DHT11 #endif
STM32之温湿度DHT11驱动相关推荐
- 单片机课程设计:基于STM32的温湿度检监测报警系统的设计
基于STM32的温湿度检监测报警系统 文章目录 基于STM32的温湿度检监测报警系统 前言 一.设计任务 二.系统硬件设计 1.元器件选用 2.系统模型设计 3.硬件连接 二.系统程序设计 1.程序流 ...
- 基于stm32的温湿度检测案例串口通信屏显示(二)
文章目录 前言 一.串口通信屏幕 二.DHT11测试效果与说明 三.读入数据 四.串口及中断配置 五.屏幕上显示数据 5.1.屏幕内嵌指令 5.2.静态数据 5.3.动态数据 六.效果 前言 因为st ...
- 15、基于STM32的温湿度超限报警器
15.基于STM32的温湿度超限报警器 引言 1系统概述 1.1设计任务 1.2设计要求 2 方案设计与论证 2.1芯片选择方案 2.2 系统概述 2.3设计要求: 2.4系统总体设计思路 2.5各功 ...
- 基于STM32环境温湿度监测系统设计
基于STM32环境温湿度监测系统设计 1. 实验目的 2. 任务和要求 3. proteus仿真图 4. 实验代码 1. 实验目的 (1) 掌握使用 KEIL MDK5 进行软件开发的具体流程: (2 ...
- stm32+HTU21D温湿度传感器通过usart1发送温湿度数据在串口助手显示
stm32+HTU21D温湿度传感器 这里就不拍实物图了,我用的是下面这款HTU21D ic是stm32f103vet6 工程代码是io口模拟i2c和传感器通讯 PB6-SCL,PB7-SDA usa ...
- 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习
书接上回 文章1:[STM32] 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习 文章2:[STM32] 硬件IIC 驱动SSD1302(0.96 OLED模块) ...
- 【STM32】实战3.1—用STM32与TB6600驱动器驱动42步进电机(一)
目录 0 参考资料出处 1 实验预期效果 2 硬件学习 2.1 TB6600驱动器 2.1.1 通过拨码开关设定细分与电流 2.1.2 共阴共阳接线法 2.2 开关电源(AC转DC变压器)& ...
- WS2812灯珠(三)-- STM32 PWM+DMA方式驱动
WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 文章目录 WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 一.理论 二.代码实践 一.理论 PWM输出就是对外输出脉宽( ...
- STM32模拟IIC协议驱动AD7991/AD7995/AD7999芯片
STM32模拟IIC协议驱动AD7991/AD7995/AD7999芯片 AD7991/AD7995/AD7999是12位/10位/8位 4通道模拟输入的AD转换芯片 通信方式采用的是:I2C 芯片供 ...
最新文章
- java IO流文件的读写具体实例
- 牛顿的另一面:夺权、严惩罪犯,以一己之力挽救英国危机
- ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题...
- Python常见问题(4):Python库与扩展 Library and Extension FAQ
- iNeuOS工业互联平台,生产过程业务联动控制
- 分享百度文库提交成功的八大因素
- 面试题-ASP 与 ASP.Net的区别?
- 上下伸缩代码_CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)
- 嵌入式仿真平台SkyEye的覆盖率分析
- 指针数组、数组指针、指针函数、函数指针
- MVI - 继续来凑个热闹
- 105 基于socketserver实现并发的socket编程
- 汉语言文学如何利用计算机思维,计算机在应用于汉语言文学时产生的优势与局限.PDF...
- 模块参考资料-硬件资料-Air720UG/UH
- agent实现apm上报
- 如何重装系统(小白系列-超详细的手把手教你-图文并茂-WIN7,8,10,XP)
- 【HTML】设置页面字体
- 将页面中的指定 div 下载为图片
- ELS3120代替品MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动芯片
- Android 4.4Phone的变化(二)
热门文章
- 泡利不相容原理适用的空间范围(系统)是多大?
- [Practical.Vim(2012.9)].Drew.Neil.Tip52 学习摘要
- C++程序员发展方向
- 南京邮电大学微型计算机原理与接口技术答案,微型计算机原理与接口技术南京邮电大学...
- CodeVS 1697-⑨要写信
- 001_wz_bbk_GCC的介绍与发展历史
- 计算机缺失d3dcompiler43.dll,电脑d3dcompiler43.dll文件丢失怎么解决?
- 大数据如此火爆 如何看待大数据行业发展趋势
- ArcGIS Server 注册私有云存储并发布影像切片服务
- MySQL_day2笔记