本帖最后由 RISCVLAR 于 2021-2-21 20:09 编辑
CH32V103应用教程——温湿度及RTC显示
本章教程主要使用温湿度传感器(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显示如下:
|