有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 草帽王子 于 2021-9-10 18:02 编辑
本章教程主要使用温湿度传感器(DHT11)读取周围环境温湿度并通过OLED屏显示,同时显示时间。本章教程在第十二章、第六十九章、第七十章基础上进行,可以看作这三章的综合应用
1、IIC、RTC、DHT11简介及相关函数介绍
关于IIC、RTC、DHT11的简介前面章节已经介绍,在此不再赘述。
2、硬件设计
本章教程使用温湿度传感器(DHT11)读取周围环境温湿度并通过OLED屏显示,同时显示时间,其中OLED显示采用硬件IIC驱动OLED的方式。各模块与单片机引脚连接如下:
- DHT11的VCC、GND引脚与单片机VCC、GND引脚连接
- DHT11的Dout引脚与单片机用户自定义引脚连接(此处为PA11)
- PB7连接OLED屏的SDA引脚
- PB6连接OLED屏的SCL引脚
3、软件设计
本章教程使用温湿度传感器(DHT11)读取周围环境温湿度并通过OLED屏显示,同时显示时间,具体程序见程序各文件内容,与前面章节一样,在此主要介绍main.c文件内容:
main.c文件
- /********************************** (C) COPYRIGHT *******************************
- * File Name : main.c
- * Author : WCH
- * Version : V1.0.0
- * Date : 2020/04/30
- * Description : Main program body.
- *******************************************************************************/
- /*
- *@Note
- 环境温湿度及RTC OLED显示:
- 本章教程使用温湿度传感器(DHT11)读取周围环境温湿度并通过OLED屏显示,同时显示时间。
- */
- #include "debug.h"
- #include "dht11.h"
- #include "rtc.h"
- #include "iic.h"
- #include "oled.h"
- /*******************************************************************************
- * Function Name : main
- * Description : Main program.
- * Input : None
- * Return : None
- *******************************************************************************/
- int main(void)
- {
- u8 temperature;
- u8 humidity;
- Delay_Init();
- USART_Printf_Init(115200);
- OLED_Init();
- RTC_Init();
- DHT11_Init();
- printf("SystemClk:%d\r\n",SystemCoreClock);
- printf("DHT11 & RTC OLED Display\r\n");
- //检测DHT11是否正常
- while(DHT11_Init()) //DHT11初始化
- {
- OLED_Refresh();
- Delay_Ms(500);
- OLED_Clear();
- OLED_ShowString(0,20,"DHT11 not normal",16,1);
- }
- OLED_Refresh();
- Delay_Ms(500);
- OLED_Clear();
- OLED_ShowString(0,0,"Data: / / ",16,1);
- OLED_ShowString(0,16,"Time: : : ",16,1);
- OLED_ShowString(12,32,"Temp: C",16,1);
- OLED_ShowString(12,48,"Humi: %",16,1);
- while(1)
- {
- Delay_Ms(1000);
- DHT11_Read_Data(&temperature,&humidity);
- OLED_ShowNum(55,32,temperature,2,16,1);
- OLED_ShowNum(55,48,humidity,2,16,1);
- printf("temperature:%d\r\n",temperature);
- printf("humidity:%d\r\n",humidity);
- printf("year/month/day/week/hour/min/sec:\r\n");
- printf("%d-%d-%d %d %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,
- calendar.week,calendar.hour,calendar.min,calendar.sec );
- OLED_ShowNum(40,0,calendar.w_year,4,16,1);
- printf("hour:%d\r\n",calendar.w_year);
- OLED_ShowNum(80,0,calendar.w_month,2,16,1);
- printf("min:%d\r\n",calendar.w_month);
- OLED_ShowNum(104,0,calendar.w_date,2,16,1);
- printf("sec:%d\r\n",calendar.w_date);
- OLED_ShowNum(40,16,calendar.hour,2,16,1);
- printf("hour:%d\r\n",calendar.hour);
- OLED_ShowNum(64,16,calendar.min,2,16,1);
- printf("min:%d\r\n",calendar.min);
- OLED_ShowNum(88,16,calendar.sec,2,16,1);
- printf("sec:%d\r\n",calendar.sec);
- OLED_Refresh();
- Delay_Ms(10);
- }
- }
复制代码 main.c文件主要进行函数初始化、DHT11模块异常检测显示、温湿度检测显示以及日期时间显示。
4、下载验证
将编译好的程序下载到开发版并复位,OLED显示如下:
1、当未检测到DHT11,OLED显示如下:
2、当已检测到DHT11,OLED显示如下:
70、温湿度及RTC显示.rar
70、温湿度及RTC显示.rar
(610.02 KB, 下载次数: 20)
链接:https://pan.baidu.com/s/1KIBvHQavbmRd-nasbtzIBg
提取码:d8rj
复制这段内容后打开百度网盘手机App,操作更方便哦
完
|