1. 前言
这是使用一个使用国产VFD屏制作的桌面RGB时钟摆件,主控采用STC8H+PT6315驱动IC进行的简单实现。
本工程涉及到元器件均可以网购买到。
亚克力图纸两套在工程文件有,复刻的话可以导出DXF文件。
硬件开源地址: VFD-RGB桌面时钟-ZYC - 嘉立创EDA开源硬件平台
软件开源地址:GitHub - ccy-studio/CCY-VFD-ZYC: 国产VFD,STC8时钟主控
2. 硬件设计
本工程文件由立创专业版打开,提供两套不同的版本设计均在工程里直接打开就可以看的到。
- 版本1.0: 无RGB设计,MT3608驱动方案,单片机采用QFN封装的STC8H1K08_36I(个人认为这个封装超级好焊), Falsh用的满满的一行代码都写不进去,9级优化完全榨干。
- 版本1.1:RGB设计,SGM6601YTN5G/TR方案,单片机采用TSSOP20封装的STC8H1K17_36I。
事实证明-30V和-35V亮度没啥区别,这个屏就这样了。但是-28V的亮度就我不能接受,看你们选择。
注意MT3608我超过28V到30V使用了24小时不间断7天没什么问题,哈哈,各位看你的选择吧。毕竟VFD的功耗基本在灯丝上。
板载支持的外设:
- RX8025T高精度实时时钟
- WS2812B(1515封装)的两颗RGB
- 三个用户按键
2.1 使用介绍(重要)
2.1.1 如何切换显示年月日/时分秒?
按下K1按键切换
2.1.2 如何设置时间?
- 设置年月日的方法,按下K1切换到年月日的显示,接下来长按M按钮持续至少2秒松开。K1和K2则是增加或减少,M则是切换设置项。当设置完成再次长按M按键至少两秒即可保存并退出。
- 设置时分秒的方法,按下K1切换到时分秒的显示,接下来长按M按钮持续至少2秒松开。K1和K2则是增加或减少,M则是切换设置项。当设置完成再次长按M按键至少两秒即可保存并退出。
2.1.3 如何调整VFD的亮度?
按K2按钮调整
2.1.4 如何开启/关闭 ACG动画
按M按钮开启或者关闭
2.1.5 如何关闭/开启RGB或更改特效
长按K2按钮关闭RGB并且同时更改RGB的特效,在下次打开RGB的时候生效。开启RGB也是长按K2。
3. 代码
项目支持Keil5 与 Vscode的EIED插件。
作者我不习惯用Keil写代码,所以我是使用Vscode写代码然后使用Keil的编译。电脑环境Macos+Win虚拟机
3.1. 源码大概逻辑
三个用户按键由定时器1以固定1ms的频率进行扫描,支持检测按下,松开与长按的逻辑。 当检测到任何一个按键的事件触发了将使用Flag标记位进行标记,不在中断函数中执行耗时的操作。
设置定时器0作为系统的滴答定时器设置不可屏蔽的自动重装载模式,1毫秒一次中断对uint32_t的变量加1一次,主函数中不使用软件延时函数进行延时,我们将使用值值的比较法进行延时这样大大增加效率。
主函数中,将会对每个按钮的flag进行判断检测是否触发按键的事件然后执行对应的耗时逻辑。
当然对VFD的刷新、8025T时间的读取,ACG动画、RGB特效刷新、时间的保存、屏幕保护程序。这些都在主函数中进行值值的比较法进行判断是否到了该执行的时刻。
这里我封装好的超级简单的API,如果您想实现自己的功能,那么可以直接调用gui.h的方法。
3.2. (HTML)字库生成工具
这里作者我使用原生HTML写了一个字库生成工具(JS用到了cdn在线库需要电脑联网才可以正常加载),在使用的时候只需打开这个后缀.html文件(注意如果打开乱码,请在UTF-8的编码下打开),您只需在浏览器内用鼠标点点得出你想要的图案,最后点击生成即可直接生成可直接配置在代码的字库uint32_t的值。
在字库获取的时候利用到ASCII的编码和数组的下标进行map转换,特殊不连续的符号就直接用给定下标返回了。
这里因为VFD屏有两种米字屏所以我写了两套字库数组,说实话写代码的时候就想骂人这vfd位的设计真是反人类。
3.3. STC烧录设置(重要)
- STC8H1K08无RGB版本的时钟频率选择22.1184Mhz
- STC8H1K17 RGB版本时钟频率选择24Mhz
3.4 代码仓库
Github:GitHub - ccy-studio/CCY-VFD-ZYC: 国产VFD,STC8时钟主控
- RGB版本的请选择分支: release-1.1
- 无RGB的版本请选择分支: release-1.0
3.5 项目结构
4.图片欣赏
![]() | ![]() |