【WCH】CH32F203基于内部RTC+I2C SSD1306 OLED时钟和温度显示

【WCH】CH32F203基于内部RTC+I2C SSD1306 OLED时钟和温度显示

  • 📌相关篇《【WCH】CH32F203基于内部RTC时钟+I2C SSD1306 OLED显示》
  • 📺显示效果:
  • 在这里插入图片描述
  • ✨主要是在其基础 上增加温度显示,温度数据来源于DS18B20,更换了OLED驱动显示字体相关内容。
  • 🔰仅作为功能演示,内部RTC精度不高,长时间运行需要依赖第三方数据校准才行。
  • 🔖代码是从STM32工程基础上修改来的,修改相关内容后完全可以适配CH32F203上运行。

⛳相关驱动注意事项

  1. 软件I2C驱动SSD1306需要注意,驱动引脚需要配置为推挽输出模式,而不是像硬件I2C那样引脚配置使用开漏输出。
  2. 采用内部RTC时钟源,其时钟频率为40KHz,作为时钟源分频系数:39999

📑引脚定义说明

  • 🎉引脚可以根据个人使用需求切换到任意其他可用引脚上。
CH32F203 ------  I2C SSD1306 OLED
  PA5	-------  SCL
  PA7   -------   SDA
  
CH32F203 ------  DS18B20
  PA15   ------  DATA

📓驱动代码部分

  • 🌿内部RTC初始化代码
u8 RTC_Init(void)
{
    u8 temp = 0;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);	//使能PWR和BKP外设时钟
    PWR_BackupAccessCmd(ENABLE);	//使能后备寄存器访问
//	if (BKP_ReadBackupRegister(BKP_DR1) != 0XA1A1)		//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
//	{

    BKP_DeInit();	//复位备份区域
    RCC_LSICmd(ENABLE);
//		RCC_LSEConfig(RCC_LSE_ON);	//设置外部低速晶振(LSE),使用外设低速晶振
//		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)	//检查指定的RCC标志位设置与否,等待低速晶振就绪
//		while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
    while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET && temp < 250)
    {
        temp++;
        delay_ms(10);
    }
    if(temp >= 250)return 1; //初始化时钟失败,晶振有问题
//		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
    RCC_RTCCLKCmd(ENABLE);	//使能RTC时钟
    RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
    RTC_WaitForSynchro();		//等待RTC寄存器同步
    //		RTC_ITConfig(RTC_IT_ALR, ENABLE);
    RTC_ITConfig(RTC_IT_SEC, ENABLE);		//使能RTC秒中断
    RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
    RTC_EnterConfigMode();/// 允许配置
    RTC_SetPrescaler(40000-1);
//		RTC_SetPrescaler(32767); //设置RTC预分频的值
    RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
    RTC_Set(2023, 4, 25, 18, 0, 35); //设置时间
    RTC_ExitConfigMode(); //退出配置模式
    BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);	//向指定的后备寄存器中写入用户程序数据
    RTC_NVIC_Config();//RCT中断分组设置
    RTC_Get();//更新时间
    return 0; //ok

}
  • 🌿main主程序代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "rtc.h"
#include "ds18b20.h"

u8 year_buf[4];
u8 month_buf[2];
u8 day_buf[2];
u8 temp_buf[4];

