打印
[RISC-V MCU 应用开发]

第七十一章、CH32V103应用教程——温湿度及RTC显示

[复制链接]
2186|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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显示如下:

   

70、温湿度及RTC显示.rar

610.02 KB

使用特权

评论回复

相关帖子

沙发
zhuotuzi| | 2021-2-22 21:52 | 只看该作者
效果真不错。

使用特权

评论回复
板凳
单片小菜| | 2021-2-23 15:21 | 只看该作者
效果不错,期待有更好的作品。

使用特权

评论回复
地板
kana486| | 2024-2-3 12:37 | 只看该作者
请问下 这个RTC的 2个文件 复制到  用山河 建立的默认模板,其它都一样 就是报错误
12:36:22 **** 构建 of configuration obj for project CH32V103C8T6_TIME1 ****
make -j8 all
c:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe: ./User/main.o: in function `.LANCHOR0':
C:\MRS_DATA\workspace\CH32V103C8T6_TIME1\hardware\RTC/rtc.h:17: multiple definition of `calendar'; ./hardware/RTC/rtc.o:C:\MRS_DATA\workspace\CH32V103C8T6_TIME1\obj/../hardware/RTC/rtc.h:17: first defined here
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:59: CH32V103C8T6_TIME1.elf] Error 1

12:36:25 Build Failed. 3 errors, 0 warnings. (took 3s.443ms)


看了  calendar 的 这个也没问题 一样写的 。盼答复 ,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

293

帖子

41

粉丝