当前位置: 首页 > article >正文

基于STM32的电子钟与万年历设计

一、系统概述与核心功能1. 系统定位基于STM32的电子钟与万年历以“精准计时-日期管理-人机交互-低功耗续航”为核心实现实时时间时/分/秒、完整日期年/月/日/星期、闰年自动判断、闹钟提醒、温度监测可选及多模式显示支持按键/旋转编码器设置适用于家庭、办公室、教室等场景替代传统石英钟/纸质日历提供智能化时间管理方案。2. 核心功能模块模块功能描述时间基准实时时钟RTC提供精准时间年/月/日/时/分/秒/星期支持断电走时纽扣电池备份日期管理自动计算闰年、每月天数支持农历转换可选显示节气/节日扩展显示输出OLED/LCD显示时间、日期、星期、温度可选支持多界面切换时间/日历/闹钟用户交互按键/旋转编码器设置时间、闹钟蜂鸣器提示闹钟/操作反馈LED状态指示数据存储存储闹钟设置、用户偏好如亮度支持掉电保存EEPROM/Flash低功耗设计待机时关闭非必要模块显示/传感器STM32进入STOP模式续航≥6个月纽扣电池二、硬件设计方案1. 核心硬件选型模块型号关键参数接口方式主控MCUSTM32F103C8T672MHz Cortex-M364KB Flash20KB RAMI2C、SPI、UART支持低功耗模式核心控制器实时时钟DS3231精度±2ppm±1分钟/年I2C接口内置温度补偿纽扣电池CR2032备份I2C1PB6SCLPB7SDA显示模块OLED 12864I2C0.96寸128×64像素自发光低功耗10mA显示时间/日期/温度I2C1复用DS3231输入模块旋转编码器轻触按键编码器调节时间/音量按键设置/确认/返回上拉输入消抖处理GPIOPA0-PA2编码器PC0-PC1按键温度传感器DS18B20可选单总线接口测温范围-55~125℃精度±0.5℃数字输出GPIOPA1单总线电源模块CR2032纽扣电池AMS11173V纽扣电池RTC备份5V Micro USB供电主电源AMS1117-3.3V稳压双电源供电主电源优先辅助模块蜂鸣器LED有源蜂鸣器5V85dBLED红/绿双色电源/闹钟状态GPIOPB0蜂鸣器PB1LED2. 硬件电路设计要点2.1 核心电路连接STM32最小系统8MHz外部晶振32.768kHz RTC晶振DS3231共享SWD调试接口PA13/PA14复位电路10kΩ上拉0.1μF电容。DS3231 RTCVCC3.3VSCLPB6SDAPB7INT/SQW引脚PA3闹钟中断输出纽扣电池座CR2032并联二极管防倒灌。OLED显示VCC3.3VSCLPB6SDAPB7与DS3231复用I2C总线地址区分DS32310x68OLED0x3C。旋转编码器A相PA0B相PA1Z相按压PA2上拉电阻10kΩ检测旋转方向与步数。2.2 低功耗设计双电源切换主电源5V正常时给系统供电并为纽扣电池充电通过二极管隔离主电源断开时自动切换至纽扣电池仅维持RTC运行。模块电源控制OLED、DS18B20通过MOS管AO3400控制供电待机时关闭按键/编码器中断唤醒后开启。三、软件设计与核心代码1. 系统架构轮询中断采用前后台系统无RTOS以主循环轮询为主中断处理按键/编码器/闹钟事件核心流程初始化配置时钟、I2C、GPIO、RTC、显示模块。主循环读取RTC时间/日期→更新显示→扫描按键/编码器→处理设置/闹钟。中断服务外部中断编码器旋转/按键、RTC闹钟中断触发蜂鸣器。2. 核心代码实现基于标准库2.1 DS3231 RTC驱动I2C通信#includeds3231.h#includei2c.h// DS3231寄存器地址#defineDS3231_SEC0x00// 秒#defineDS3231_MIN0x01// 分#defineDS3231_HOUR0x02// 时#defineDS3231_WEEK0x03// 星期#defineDS3231_DATE0x04// 日#defineDS3231_MON0x05// 月#defineDS3231_YEAR0x06// 年#defineDS3231_CTRL0x0E// 控制寄存器#defineDS3231_STATUS0x0F// 状态寄存器// 写DS3231寄存器voidDS3231_WriteReg(uint8_treg,uint8_tval){HAL_I2C_Mem_Write(hi2c1,0x681,reg,1,val,1,100);}// 读DS3231寄存器uint8_tDS3231_ReadReg(uint8_treg){uint8_tval;HAL_I2C_Mem_Read(hi2c1,0x681,reg,1,val,1,100);returnval;}// 设置时间时/分/秒BCD码voidDS3231_SetTime(uint8_thour,uint8_tmin,uint8_tsec){DS3231_WriteReg(DS3231_SEC,sec);// 秒BCD码如30秒0x30DS3231_WriteReg(DS3231_MIN,min);// 分DS3231_WriteReg(DS3231_HOUR,hour);// 时24小时制}// 读取时间返回BCD码需转换为十进制voidDS3231_ReadTime(uint8_t*hour,uint8_t*min,uint8_t*sec){*secDS3231_ReadReg(DS3231_SEC);*minDS3231_ReadReg(DS3231_MIN);*hourDS3231_ReadReg(DS3231_HOUR);}// 设置日期年/月/日/星期BCD码voidDS3231_SetDate(uint8_tyear,uint8_tmonth,uint8_tdate,uint8_tweek){DS3231_WriteReg(DS3231_WEEK,week);// 星期1-71周日DS3231_WriteReg(DS3231_DATE,date);// 日DS3231_WriteReg(DS3231_MON,month);// 月DS3231_WriteReg(DS3231_YEAR,year);// 年后两位如20230x23}2.2 时间日期处理闰年判断星期计算// BCD码转十进制uint8_tbcd2dec(uint8_tbcd){return(bcd4)*10(bcd0x0F);}// 十进制转BCD码uint8_tdec2bcd(uint8_tdec){return((dec/10)4)|(dec%10);}// 闰年判断返回1闰年0平年uint8_tIs_LeapYear(uint16_tyear){if((year%40year%100!0)||year%4000)return1;return0;}// 计算每月天数考虑闰年2月uint8_tDays_In_Month(uint16_tyear,uint8_tmonth){uint8_tdays[]{31,28,31,30,31,30,31,31,30,31,30,31};if(month2Is_LeapYear(year))return29;returndays[month-1];}// 计算星期基姆拉尔森公式返回0-6周日-周六uint8_tCalc_Weekday(uint16_tyear,uint8_tmonth,uint8_tday){if(month3){month12;year--;}return(day2*month3*(month1)/5yearyear/4-year/100year/400)%7;}2.3 OLED显示驱动时间/日期界面#includeoled.h#includefont.h// 字库6x8/8x16 ASCII// OLED写命令/数据voidOLED_WriteCmd(uint8_tcmd){HAL_I2C_Mem_Write(hi2c1,0x3C1,0x00,1,cmd,1,100);}voidOLED_WriteData(uint8_tdata){HAL_I2C_Mem_Write(hi2c1,0x3C1,0x40,1,data,1,100);}// 清屏voidOLED_Clear(void){for(uint8_tpage0;page8;page){OLED_WriteCmd(0xB0page);// 页地址OLED_WriteCmd(0x00);// 列低4位OLED_WriteCmd(0x10);// 列高4位for(uint8_tcol0;col128;col)OLED_WriteData(0x00);}}// 显示时间时:分:秒居中voidOLED_ShowTime(uint8_thour,uint8_tmin,uint8_tsec){charstr[9];sprintf(str,%02d:%02d:%02d,bcd2dec(hour),bcd2dec(min),bcd2dec(sec));OLED_ShowString(40,2,str,16);// 第2页16x16字体x40居中}// 显示日期年-月-日 星期XvoidOLED_ShowDate(uint8_tyear,uint8_tmonth,uint8_tdate,uint8_tweek){char*week_str[]{Sun,Mon,Tue,Wed,Thu,Fri,Sat};charstr[20];sprintf(str,20%02d-%02d-%02d %s,bcd2dec(year),bcd2dec(month),bcd2dec(date),week_str[week]);OLED_ShowString(10,4,str,16);// 第4页}2.4 主程序框架时间更新显示按键处理#includestm32f1xx_hal.h#includeds3231.h#includeoled.h#includekey.h// 按键/编码器驱动intmain(void){HAL_Init();SystemClock_Config();// 72MHzMX_I2C1_Init();// I2C1DS3231OLEDOLED_Init();// OLED初始化DS3231_Init();// RTC初始化检查电池设置初始时间Key_Init();// 按键/编码器初始化OLED_Clear();uint8_thour,min,sec,year,month,date,week;while(1){// 1. 读取RTC时间日期DS3231_ReadTime(hour,min,sec);DS3231_ReadDate(year,month,date,week);// 需补充DS3231_ReadDate函数// 2. 更新显示OLED_ShowTime(hour,min,sec);OLED_ShowDate(year,month,date,week);// 3. 按键处理设置时间/闹钟Key_Process();// 扫描按键处理设置逻辑// 4. 低功耗处理无操作5分钟后进入STOP模式if(idle_time300){// 5分钟300秒OLED_Clear();HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);// 进入STOP模式SystemClock_Config();// 唤醒后重新配置时钟}HAL_Delay(200);// 200ms刷新一次}}参考代码 基于STM32的电子钟与万年历设计www.youwenfan.com/contentcst/133691.html四、关键技术与优化1. 时间精度保障DS3231温度补偿内置温度传感器实时校准晶振频率年误差1分钟无需频繁校时。软件校时通过GPS/网络如ESP8266获取标准时间定期校准RTC如每天一次。2. 显示优化多界面切换通过按键切换“时间界面”“日历界面”“闹钟设置界面”日历界面显示月视图高亮当天。亮度调节旋转编码器控制OLED对比度通过I2C发送指令0x81, 0-255。3. 低功耗设计STOP模式配置进入STOP模式前关闭OLED、I2C时钟仅保留RTC和按键中断PA0-PA2唤醒后恢复时钟和外设。纽扣电池管理主电源断开时DS3231自动切换至纽扣电池供电电流1μA确保时间持续走时。五、系统调试与扩展1. 调试步骤阶段操作工具硬件调试测量I2C信号SCL/SDA、DS3231电压3.3V示波器、万用表RTC校时用串口打印DS3231时间对比标准时钟串口助手、标准时钟显示测试显示固定字符串检查OLED是否缺画/花屏肉眼观察、逻辑分析仪I2C波形低功耗测试进入STOP模式测量纽扣电池电流应1μA万用表电流档串联测量2. 扩展功能农历显示添加农历算法如查表法在日历界面叠加显示农历日期/节气。世界时间通过按键切换不同时区如UTC8、UTC-5显示多城市时间。蓝牙同步添加HC-05模块通过手机APP设置时间、闹钟同步日程。环境光感应添加光敏电阻自动调节OLED亮度白天高亮夜晚低亮。