int main(void)
{
    u16 temp;
    delay_init();	     //延时初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    
    OLED_Init();
    RTC_Init();	  			//RTC初始化
    DS18B20_Init();

    delay_ms(200);
    OLED_CLS();
    OLED_P16x16Ch(40, 0, 36); //第一行第三列显示年
    OLED_P16x16Ch(72, 0, 37);      //显示月
    OLED_P16x16Ch(106, 0, 38);      //显示日
    OLED_P16x16Ch(0, 6, 39); //星
    OLED_P16x16Ch(16, 6, 41); //期
    OLED_P16x16Ch(32, 2, 34);
    OLED_P16x16Ch(32, 4, 35); //:
    OLED_P16x16Ch(80, 2, 34);
    OLED_P16x16Ch(80, 4, 35); //:
    while(1)
    {
        sprintf((char*)year_buf, "%04d", calendar.w_year);
        OLED_P8x16Str(8, 0, year_buf);
        sprintf((char*)month_buf, "%02d", calendar.w_month);
        OLED_P8x16Str(58, 0, month_buf);
        sprintf((char*)day_buf, "%02d", calendar.w_date);
        OLED_P8x16Str(90, 0, day_buf);

        OLED_P16x16Ch(0, 2, calendar.hour / 10 * 2);
        OLED_P16x16Ch(0, 4, calendar.hour / 10 * 2 + 1); //
        OLED_P16x16Ch(16, 2, calendar.hour % 10 * 2);
        OLED_P16x16Ch(16, 4, calendar.hour % 10 * 2 + 1); //

        OLED_P16x16Ch(48, 2, calendar.min / 10 * 2);
        OLED_P16x16Ch(48, 4, calendar.min / 10 * 2 + 1); //
        OLED_P16x16Ch(64, 2, calendar.min % 10 * 2);
        OLED_P16x16Ch(64, 4, calendar.min % 10 * 2 + 1); //

        OLED_P16x16Ch(95, 2, calendar.sec / 10 * 2);
        OLED_P16x16Ch(95, 4, calendar.sec / 10 * 2 + 1); //
        OLED_P16x16Ch(111, 2, calendar.sec % 10 * 2);
        OLED_P16x16Ch(111, 4, calendar.sec % 10 * 2 + 1); //

        OLED_P16x16Ch(32, 6, calendar.week + 20); //

        temp = DS18B20_Get_Temp();
        OLED_P16x16str(64, 6, 11);
        OLED_P16x16str(80, 6, 12);
        OLED_P16x16str(96, 6, temp % 1000 / 100);
        OLED_P16x16str(112, 6, temp % 100 / 10);

    }
}

📚工程源码

  • ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取。
  • 🍁对于文中所提供的相关资源链接将作不定期更换。
链接: https://pan.baidu.com/s/1Xxkau67AxeHwqFFvrP095Q
提取码: 1adv

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大型Saas系统的权限体系设计(二)

X0 上期回顾 上文《大型Saas系统的权限体系设计(一)》提到2B的Saas系统的多层次权限体系设计的难题&#xff0c;即平台、平台的客户、客户的客户&#xff0c;乃至客户的客户的客户如何授权&#xff0c;这个可以通过“权限-角色-岗位”三级结构来实现。 但这个只是功能权限&am…

Apache安装与基本配置

1. 下载apache 地址&#xff1a;www.apache.org/download.cgi&#xff0c;选择“files for microsoft windows”→点击”ApacheHaus”→点击”Apache2.4 VC17”&#xff0c;选择x64/x86&#xff0c;点击右边download下面的图标。 2. 安装apache &#xff08;1&#xff09;把…

【LeetCode】1000题挑战(220/1000)

1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 目录 1000题挑战 没有废话&#xff0c;直接开刷&#xff01; 第一题&#xff1a;119. 杨辉三角 II - 力扣&#xff08;Leetcode&#xff09; 题目接口 解题思路 代码&#xff1a; 过过过过啦&#xff01;&#x…

【软考备战·希赛网每日一练】2023年5月2日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源&#xff1a;2023年05月02日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 三、知识查缺 复习 流水线技术。序列图&#xff08;顺序图&#xff09;用于展现系统中一个用例和多…

【五一创作】[论文笔记]图片人群计数CSRNet,Switch-CNN

2018(有代码)_CSRNet (10次) 应用最最广泛的&#xff1a;e, is the most widely used while working with counting problems. 2018_CVPR——CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes https://arxiv.org/abs/1802.100…

第八章 集合函数

文章目录 前言一、聚合函数介绍1 、AVG (平均值) 和SUM &#xff08;求和&#xff09;函数2 、MIN&#xff08;最小值&#xff09;和MAX&#xff08;最大值&#xff09;函数3 、COUNT函数问题&#xff1a;用count(*)&#xff0c;count(1)&#xff0c;count(列名)谁好呢? 二、G…

嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库&#xff0c;但MySQL这种数据库明显只能本地访问&#xff0c;把软…

ChatGPT能让智能客服更上一层楼么?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 现实生活中&#xff0c;智能客服的身影已随处可见。 随着全球经济从以产品为主向以服务为主转型&#xff0c;体验经济也快速发展。客户服务逐渐成为一个独立的产业&#xff0c;而客服中心也成为所有企业的基本部门。然而&am…

利用snpEff对基因型VCF文件进行变异注释的详细方法

利用snpEff对VCF文件进行变异注释 群体遗传研究中&#xff0c;在获得SNP位点后,我们需要对SNP位点进行注释&#xff0c;对这些SNP位点进行更深的了解。 snpEff是一个用于对基因组单核苷酸多态性(SNP)进行注释的软件&#xff0c;snpEff软件可以用于对VCF文件进行变异注释&…

Packet Tracer - 配置和验证小型网络

