基于ARM内核的智能手环(day7)

news2025/2/28 3:01:28

RTC(实时时钟)

什么是RTC?

RTC是指实时时钟(Real-Time Clock),是一种能够持续跟踪时间的计时器,即使在设备断电的情况下也能保持时间的准确性。它通常用于需要准确时间记录的应用,比如计时器、日历、数据记录等。

RTC的工作原理

RTC的核心部分是一个稳定的时钟源,它以一定的频率(比如32.768KHz)运行,并且不会因为设备断电而停止。RTC可以通过内部的计数器来记录经过的时间,从而实现持续跟踪时间的功能。

image-20240407192522838

image-20240407192529365

由于标准库给了,所以我们简单看一下:

RTC配置和初始化

cCopy CodeExplain#include "rtc.h"

// 声明RTC配置和初始化函数
void RTC_Configuration(void);
void Time_Adjust(void);
uint32_t Time_Regulate(void);

// 定义保存当前时间的结构体变量
struct tm now_time;

// RTC配置函数
void RTC_Config(){
    // 检查RTC是否已配置
    if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)
    {
        // RTC未配置
        printf("\r\n\n RTC not yet configured....");
        // 进行RTC配置
        RTC_Configuration();
        printf("\r\n RTC configured....");
        // 调整时间
        Time_Adjust();
        // 将配置标志写入备份寄存器
        BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
    }
    else
    {
        // RTC已配置
        // 检查复位标志位
        if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
        {
            printf("\r\n\n Power On Reset occurred....");
        }
        else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)
        {
            printf("\r\n\n External Reset occurred....");
        }
        printf("\r\n No need to configure RTC....");
        // 等待RTC寄存器同步
        RTC_WaitForSynchro();
        // 启用RTC秒中断
        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        RTC_WaitForLastTask();
    }
}

// RTC配置函数
void RTC_Configuration(void)
{
    // 启用PWR和BKP时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    // 允许访问BKP域
    PWR_BackupAccessCmd(ENABLE);
    // 复位备份域
    BKP_DeInit();
    // 启用LSE
    RCC_LSEConfig(RCC_LSE_ON);
    // 等待LSE就绪
    while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
    {}
    // 选择LSE作为RTC时钟源
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    // 启用RTC时钟
    RCC_RTCCLKCmd(ENABLE);
    RTC_WaitForSynchro();
    RTC_WaitForLastTask();
    RTC_ITConfig(RTC_IT_SEC, ENABLE);
    RTC_WaitForLastTask();
    RTC_SetPrescaler(32767); // RTC周期 = RTCCLK / RTC_PR = (32.768 KHz) / (32767 + 1)
    RTC_WaitForLastTask();
}

// 获取当前时间的函数
uint32_t Time_Regulate(void)
{
    // 设置当前时间
    now_time.tm_year = 2024-1900;
    now_time.tm_mon = 4-1;
    now_time.tm_mday = 2;
    now_time.tm_hour = 10;
    now_time.tm_min = 13;
    now_time.tm_sec = 0;
    return mktime(&now_time);
}

// 调整时间的函数
void Time_Adjust(void)
{
    RTC_WaitForLastTask();
    RTC_SetCounter(Time_Regulate());
    RTC_WaitForLastTask();
}

接着我们通过数学函数画表盘

image-20240407193013096