相关文章:

基于STM32的电子钟与万年历设计

一、系统概述与核心功能 1. 系统定位 基于STM32的电子钟与万年历以“精准计时-日期管理-人机交互-低功耗续航”为核心,实现实时时间(时/分/秒)、完整日期(年/月/日/星期)、闰年自动判断、闹钟提醒、温度监测&#xff0…...

Firecrawl MCP 进阶 | 利用 Cursor 实现多层级网页爬取与智能数据整合

1. 为什么需要多层级网页爬取? 在日常开发或数据分析工作中,我们经常遇到需要从网站上批量获取数据的情况。比如你想分析某个技术博客所有专栏文章的关键词分布,或者需要收集电商网站某个品类下所有商品的价格信息。这时候简单的单页面抓取就…...

游戏开发者必看:如何在Unity中实现Cook-Torrance PBR材质(附完整Shader代码)

Unity高级PBR材质实战:Cook-Torrance模型全解析与Shader优化 在游戏开发领域,物理基础渲染(PBR)已成为次世代画面的标配技术。作为Unity开发者,掌握Cook-Torrance BRDF模型的实现原理与优化技巧,能够显著提…...

跳出薄利泥潭:服装企业从“被动应付”到“主动破局”

深耕服装行业多年,见过太多企业陷入同一个怪圈:生产线越扩越大,订单量看似不错,利润却越做越薄;想冲高端市场,要么拿不下客户,要么被国际品牌压价;明明不缺生产能力,却始…...

