迷你时钟
前言
对于大多数大学生和初学开发者来说,单片机的学习是晦涩难懂的,但是运用制作项目的方式来学习,就会显得更加趣味易学。现基于CH32V003并以项目流程制作方式讲解如何制作一个迷你的多功能时钟。
一、项目介绍
-
设计初衷
时间的流易和不可逆性是一个古今中外一再提到的内容,中国古代的计时仪器有太阳钟和机械钟两类。太阳钟是以太阳的投影和方位来计时,分别以土圭、圭表、日晷为代表。由于地球轨道偏心率以及地球倾角的影响,真太阳时和平太阳时是不一致的,机械钟应运而生,代表有水钟、香篆钟、太阳仪。
电子爱好者喜欢DIY各种创意时钟,主要有辉光管时钟、点阵屏时钟、液晶屏时钟这几种形态,基本功能包括计时、闹钟,还有些可以通过网络自动校时,天气预报等。
我们这次准备设计一个超迷你的时钟,在一个0.56英寸的数码管的基础上实现基本计时、闹钟功能,整体硬件成本控制在5元以内。
时钟项目很适合嵌入式初学者的第一个综合作品,综合运用了数码管驱动显示技术,RTC时钟模块的I2C驱动,蜂鸣器的PWM驱动,按键的长短按处理,定时器的多任务时序控制。
-
演示视频
CH32V003迷你时钟
项目全部源文件开源在Gitee
https://gitee.com/haohaodada-official/mini_clock
二、功能设计
-
功能需求
计时功能:能显示年、月、日、时、分、秒。
闹钟功能:设定好几点几分后,到了设定时间会播放闹铃。
供电要求:内置锂电池,可独立工作3天以上,也可以通过USB线外接供电和充电。
成本要求:BOM价格控制在5元以内。
尺寸要求:长宽和0.56英寸的数码管基本相同,厚度在满足锂电池容量要求下。
-
功能分析
我们选用的数码管只有4位,要显示这么多内容,就需要轮流来显示,我们定义第一页显示年,效果如下图所示:
第二页显示月和日,效果如下图所示:
第三页显示时和分,同时用冒号每隔1秒闪烁来表示秒,效果如下图所示:
现在我们可以让数码管轮流显示上述几个页面,就可以实现计时功能。
接下来,我们要能校准时间,需要通过按键来实现,这里我们用一个按键来实现,通过按键的短按和长按来实现。
我们定义短按来修改具体的数值大小,每短按一次,数值加1,超过范围后,返回到最小值。比如设置小时,超过23后要回到0开始,设置分钟,超过59后要回到0开始,其它类似处理。
我们定义长按来切换不同的页面,同时也是一个确认操作。另外我们还有一个闹钟功能,闹钟也需要设置,闹钟只是设置小时和分,设置的界面和小时分钟界面一样,这样容易让用户不容易察觉,所以我们可以在切换到闹钟界面时,用蜂鸣器发出声音来提示下,表示设置闹钟成功。
当每天时间到了设定的闹钟时间时,蜂鸣器发出闹铃声,我们可以通过短按按键来关闭闹铃。
电源部分需要增加锂电池电源管理来解决,同时要考虑整个系统的功耗。
三、硬件设计
-
电源管理模块
这里选用TP4056作为锂电池充放电管理芯片,该芯片支持单节锂离子电池恒流/恒压线性充电,充电电流可以设置,最大支持1000mA,带有电池温度监测,欠压锁定,自动再充电和两个状态引脚以显示充电和充电终止功能。
这里,我们把TEMP引脚接地,不使用温度监测功能。我们把R13电阻设置为1.2K,这样就设置充电电流大小为1000mA,内部计算公式如下:
设置红色LED为充电状态指示灯,蓝色LED为充满状态指示灯,分别连接到CHRG和STDBY引脚,充电状态表如下图所示:
整个系统,在锂电池供电时,系统电压就是锂电池的电压(3~4.2V),在USB插入充电时,系统电压稳定在4.2V。
- 单片机最小系统
CH32V003系统工作电压范围为2.7~5.5V,通过数据手册可以看到CH32V003复位引脚有别于常见的单片机,需要外接上拉电阻,芯片已经内置上拉电阻,我们只需要外接一个0.1uF电容到地就可以,这里我们也不需要按键来复位。
所以CH32V003只需要给VSS和VDD引脚供电就可以工作了,当然为了方便程序下载调试,我们还需要引出SWIO口,芯片内核自带一个串行单线调试的接口,SWIO 引脚(Single Wire Input Output)。系统上电或复位后默认调试接口引脚功能开启。SWIO口也可以通过程序配置设置通用IO口。