
还是用上一次的STM8S001J3和OLED屏, 为了做更准确的时钟,增加DS3231模块。 参考: DS3231功能十分强大,是高精度I2C实时时钟芯片(RTC),具有集成的温补晶振(TCXO)和晶体,误差可做到一年小于一分钟。 包含电池输入端,断开主电源时仍可保持精确的计时。 芯片内保存秒、分、时、星期、日期、月和年信息。少于31天的月份,将自动调整月末的日期,包括闰年的修正。时钟的工作格式可以是24小时或带/AM/PM指示的12小时格式。 可设置2个定时/日期闹钟,鉴于MCU容量有限,没设置闹钟功能。 芯片内还内置温度传感器。 ![]() MCU引脚功能分配: Pin1:向上按键 Pin2:GND Pin4:VCC Pin5:I2C_SDA Pin6:I2C_CLK Pin7:设置按键 Pin8:向上按键 和 SWIM(编程口) 操作: 1、长按设置按键可以进入和退出设置 2、进入设置后,当前设置位会闪动 3、从世纪开始设置也就是设置为20xx或19xx,然后年、月、日、时、分、秒 4、向上向下键可以调整数值,具有循环设置功能,也就是按向上到了最大值跳回最小值,按向下到了最小值跳回最大值。 5、退出设置后,更新星期和农历。 0 K. ^8 Z# Y5 e为了功能和显示效果,程序内置多种字体,固定数据占用了大量空间,对于8K的小单片机来说,非常吃紧。 为了减少占用空间, 1、大幅优化字体, 如:16*32数字字体,把数字两侧用来间隔0x00值删除,显示时直接跳空显示,把字体往下挪一行,字体变成14*24,大小不变,但占用空间大大减少。0 t! ~0 f# m4 L8 q0 j 最后,字体+农历基础数据共减少了300多字节,最后不足3KBytes。 2、使用上2545889167大侠的硬件I2C驱动代码 ![]() 但最后还是没有加入12小时与24小时切换功能。 没带蜂鸣器,也没加入闹钟功能。如用STM8S103芯片,可以把部分数据放入EEPROM中,可以节约近1K空间,再优化程序可以考虑加入此功能。 还是那块面包板,那个OLED屏,那个单片机,换了按键板 ![]() 还加了DS3231模块,模块带EEPROM。我没把字体和数据加入,有兴趣的可以加入,或开发一个小小的电子时钟。 ![]() ![]() 上源码 ![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
刚好我也有这个时钟模块,谢谢分享 |