深入解析MySQL AVG()函数:从基础语法到实战应用

1. MySQL AVG()函数基础入门 刚接触MySQL时,我发现很多新手对AVG()函数存在误解,以为它就是个简单的"平均数计算器"。实际上这个函数藏着不少门道,今天我就用最接地气的方式带大家彻底搞懂它。 AVG()函数的本质是计算某列数值的平均…...

Joy-Con Toolkit终极指南:免费解决手柄漂移和自定义你的Switch手柄

Joy-Con Toolkit终极指南:免费解决手柄漂移和自定义你的Switch手柄 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit Joy-Con Toolkit是一款功能强大的开源工具,专门为Nintendo Switch玩家设…...

告别命令行!用FFMpegCore在C#里给视频加水印、转码、截图的保姆级教程

告别命令行!用FFMpegCore在C#里给视频加水印、转码、截图的保姆级教程 在当今视频内容爆炸式增长的时代,无论是社交平台、在线教育还是企业宣传,视频处理已成为开发者绕不开的技术需求。传统FFmpeg命令行工具虽然功能强大,但对于.…...

信道模型选择指南:从时变多径到离散矩阵的适用场景与FFT点数权衡

1. 信道模型选择的核心逻辑 搞通信系统设计的朋友们应该都深有体会,信道建模就像盖房子的地基,选错模型后续所有算法性能都会跑偏。我十年前做第一个MIMO系统时,就曾因为模型选择不当导致仿真结果和实测差了十万八千里。今天我们就来聊聊如何…...

