离线
TA的每日心情 | 慵懒 2021-7-23 17:16 |
---|
签到天数: 17 天 [LV.4]
|
有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 草帽王子 于 2021-9-10 18:01 编辑
本章教程主要进行温湿度传感器DHT11的应用,通过DHT11读取周围环境温湿度,并通过串口打印显示。
1、DHT11简介及相关函数介绍
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5-95%RH,温度-20~+60℃。该传感器包括一个电阻式测湿元件和一个NTC测温元件,可通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。 DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口。传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。
关于DHT11具体信息,可参考其产品手册。
2、硬件设计
本章教程主要使用DHT11检测周围环境温湿度,具体连接方式如下:
- DHT11的VCC、GND引脚与单片机VCC、GND引脚连接
- DHT11的Dout引脚与单片机用户自定义引脚连接(此处为PA11)
3、软件设计
本章教程使用DHT11检测周围环境温湿度,具体程序如下:
dht11.h文件
- #ifndef __DHT11_H
- #define __DHT11_H
- #include "ch32v10x_GPIO.h"
- //IO方向设置
- #define DHT11_IO_IN() {GPIOA->CFGHR&=0XFFFF0FFF;GPIOA->CFGHR|=8<<12;}
- #define DHT11_IO_OUT() {GPIOA->CFGHR&=0XFFFF0FFF;GPIOA->CFGHR|=3<<12;}
- //IO操作函数
- #define DHT11_DQ_IN GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11) //数据端口 PA11
- 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
复制代码 dht11.h文件主要进行相关定义和函数声明;
dht11.c文件
dht11.c文件主要进行DHT11的初始化、复位、数据读取等配置;
main.c文件
- /********************************** (C) COPYRIGHT *******************************
- * File Name : main.c
- * Author : WCH
- * Version : V1.0.0
- * Date : 2020/04/30
- * Description : Main program body.
- *******************************************************************************/
- /*
- *@Note
- 环境温湿度读取:
- 本章教程使用温湿度传感器(DHT11)读取周围环境温湿度并通过串口调试助手打印显示。
- */
- #include "debug.h"
- #include "dht11.h"
- /* Global typedef */
- /* Global define */
- /* Global Variable */
- /*******************************************************************************
- * Function Name : main
- * Description : Main program.
- * Input : None
- * Return : None
- *******************************************************************************/
- int main(void)
- {
- u8 t=0;
- u8 temperature;
- u8 humidity;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- Delay_Init();
- USART_Printf_Init(115200);
- printf("SystemClk:%d\r\n",SystemCoreClock);
- printf("This is DHT11 example\r\n");
- if(DHT11_Init())
- {
- printf("未检测到DHT11!\r\n");
- Delay_Ms(10);
- }
- else
- {
- printf("已检测到DHT11!\r\n");
- while(1)
- {
- if(t%100==0)//每100ms读取一次
- {
- DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
- printf("Temp=%d\n",temperature); //显示温度
- printf("Humi=%d\n",humidity); //显示湿度
- }
- Delay_Ms(50);
- t++;
- }
- }
- while(1);
- }
复制代码 main.c文件主要进行函数初始化、DHT11的检测以及温湿度的读取。
4、下载验证
将编译好的程序下载到开发版并复位,串口打印如下:
1、当未检测到DHT11,串口打印如下:
2、当已检测到DHT11,串口打印如下:
69、DHT11(温湿度传感器)应用.rar
69、DHT11(温湿度传感器)应用.rar
(471.7 KB, 下载次数: 15)
链接:https://pan.baidu.com/s/1eJc9Qg9Az-W5bW9-ALkgFQ
提取码:aw1l
复制这段内容后打开百度网盘手机App,操作更方便哦
完
|
上一篇: 第六十九章:CH32V103应用教程——IIC-硬件IIC驱动OLED下一篇: 第七十一章:CH32V103应用教程——温湿度及RTC显示
|