# stm32_clock **Repository Path**: kewens/stm32clock ## Basic Information - **Project Name**: stm32_clock - **Description**: stm32时钟项目开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-03 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32多功能时钟系统 - 使用手册 ## 项目概述 这是一个基于STM32F103微控制器的多功能时钟系统,集成了数字时钟、闹钟、计时器等实用功能。系统采用OLED显示屏显示信息,通过按钮和旋转编码器进行交互,支持蜂鸣器提示音。 ## 硬件配置 - **主控芯片**: STM32F103系列 - **显示屏**: 128x64 OLED显示屏(I2C接口) - **输入设备**: - 3个按钮:MENU、SELECT、BACK - 1个旋转编码器:用于数值调整 - **输出设备**: 蜂鸣器(用于闹钟和提示音) - **供电**: 3.3V直流电源 ## 功能特性 ### 1. 主时钟功能 - 实时显示日期和时间(年-月-日 星期 时:分:秒) - 后台持续计时,不受界面切换影响 - 支持闰年判断和月份天数自动计算 ### 2. 日期时间设置 - 支持年份(2000-2099)、月份、日期、星期设置 - 支持小时、分钟、秒设置 - 设置过程中暂停后台计时,设置完成后恢复 ### 3. 闹钟功能 - **最多支持4个闹钟** - **闹钟显示格式**: "序号+时间+t/f+重复模式" - 示例: "1. 07:30 t 7"(表示第1个闹钟,7:30,启用状态,每天重复) - t: 启用状态(t=启用,f=禁用) - 重复模式: 1=单次,5=工作日,2=周末,7=每天 #### 闹钟设置流程: 1. 从菜单进入闹钟界面查看已有闹钟 2. 按MENU键进入添加闹钟界面 3. 选择闹钟序号(1-4) 4. 设置闹钟时间(小时、分钟) 5. 选择重复模式: - 1: 只响一次 - 5: 周一到周五 - 2: 周六和周日 - 7: 每天 6. 保存后返回闹钟列表 #### 闹钟触发机制: - 在时钟模式下后台自动检查 - 只在整分钟(秒为0)时触发 - 每天自动重置触发状态 - 单次闹钟触发后自动禁用 ### 4. 计时器功能 - **四种工作模式**: 1. 空闲状态:可设置时间或开始正计时 2. 正计时:从0开始向上计时 3. 倒计时:从设定时间开始向下计时 4. 设置状态:设置倒计时时间 - **计时器操作**: - 正计时:按MENU开始,再按MENU停止,按BACK重置 - 倒计时:先设置时间,然后开始倒计时 - 倒计时结束:蜂鸣器提示音 ## 操作指南 ### 按钮功能说明 - **MENU按钮**: - 时钟界面:进入主菜单 - 菜单界面:进入选中功能 - 闹钟界面:进入添加闹钟 - 计时器界面:开始/停止计时 - **SELECT按钮**: - 菜单界面:切换选项 - 设置界面:切换编辑项 - 闹钟界面:切换查看的闹钟 - **BACK按钮**: - 菜单界面:返回时钟界面 - 设置界面:取消设置并返回 - 计时器界面:返回菜单或重置计时器 - **旋转编码器**: - 设置界面:调整数值 - 闹钟界面:切换选项 ### 界面导航流程 #### 主流程: ``` 时钟界面 → 按MENU → 主菜单 → 选择功能 ``` #### 菜单选项: 1. **Date&Time**:设置日期和时间 2. **Alarm**:查看和设置闹钟 3. **Timer**:使用计时器 #### 闹钟设置流程: ``` 主菜单 → Alarm → 查看闹钟列表 → 按MENU → 添加闹钟 添加闹钟 → 选择序号 → 设置时间 → 设置重复模式 → 保存 ``` #### 计时器使用流程: ``` 主菜单 → Timer → 1. 按MENU:开始正计时 2. 按SELECT:设置倒计时时间 3. 按BACK:返回菜单 ``` ## 技术特点 ### 1. 后台计时系统 - 使用`system_datetime`变量持续更新时间 - 10ms定时器中断实现精确计时 - 设置时间时暂停后台计时,保证时间准确性 ### 2. 闹钟管理 - 最多4个闹钟,存储在`alarms`数组中 - 支持四种重复模式 - 自动防止重复触发(每天重置) - 单次闹钟自动禁用机制 ### 3. 用户界面 - 四级菜单结构,逻辑清晰 - 状态提示明确,操作指引详细 - 编辑状态高亮显示(使用[]标记) ### 4. 错误处理 - 日期有效性检查(闰年、月份天数) - 时间范围限制(0-23小时,0-59分钟) - 闹钟序号范围检查 ## 蜂鸣器提示音 - **短提示音**(50ms):操作确认 - **中等提示音**(100ms):功能切换 - **长提示音**(300ms):重要操作 - **闹钟响铃**:3次短促蜂鸣 - **计时器结束**:3次短促蜂鸣 ## 系统初始化 - 出厂时间:2025年12月11日 16:40:00 周四 - 闹钟全部为空,未启用状态 - 计时器初始为0,空闲状态 ## 注意事项 1. 设置时间时系统暂停计时,设置完成后恢复 2. 闹钟只在时钟模式下触发 3. 单次闹钟触发后自动禁用 4. 每天0点自动重置闹钟触发状态 5. 计时器最大支持23:59:59 ## 扩展功能建议 1. 添加闹钟开关功能 2. 支持闹钟自定义铃声 3. 添加秒表功能 4. 支持24小时/12小时制切换 5. 添加温度显示功能 ## 文件结构 ``` main.c # 主程序文件 button_driver.h # 按钮驱动 encoder_driver.h # 编码器驱动 display_driver.h # 显示驱动 buzzer_controller.h # 蜂鸣器控制 OLED.h # OLED显示屏驱动 Delay.h # 延时函数 ``` ## 编译说明 - 开发环境:Keil MDK - 编译器:ARMCC V5.06 - 目标芯片:STM32F103系列 - 需要配置正确的时钟和GPIO初始化 这是一个功能完整、操作简单的多功能时钟系统,适合学习和实际应用。