查看: 1302|回复: 0
收起左侧

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

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

    发表于 2021-4-30 21:01:53 | 显示全部楼层 |阅读模式

    有人预言,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文件
    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显示如下:
    CH32V CH573单片机芯片-第七十一章:CH32V103应用教程——温湿度及RTC显示risc-v单片机中文社区(1)
    2、当已检测到DHT11,OLED显示如下:
    CH32V CH573单片机芯片-第七十一章:CH32V103应用教程——温湿度及RTC显示risc-v单片机中文社区(2)

    70、温湿度及RTC显示.rar
    CH32V CH573单片机芯片-第七十一章:CH32V103应用教程——温湿度及RTC显示risc-v单片机中文社区(3) 70、温湿度及RTC显示.rar (610.02 KB, 下载次数: 20)
    链接:https://pan.baidu.com/s/1KIBvHQavbmRd-nasbtzIBg
    提取码:d8rj
    复制这段内容后打开百度网盘手机App,操作更方便哦







    上一篇:第七十章:CH32V103应用教程——DHT11的应用
    下一篇:第七十二章:CH32V103应用教程——PWM输出-8路
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-24 03:56 , Processed in 0.639403 second(s), 48 queries .

    快速回复 返回顶部 返回列表