Packet Tracer - 配置和验证小型网络 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.10.10.1 255.255.255.0 不适用 G0/1 10.10.20.1 255.255.255.0 不适用 SW1 VLAN1 10.10.10.2 255.255.255.0 10.10.10.1 SW2 VLAN1 10.10.20.2 255.25…

基于AI技术的智能考试系统设计与实现(论文+源码)_kaic

摘 要 随着当今世界互联网信息技术的飞速发展&#xff0c;互联网在人们生活中的应用越来越广泛&#xff0c;在线考试成为选拔人才的重要方法。实现一个基于AI技术的智能考试系统&#xff0c;该系统采用Java编程语言实现。通过使用自然语言处理技术和机器学习算法&#xff0c;该…

GPT-3.5 也能直接联网了

ChatGPT 常令人诟病的一个问题&#xff0c;就是它的模型训练数据&#xff0c;迄今为止用的还是 2021 年的老数据。 对于当下这个信息大爆炸时代&#xff0c;相隔两小时&#xff0c;消息都有可能滞后&#xff0c;更别说相隔两年了。 目前正式开放了 Web Browsing 这款插件。 …

力扣刷题2023-04-29-1——题目:1431. 拥有最多糖果的孩子

题目&#xff1a; 给你一个数组 candies 和一个整数 extraCandies &#xff0c;其中 candies[i] 代表第 i 个孩子拥有的糖果数目。 对每一个孩子&#xff0c;检查是否存在一种方案&#xff0c;将额外的 extraCandies 个糖果分配给孩子们之后&#xff0c;此孩子有 最多 的糖果…

PostgreSQL16中pg_dump的LZ4和ZSTD压缩

PostgreSQL16中pg_dump的LZ4和ZSTD压缩 pg_dump压缩lz4和zstd LZ4和ZSTD压缩算法合入了PG16。LZ4补丁的作者是Georgios Kokolatos。由Tomas Vondra提交。由Michael Paquier、Rachel Heaton、Justin Pryzby、Shi Yu 和 Tomas Vondra 审阅。提交消息是&#xff1a; Expand pg_dum…

开箱即用的ChatGPT替代模型,还可训练自己数据

一、普遍关注是什么&#xff1f; OpenAI 是第一个在该领域取得重大进展的公司&#xff0c;并且使围绕其服务构建抽象变得更加容易。然而&#xff0c;便利性带来了集中化、通过中介的成本、数据隐私和版权问题。 而数据主权和治理是这些新的LLM服务提供商如何处理商业秘密或敏…

VS Code C++ 输出窗口中文乱码问题解决

VS Code C 输出窗口中文乱码问题解决 系统cmd终端乱码 的情况&#xff1a;原因解决方法&#xff1a;&#xff08;仅针对cmd终端输出的情况&#xff09;方法一&#xff1a;更改代码文件的编码方法二 &#xff1a;更改cmd默认终端的编码方式 系统cmd终端乱码 的情况&#xff1a; …

Go官方指南(五)并发

Go 程 Go 程&#xff08;goroutine&#xff09;是由 Go 运行时管理的轻量级线程。 go f(x, y, z) 会启动一个新的 Go 程并执行 f(x, y, z) f, x, y 和 z 的求值发生在当前的 Go 程中&#xff0c;而 f 的执行发生在新的 Go 程中。 Go 程在相同的地址空间中运行&#xff0c…

HTML学习笔记一

目录 HTML学习笔记 一、HTML标签 1、HTML语法规范 1.1标签的语法概述 1.2标签关系 2、HTML基本结构标签 2.1第一个HTML 2.2基本结构标签总结 3、开发工具 4、HTML常用标签 4.1标签的语义 4.2标题标签 4.3段落和换行标签 4.4文本格式化标签 4.5div和span标签 4.…

光缆线路网的组网结构是怎样的

1 引言 根据GB 51158-2015《通信线路工程设计规范》&#xff0c;通信线路网包括长途线路、本地线路和接入线路&#xff0c;如图1所示。 图1 通信线路网的组成 根据传输媒质的不同&#xff0c;通信线路分为光缆线路和电缆线路。通信线路也经历了从架空明线到电缆线路再到光缆线路…

WRF模式的移植、运行、后处理及在多领域的应用

1、WRF模式的各个组成部分&#xff1b; 2、自主完成该模式的移植&#xff1b;3、自主完成模式运行&#xff1b; 4、自主完成模式后处理&#xff1b;5、通过多领域案例分析、实践&#xff0c;熟悉在多领域中的应用。 随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我…