void showbiaopan(int hour,int min)
{
	  	
    int sx1 = 0;
    int sx2 = 0;
    int sy1 = 0;
    int sy2 = 0;
				
    int sx3 = 0;
    int sx4 = 0;
    int sy3 = 0;
    int sy4 = 0;
	
    int mx1 = 0;
    int mx2 = 0;
    int my1 = 0;
    int my2 = 0;

    int mx3 = 0;
    int mx4 = 0;
    int my3 = 0;
    int my4 = 0;

    int hx1 = 0;
    int hx2 = 0;
    int hy1 = 0;
    int hy2 = 0;

    int hx3 = 0;
    int hx4 = 0;
    int hy3 = 0;
    int hy4 = 0;
		
		
		u32 time = 0;
 
		
		while(1)
		{
			switch(KEY_Check())
			{
			  case 1:
					showyemian1(HOUR,MIN,CHOUR,CMIN);
				case 2:
					showyemian2();
				case 3:
					showyemian3(TSTEP);
				case 4:
					showyemian4();
					
					
			}
				
				
			BreatheLed();
		  if(dj>=90000)
		{
			
		dj = 0;
    LCD_ShowPicture(0,0,240,320,(u8*)gImage_daiji);
			
		
		time = RTC_GetCounter();
    now_time = *localtime(&time);
		
	  now_time.tm_min += min;
    now_time.tm_hour += hour;
		
			
	  //
		get_points_on_concentric_circles(120, 160,0,20,now_time.tm_sec%60+30, &sx3, &sy3, &sx4, &sy4);
		LCD_DrawLine((uint16_t)sx3,(uint16_t)sy3,(uint16_t)sx4,(uint16_t)sy4,0);
    get_points_on_concentric_circles(120, 160,0,117,now_time.tm_sec%60, &sx3, &sy3, &sx4, &sy4);
		LCD_DrawLine((uint16_t)sx3,(uint16_t)sy3,(uint16_t)sx4,(uint16_t)sy4,0);
		
		//
	  get_points_on_concentric_circles(120, 160,30,115,now_time.tm_min%60, &mx1, &my1, &mx2, &my2);
    get_points_on_concentric_circles(120, 160,7,30,now_time.tm_min%60, &mx3, &my3, &mx4, &my4);

    LCD_DrawLine((uint16_t)mx1,(uint16_t)my1,(uint16_t)mx2,(uint16_t)my2,2);
		LCD_DrawLine((uint16_t)mx3,(uint16_t)my3,(uint16_t)mx4,(uint16_t)my4,0);
		
		//ʱ
	  get_points_on_concentric_circles(120, 160,30,72,now_time.tm_hour%12*5+5*now_time.tm_min/60, &hx1, &hy1, &hx2, &hy2);
    get_points_on_concentric_circles(120, 160,7,30,now_time.tm_hour%12*5+5*now_time.tm_min/60, &hx3, &hy3, &hx4, &hy4);

    LCD_DrawLine((uint16_t)hx1,(uint16_t)hy1,(uint16_t)hx2,(uint16_t)hy2,3);
		LCD_DrawLine((uint16_t)hx3,(uint16_t)hy3,(uint16_t)hx4,(uint16_t)hy4,1);

		
		
		
		}
		}
    
}

实现效果:

46962c1939af2e79ca84a5089ac5bf5

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遥感降水、气温数据的处理与可视化、ERA5大气再分析数据的统计分析、干旱监测及SCI论文写作技巧

深度探讨人工智能在大气科学中的应用,特别是如何结合最新AI模型与Python技术处理和分析气候数据。课程介绍包括GPT-4等先进AI工具,旨在帮助学员掌握这些工具的功能及应用范围。内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等实战案例…

Oracle数据库imp文件导入失败提示:“不是有效的导出文件, 标头验证失败”解决方法

导入数据库时,直接提示不是有效的导出文件,标头验证失败 原因:这是因为导出的imp文件和你当前导入的数据库版本不一致造成的,例如:导出文件版本号12.0.1 导入数据库的版本号11.0.2,会报这个错误。 解决办法…

[C++]map set

一、set 1、概念 set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部&…

泰迪智能科技高职人工智能专业人才培养方案

人工智能行业近年来得到了快速发展,全球科技公司都在竞相投入人工智能的研发,从硅谷到北京,都在人工智能上取得了显著的进步。人工智能已经从学术研究转变为影响制造业、医疗保健、交通运输和零售等多个行业的关键因素。我国政策的积极推动下…

备战2024年中学生古诗文大会(初中组):单选题真题和独家解析

我们继续来做中学生古诗文大会(初中组),即我们常说的初中生古诗文大会的部分真题,从中了解初中生古诗文大会的考察内容和形式,并且提供了我独家的题目解析和答案,供初中的同学们学习和参考。 初中生古诗文…

C++常用技巧与算法总结(简洁)

前言警告: 1、注意数据的边界,数组不能越界! 2、 时间复杂度 3、开long long 4、注意输出的四舍五入 printf("%d %.0f\n",k,sum*1.0/k);//double类型输出会自动四舍五入; 5、让Dev C支持C11 先在dev的【工具】里找…

从零到部署指南:Ubuntu上安装Boost和Crow库

1.安装boost 在安装Crow之前,需要确保您的系统中已经安装了Boost库。以下是Boost库安装步骤: 首先,从Boost官方网站或通过特定的链接下载Boost的源码,boost源码具体可参看这个链接: https://blog.csdn.net/duan199201…