直流电流采样四大方案:从原理到选型实战指南

1. 直流电流采样技术概述 测量直流电流就像给电路做"体检",不同的采样方案就是不同的"体检设备"。作为嵌入式工程师,我在设计户外储能电源时发现,选错采样方案轻则导致数据不准,重则引发系统故障。直流电流采…...

Ubuntu 18.04 远程桌面新选择:XRDP一键部署与安全配置指南

1. 为什么选择XRDP作为Ubuntu 18.04远程桌面方案 如果你正在管理Ubuntu 18.04服务器,突然需要图形化操作界面,XRDP绝对是个值得考虑的选择。相比传统的VNC方案,XRDP最大的优势就是原生支持Windows远程桌面协议(RDP)&am…...

SRS流媒体服务器搭建与OBS推流实战指南

1. 从零搭建SRS流媒体服务器 第一次接触流媒体服务器时,我也被各种专业术语搞得晕头转向。直到发现SRS这个轻量级开源项目,才真正体会到"五分钟搭建直播服务器"的快感。SRS全称Simple Realtime Server,就像它的名字一样&#xff0c…...

Matlab实战:手把手教你用区域法(zonal method)重构波前相位(附完整代码)

Matlab实战:区域法波前重构技术详解与代码实现 在自适应光学系统中,波前重构是从斜率测量数据中恢复原始波前相位分布的核心技术。区域法(zonal method)因其计算效率高、实现简单等优势,成为工程实践中的首选方案。本文将深入解析Southwell和…...

淘宝商品上下架时间批量获取的5种高效方法解析

1. 淘宝助理:一键查询商品上下架时间 淘宝助理作为官方推出的卖家工具,在批量获取商品上下架时间方面有着天然优势。我刚开始做淘宝店铺时,最头疼的就是手动记录几百个商品的上下架时间,直到发现了这个神器。具体操作非常简单&…...

Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本)

Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本) 在跨平台移动开发领域,Xamarin一直以其原生性能和代码共享优势占据重要地位。然而,随着项目规模扩大,传统的MVVM实现…...

单细胞分析新范式:像问ChatGPT一样,用CellWhisperer给你的细胞聚类“起名字”和“写报告”

单细胞分析新范式:像问ChatGPT一样,用CellWhisperer给你的细胞聚类“起名字”和“写报告” 在单细胞测序技术飞速发展的今天,科研人员面临着一个新的挑战:如何高效地从海量的单细胞数据中提取有意义的生物学信息。传统的单细胞数据…...

合宙ESP32-C3深度睡眠唤醒失败?手把手教你进入Download模式救砖

合宙ESP32-C3深度睡眠唤醒失败?手把手教你进入Download模式救砖 当你的合宙ESP32-C3开发板在执行esp_deep_sleep_start()后彻底"沉睡",既无法唤醒也无法通过串口连接,这种状况确实令人焦虑。特别是使用无串口芯片版本时&#xff0c…...

LightOnOCR-2-1B快速上手指南:3步完成图片上传→文字提取→结果导出

