弄了个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一次.
求解. 谢谢.
搞个双缓存,缓存大小和屏一样,先控制好刷屏(将缓存数据往屏上刷),保证稳定不闪。
例如用定时器控制DMA往595发数据并切换行扫,这样刷屏就稳定了。然后各种花样的实现就是对内存操作,双缓冲的目的就是为了解决复杂花样计算耗时用的,花样计算完了就切换发送的缓冲区。这样就不会出现你这种错位的现象了,而且速度是好控制的。
如果点阵行数太多,需要分区扫(一次点亮多行,需要硬件支持),建议不超过8扫。
这个不需要什么花样的, 就是滚动而已. 另外速度也不会变啊, 因为这个是定时扫描的, 都是一次1ms, 一个循环就是16ms. 单片机用的是 gd32, 跑的108M, 速度是足够的.
另外我这个就是开辟的缓冲区, 直接缓冲区上数据往上刷的. 如果是静态/滚动慢点的话, 屏显示是稳定的. 我测试过刷一次屏好像用时是0.05ms不到吧. 应该不是刷屏速度的问题.
另外我怎么也理解不了为什么永远是下面16行往前差一位, (无论我先发上面的16行, 还是先发下面的16行数据都不影响结果), 还有为什么滚动慢就没这个问题了?
最后, 非常谢谢你的回答
我已经编辑掉了, 是不是觉得值钱了不少?
一周热门 更多>