32行点阵led滚动错位

2019-12-12 18:25发布

弄了个led点阵屏驱动程序, 16行滚动的时候没事, 大于16行, 比如显示24点的或32点的时候滚动较快的时候上16行(r1, r2)和下16行(r3, r4)会错一位, 静止不滚或者滚动较慢时, 则看起来不会错位是正常的.

错位如下(显示的是24点字)
2016-06-02_165845.png (41.89 KB, 下载次数: 0) 下载附件 2016-6-2 17:19 上传

速度控制
每次 row == 0 的时候为一个循环, N个循环offset + 1 来移动一列, 通过N的大小来控制速度,  扫屏是1ms一次.

求解. 谢谢.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
liwey
1楼-- · 2019-12-12 22:09
有人解惑下吗?
qq854149876
2楼-- · 2019-12-13 03:23
感觉这种思路不好,用这种方法去控制速度、花样之类的会有短板。例如换种单片机,或者单片机频率变了,速度就变了之类的。

搞个双缓存,缓存大小和屏一样,先控制好刷屏(将缓存数据往屏上刷),保证稳定不闪。
例如用定时器控制DMA往595发数据并切换行扫,这样刷屏就稳定了。然后各种花样的实现就是对内存操作,双缓冲的目的就是为了解决复杂花样计算耗时用的,花样计算完了就切换发送的缓冲区。这样就不会出现你这种错位的现象了,而且速度是好控制的。

如果点阵行数太多,需要分区扫(一次点亮多行,需要硬件支持),建议不超过8扫。
liwey
3楼-- · 2019-12-13 08:57
qq854149876 发表于 2016-6-3 10:03
感觉这种思路不好,用这种方法去控制速度、花样之类的会有短板。例如换种单片机,或者单片机频率变了,速度 ...

这个不需要什么花样的, 就是滚动而已. 另外速度也不会变啊, 因为这个是定时扫描的, 都是一次1ms, 一个循环就是16ms. 单片机用的是 gd32, 跑的108M, 速度是足够的.

另外我这个就是开辟的缓冲区, 直接缓冲区上数据往上刷的.  如果是静态/滚动慢点的话, 屏显示是稳定的. 我测试过刷一次屏好像用时是0.05ms不到吧. 应该不是刷屏速度的问题.

另外我怎么也理解不了为什么永远是下面16行往前差一位, (无论我先发上面的16行, 还是先发下面的16行数据都不影响结果), 还有为什么滚动慢就没这个问题了?

最后, 非常谢谢你的回答

liwey
4楼-- · 2019-12-13 13:16
 精彩回答 2  元偷偷看……
7802848
5楼-- · 2019-12-13 18:52
工程师太不值钱了 50块
liwey
6楼-- · 2019-12-14 00:44
7802848 发表于 2016-6-7 10:05
工程师太不值钱了 50块

  我已经编辑掉了, 是不是觉得值钱了不少?

一周热门 更多>