[RISC-V MCU 应用开发] 第七十一章、CH32V103应用教程——温湿度及RTC显示

[复制链接]
 楼主| RISCVLAR 发表于 2021-2-21 20:10 | 显示全部楼层 |阅读模式
本帖最后由 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文件
  1. /********************************** (C) COPYRIGHT *******************************
  2. * File Name          : main.c
  3. * Author             : WCH
  4. * Version            : V1.0.0
  5. * Date               : 2020/04/30
  6. * Description        : Main program body.
  7. *******************************************************************************/

  8. /*
  9. *@Note
  10. 环境温湿度及RTC OLED显示:
  11. 本章教程使用温湿度传感器(DHT11)读取周围环境温湿度并通过OLED屏显示,同时显示时间。
  12. */

  13. #include "debug.h"
  14. #include "dht11.h"
  15. #include "rtc.h"
  16. #include "iic.h"
  17. #include "oled.h"

  18. /*******************************************************************************
  19. * Function Name  : main
  20. * Description    : Main program.
  21. * Input          : None
  22. * Return         : None
  23. *******************************************************************************/
  24. int main(void)
  25. {

  26.     u8 temperature;
  27.     u8 humidity;

  28.     Delay_Init();
  29.     USART_Printf_Init(115200);
  30.     OLED_Init();
  31.     RTC_Init();
  32.     DHT11_Init();

  33.     printf("SystemClk:%d\r\n",SystemCoreClock);
  34.     printf("DHT11 & RTC OLED Display\r\n");

  35.     //检测DHT11是否正常
  36.     while(DHT11_Init()) //DHT11初始化
  37.     {
  38.         OLED_Refresh();
  39.         Delay_Ms(500);
  40.         OLED_Clear();
  41.         OLED_ShowString(0,20,"DHT11 not normal",16,1);
  42.     }

  43.     OLED_Refresh();
  44.     Delay_Ms(500);
  45.     OLED_Clear();

  46.     OLED_ShowString(0,0,"Data:    /  /  ",16,1);
  47.     OLED_ShowString(0,16,"Time:  :  :  ",16,1);
  48.     OLED_ShowString(12,32,"Temp:   C",16,1);
  49.     OLED_ShowString(12,48,"Humi:   %",16,1);

  50.     while(1)
  51.     {
  52.         Delay_Ms(1000);

  53.         DHT11_Read_Data(&temperature,&humidity);
  54.         OLED_ShowNum(55,32,temperature,2,16,1);
  55.         OLED_ShowNum(55,48,humidity,2,16,1);
  56.         printf("temperature:%d\r\n",temperature);
  57.         printf("humidity:%d\r\n",humidity);

  58.         printf("year/month/day/week/hour/min/sec:\r\n");
  59.         printf("%d-%d-%d  %d  %d:%d:%d\r\n",calendar.w_year,calendar.w_month,calendar.w_date,
  60.                                             calendar.week,calendar.hour,calendar.min,calendar.sec );

  61.         OLED_ShowNum(40,0,calendar.w_year,4,16,1);
  62.         printf("hour:%d\r\n",calendar.w_year);

  63.         OLED_ShowNum(80,0,calendar.w_month,2,16,1);
  64.         printf("min:%d\r\n",calendar.w_month);

  65.         OLED_ShowNum(104,0,calendar.w_date,2,16,1);
  66.         printf("sec:%d\r\n",calendar.w_date);


  67.         OLED_ShowNum(40,16,calendar.hour,2,16,1);
  68.         printf("hour:%d\r\n",calendar.hour);

  69.         OLED_ShowNum(64,16,calendar.min,2,16,1);
  70.         printf("min:%d\r\n",calendar.min);

  71.         OLED_ShowNum(88,16,calendar.sec,2,16,1);
  72.         printf("sec:%d\r\n",calendar.sec);


  73.         OLED_Refresh();
  74.         Delay_Ms(10);
  75.     }
  76. }

main.c文件主要进行函数初始化、DHT11模块异常检测显示、温湿度检测显示以及日期时间显示。

4下载验证
将编译好的程序下载到开发版并复位,OLED显示如下:
1、当未检测到DHT11,OLED显示如下:
   微信图片_20210221194359.jpg
2、当已检测到DHT11,OLED显示如下:
微信图片_20210221194414.jpg

   

70、温湿度及RTC显示.rar

610.02 KB, 下载次数: 181

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 的 这个也没问题 一样写的 。盼答复 ,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

296

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部

133

主题

296

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部