提升App用户黏性,Xinstall推出注册用户自动绑定功能

在移动互联网时代,App的用户留存和活跃度对于产品的成功至关重要。然而,许多App在面临用户注册和绑定时,常常遭遇繁琐的操作流程和不佳的用户体验,导致用户流失严重。为了解决这一痛点,Xinstall推出了一项创新功能——…

蚂蚁集团CodeFuse 发布“图生代码”功能,支持产品设计图一键生成代码

4月11日,蚂蚁集团自研的智能研发平台CodeFuse推出“图生代码”新功能,支持开发人员用产品设计图一键生成代码,大幅提升前端页面的开发效率。目前相关功能正在内测。 和很多互联网公司一样,蚂蚁集团正在内部全面推行AI编程&#x…

Ubuntu-22.04安装Virtualbox并安装Windows10

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Virtualbox是什么?二、安装Virtualbox1.关闭Secure Boot2.安装 三、安装Windows101.新装虚拟机基本配置2.新装虚拟机核心配置 总结 前言 虚拟机…

【实战JVM】双亲委派机制

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

pip install opencv-python出现ModuleNotFoundError: No module named ‘skbuild‘错误解决方案

问题描述 File “”, line 1, in File “/tmp/pip-build-o148qsmj/opencv-python/setup.py”, line 10, in from skbuild import cmaker, setup ModuleNotFoundError: No module named ‘skbuild’ Command “python setup.py egg_info” failed with error code 1 in /tmp…

东用科技助力5G+区域教育管理智慧平安校园建设

一、 方案背景 为深入贯彻党中央、国务院关于加快5G发展、加强教育信息化工作的决策部署,加快推进《5G应用“扬帆”行动计划》实施,促进5G与教育融合创新发展,按照“育人为本、多方协同、问题导向、深度融合”的原则,工业和信息化…

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】 题目描述&#xff1a;解题思路一&#xff1a;DFS 中记录节点值的深度和编号&#xff0c;回溯写法。关键点是1 < nums[i] < 50解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1…

心跳机制原理学习

心跳机制 应用场景&#xff1a; 在长连接下&#xff0c;有可能很长一段时间都没有数据往来。理论上说&#xff0c;这个连接是一直保持连接的&#xff0c;但是实际情况中&#xff0c;如果中间节点出现什么故障是难以知道的。更要命的是&#xff0c;有的节点&#xff08;防火墙…

实验5 流程图和盒图ns图

一、实验目的 通过绘制流程图和盒图&#xff0c;熟练掌握流程图和盒图的基本原理。 能对简单问题进行流程图和盒图的分析&#xff0c;独立地完成流程图和盒图设计。 二、实验项目内容&#xff08;实验题目&#xff09; 1、用Microsoft Visio绘制下列程序的程序流程图。 若…

Go语言mac环境搭建详解

Go语言mac环境搭建详解见视频&#xff0c;视频下方也有讲解具体的操作步骤。 Golang Mac电脑环境搭建、开发工具Vscode配置 Go语言mac环境搭建步骤如下&#xff1a; 1、下载安装Golang Go官网下载地址&#xff1a;https://golang.org/dl/ Go官方镜像站&#xff08;推荐&…

一线城市嵌入式软件开发工程师每年调薪幅度能有多少?

15%对于刚入职的新人来说确实有可能有&#xff0c;如果你的底薪比较低的话。不过后面随着你工资变高&#xff0c;这个幅度会越来越趋向0%。在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在…

GEE数据集——汉森全球森林变化数据集Hansen Global Forest Change v1.11 (2000-2023)

Hansen Global Forest Change v1.11 (2000-2023) 对大地遥感卫星图像进行时间序列分析以确定全球森林范围和变化特征的结果。 第一个 "和 "最后一个 "波段是大地遥感卫星光谱波段&#xff08;红、近红外、SWIR1 和 SWIR2&#xff09;的第一个和最后一个可用年…

python镜像安装(ios、windows)

如果你在使用Python时发现官方网站下载速度过慢&#xff0c;可以考虑使用国内的Python镜像源下载Python。国内的Python镜像源可以提供更快的下载速度和更好的下载体验。 以下是使用国内Python镜像源下载Python的步骤&#xff1a; 步骤 1&#xff1a;选择Python版本 首先&…