LightOnOCR-2-1B快速上手指南:3步完成图片上传→文字提取→结果导出 你是否曾经遇到过需要从图片中提取文字,却不想手动输入的烦恼?无论是扫描文档、照片中的文字,还是截图中的信息,手动录入既费时又容易出错。现在&am…...

3步实现Figma中文界面:设计师翻译校验的完整解决方案

3步实现Figma中文界面:设计师翻译校验的完整解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 在全球化设计协作的时代,Figma中文界面本地化工具figmaCN成…...

iOS Universal Links 配置中的常见陷阱与解决方案

1. 为什么你的Universal Links总是不生效? 每次看到Universal Links配置失败,我都想起自己第一次踩坑的经历。明明按照文档一步步操作,测试时却死活跳转不到App,那种挫败感记忆犹新。后来才发现,问题往往出在几个关键细…...

如何用Audiveris将纸质乐谱转换为数字音乐?5步搞定专业级音乐识别

如何用Audiveris将纸质乐谱转换为数字音乐?5步搞定专业级音乐识别 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 你是否曾面对一叠泛黄的纸质乐谱感到束手无策?…...

LaserGRBL架构深度解析:开源激光雕刻控制软件的技术实现与性能优化

LaserGRBL架构深度解析:开源激光雕刻控制软件的技术实现与性能优化 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL作为一款专为激光雕刻优化的开源控制软件,通过深度…...

**用Python + Stable Diffusion 实现AI绘画自动化流水线:从提示词到图像输出的

用Python Stable Diffusion 实现AI绘画自动化流水线:从提示词到图像输出的全流程实战 在当前人工智能快速发展的背景下,AI绘画技术已成为创意产业的重要工具。本文将带你构建一个完整的 Python驱动的AI绘画自动化系统,基于 Stable Diffusion…...

避坑指南:用PaddleHub+ACE2P实现直播人像实时分割时遇到的5个典型问题

直播人像实时分割实战:ACE2P模型避坑指南与性能优化 直播场景下的人像实时分割技术正在重塑互动体验的边界,从虚拟背景替换到AR特效叠加,这项技术为内容创作者提供了前所未有的创意空间。然而在实际工程落地中,开发者们常常面临模…...

终极AEUX插件指南:3步实现Figma到AE的无缝动画设计工作流

终极AEUX插件指南:3步实现Figma到AE的无缝动画设计工作流 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 想要将精美的Figma设计稿快速转换为After Effects动画项目&#xf…...

大气层系统:Switch开源项目安装配置完全指南

大气层系统:Switch开源项目安装配置完全指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 你是否想让Switch拥有更多自定义功能,却担心操作复杂、风险太高&#x…...

城通网盘直连解析工具终极指南:3大技术突破实现高速下载

城通网盘直连解析工具终极指南:3大技术突破实现高速下载 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经面对城通网盘的龟速下载而束手无策?每次下载文件都要经历漫长…...

【独家解密】AIAgent因果推理模块的7个隐藏设计陷阱:92%的团队在第3层就埋下不可逆逻辑漏洞

第一章:因果推理模块在AIAgent架构中的核心定位与演进脉络 2026奇点智能技术大会(https://ml-summit.org) 在传统AI代理(AIAgent)架构中,决策逻辑长期依赖统计相关性建模,导致行为可解释性弱、反事实推断缺失及环境扰…...

多模态幻觉识别与抑制全链路指南,覆盖数据注入、推理约束、后验校验三大关键阶段

第一章:多模态大模型幻觉问题研究 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型在融合文本、图像、音频与视频等异构信息时,其推理路径高度依赖跨模态对齐机制与联合表征空间的稳定性。当模态间语义映射存在偏差、训练数据分布不均衡或指…...

Switch大气层系统终极指南:从零开始安装到完整自定义的完整教程

Switch大气层系统终极指南:从零开始安装到完整自定义的完整教程 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Switch焕发新生,享受官方系统无法提供的强…...

s2-pro部署实践:多版本s2-pro共存方案(v1.0/v1.2)与路由灰度发布

s2-pro部署实践:多版本s2-pro共存方案(v1.0/v1.2)与路由灰度发布 1. 项目背景与需求 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,在文本转语音领域展现出强大的能力。随着项目迭代,团队同时维护v1.0稳定版和…...