标题: stc8h1k08单片机,ws2812b和0.96oled做的时钟有问 [打印本页]

作者: csllf2008    时间: 2025-3-7 14:30
标题: stc8h1k08单片机,ws2812b和0.96oled做的时钟有问
用单片机做了个时钟,OLED显示时间日期,周边一圈60个ws2812b灯珠同步显示时分秒正常,但是想让屏幕显示时间,ws2812显示流水灯就出问题了,我目前用的定时器定时一秒读取时间显示,但是这样的话流水灯就被打断了,不用定时器的话流水灯显示的时候时钟不能走秒,想问下有没有更好的解决办法

IMG_20250306_225850.jpg (513.16 KB, 下载次数: 0)

IMG_20250306_225850.jpg

作者: 人工置顶员    时间: 2025-3-9 13:49
顶一下
作者: Xiao4    时间: 2025-3-9 21:02
用FreeRTOS吧,多线程跑这两个任务
作者: zxcscm    时间: 2025-3-9 22:25
你的程序里读取时间并在OLED上显示和ws2812显示流水灯时肯定使用了大量的延时,这些延时是打断其他程序的根本原因。要想实现不同功能的流畅切换,要更换程序框架。比如使用状态机的机理,将各个功能进行时间切片,不用死等的延时,这样才可以。
作者: zhuls    时间: 2025-3-9 23:05
流程问题。
2812在写入数据不容打断!
你的2812也是显示时钟的吗?
那你可以定时读RTC,对比秒数据,秒不同才更新2812和OLED,
更新2812时,把所有中断关闭就可以了。
2812和OLED都有锁存的,没必要时时更新数据,只有在需要时再更新。
如果你的2812不是显示秒,而是不停在在转,理论上可能要开硬件驱动,比如SPI+DMA,
这样你2812发送数据交给DMA去处理,MCU只要给DMA喂新数据就可以了。
===以上仅供参考,没有相关的实验支持===
作者: qinlu123    时间: 2025-3-10 10:08
zxcscm 发表于 2025-3-9 22:25
你的程序里读取时间并在OLED上显示和ws2812显示流水灯时肯定使用了大量的延时,这些延时是打断其他程序的根 ...

给你点赞,借楼给楼主说一声如果有兴趣的话可以看看我发的帖子,试试我的方案




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1