在备战蓝桥杯单片机设计与开发项目时,许多同学在学习完按键、数码管、蜂鸣器、定时器、AT24C02、DS1302等模块后,可能会感到缺乏一个综合项目来进行实际练习。本文想与大家分享我在备战过程中获得的灵感:复刻一款实际手机软件时钟的所有功能。这个项目不仅有效练习了上述模块的灵活运用,还激发了我对单片机学习的兴趣。希望通过这个分享,能够为大家提供一个有趣且实用的练习机会。(末尾附带视频演示)
1 整体功能介绍
本项目实现了时间、日期和星期的动态显示,以及秒表、闹钟设置与开关和计时器功能。左下角配备了一个矩阵键盘,按键排列为从左到右、从下到上,编号为1至16。当数码管全灭时,表示系统处于主菜单状态:
包含七个主要模块:时钟模块、秒表模块、闹钟设置模块、闹钟启用/禁用模块、计时器设置模块、计时显示模块,以及计时器关闭模块。
2 时钟模块
单片机上电后,默认进入时钟模块,显示当前北京时间(时分秒)、日期和星期。按下2键可查看显示时间:
按3键可查看日期(年月日):
按4键可显示星期(其中001表示星期一):
按1键可退出时钟模块,返回主菜单,再次按下1键进入时钟模块。
3 秒表模块
在主菜单下,按下2键进入秒表模块,首次进入时默认显示00-00-00:
按5键启动秒表,再次按5键可停止秒表。按6键将秒表归零,按7键记录当前秒表数值(在秒表运行时,按键7也能记录当前数值)。按键8可显示记录的数值,即使在断电后重新插电,按键8依然能显示断电前的记录(掉电不丢失)。按键2可返回主菜单。
4 闹钟设置模块
在主菜单下,按下3键进入闹钟设置模块。进入该模块时,默认显示上次保存的闹钟数值(该数据掉电不丢失):
按5键可将分钟加1,按6键可将分钟减1;按7键将小时加1,按8键将小时减1。按9键保存当前闹钟数值,按10键读取已保存的闹钟数值。按3键可返回主菜单。
5 闹钟启用/禁用模块
在主菜单下,按下4键进入闹钟启用/禁用模块。数码管显示当前状态:0表示关闭闹钟,1表示开启闹钟:
插电后,默认状态为关闭闹钟。按1键可开启闹钟,再次按1键则关闭闹钟,状态将依次循环(上电后,闹钟默认设置为上次保存的时钟数值)。开启闹钟后,用户一般会返回时钟模块查看时间。当时间到达时,闹钟会持续响铃。此时,用户需返回主菜单,按4键,然后按1键关闭闹钟。再次按4键可返回主菜单。
6 计时器设置模块
在主菜单下,按5键进入计时器设置模块。该模块默认显示上次保存的计时数据(该数据掉电不丢失):
按9键可将小时加1,按10键可将小时减1;按11键可将分钟加1,按12键可将分钟减1;按13键可将秒钟加1,按14键可将秒钟减1。按15键保存当前计时数据,按16键显示保存的数据。按5键可返回主菜单。
7 计时显示模块
在主菜单下,按6键进入计时显示模块,再次按6键可退出该模块并返回主菜单。在该模块中,1键用于启动/暂停计时器,2键为复位按键,3键用于关闭闹铃。数码管默认显示保存的计时数据。
-
按1键启动计时器(在计时器运行期间无法进入计时器设置模块),再次按1键可暂停计时,此时可以进入设置计时器设置模块。如果返回计时显示模块,数码管将显示保存的计时数据。
-
按1键启动定时器,再次按1键停止计时器,按2键可复位定时器(在定时器启动期间且未到0时,按2键将重新开始计时)。此时用户仍可进入计时器设置模块。
-
当计时器为0且闹铃持续响铃时,可以按1键关闭闹铃,此时可以进入设置计时器数值模块,但定时器数值为0,用户需按复位按键以将定时器数值恢复为保存的计时数据。
-
当计时器为0且闹铃持续响铃时,用户也可以按3键关闭闹铃,此时计时器数值将自动恢复为保存的计时数据,用户仍可进入设置计时器数值模块。
在进行上述操作的任何时刻,用户均可返回主菜单并查看除了设置计时器数值模块和启动/关闭闹钟模块以外的其他模块。
8 计时器关闭模块
在主菜单下,按7键可关闭定时器。该键的功能与显示计时模块中的3键相同,旨在为用户在除显示计时模块和启动/关闭闹钟模块之外的其他模块操作时,提供更快捷的定时器闹铃关闭方式。
9 Bug
-
由于时钟芯片未外接备用电源,单片机在掉电后无法维持时间计算。因此,在上电前需在程序中对时钟进行校准。
-
由于上述原因,闹钟只能设置为当天的响铃时间,无法指定在未来某一天的特定时间响铃。
10 补充
-
当定时器和闹钟同时开启时,若两者互不影响,用户可以随时查看当前时间。在任一计时器或闹钟到达设定时间后,用户只需关闭相应的闹铃即可。
-
如果闹钟和定时器同时到达设定时间,闹铃将持续响铃。在这种情况下,用户需要同时关闭闹钟和定时器的闹铃。