lwg998 发表于 2013-4-27 15:00:35

请教显示屏文字移动程序

最近想写个程序让文字左右上下移动起来,并且要不断更新内容,屏本身是支持上下左右移动的,但必须是先写好数据在设置移动参数才可以,但不知道如何边移动边更新内容,功能就好像LED走字屏一样,但现在用的是液晶。搞过的前辈请指点一下!多谢!

myqiang1990 发表于 2013-4-27 15:14:05

在RAM开辟一个显存,移屏的时候就是取不同的显存起始地址,然后读取显存的数据刷屏,比如我的屏幕大小对应的显存大小是20个字节,那么我开辟40个字节,0--19个字节对应第一屏幕,20--39对应第二屏幕,第一屏是我们要显示的数据,一般第二屏幕都是空白数据,滚动的时候是:第一次取0--19字节刷屏,第二次取1--20字节刷屏,第3次取2--21字节刷屏,一次类推。。大概就这样。。。

myqiang1990 发表于 2013-4-27 15:16:41

每次都取20个字节,也就是一屏幕数据来刷。。当取到19--39的时候如果第二屏幕是空白的话,那么屏幕现在应该是什么都不显示的,然后又从新从重复上面的动作,效果你就可以想象得到了。。

lwg998 发表于 2013-4-27 15:41:24

我再理解一下。。。。。。多谢

lcw_swust 发表于 2013-4-27 16:40:14

不需要屏本身的支持,擦掉重画即可

skynet 发表于 2013-4-27 16:54:11

2楼的显存思路真好
就是对小RAM的MCU比较寒

lwg998 发表于 2013-4-27 17:44:06

to myqiang1990   你的这个思路很好,不需要屏的支持就可以达到效果。每次要显示的数据提前放到缓存里面,缓存里面的数据都写完了就在写一次缓存对吧。这个屏的分辨率是128*64的,要显示的字符可能是8*16 16*16这样的,我想利用屏本身的数据移位功能来实现有没有更好的办法呢?不知这样可否?把需要显示的数据依次排列到一个数组里面,然后把整个需要显示的位置0-63都满数据,然后设置屏移动一行这样0就跑到了63的后面,对这一行写数据,然后在移动一行再写入一行依次类推。。。。。。不知道这样是否可行?在实验中好像移位功能一旦开启就一直会自动移位下去。

maxims 发表于 2013-4-27 18:30:21

关注一下{:3_49:}

lwg998 发表于 2013-4-27 21:06:06

本帖最后由 lwg998 于 2013-4-27 21:14 编辑

to myqiang1990那个缓存定义成何种类型比较好,你那个思路是按一个字节来做到移位的吗?换成16*16 就是一次移动一个汉字?16--->16??能否做到1位1位的移动呢?有些不解了
搞晕了,

mcu_lover 发表于 2013-4-27 21:09:49

7楼思路是对的。尤其适合不需要缓存的场合。

lwg998 发表于 2013-4-27 21:25:19

本帖最后由 lwg998 于 2013-4-27 21:35 编辑

仔细想了一下现在的显示模式,是用PAGE模式,也就是PAGE0对应0-7 PAGE1对应8-16,纵向地址在PAGE范围内是自动累加的,而水平方向是靠地址累加0-15实现的,这样一来循环写入一个字节(0XFF)实际上是PAGE0--->水平0-15,也就是说写入的是8行16列,半个黑块。如果按照之前向上移动一行再写一行数据就是错误的,会覆盖没有溢出的数据,所以这种情况下最少要一次移动8行才可以,也就是一次移动一个PAGE如果这样字可能不会太平滑的移动。如果按一次滚动一行这种模式似乎不太合适,如果可以做到一次写一行,再滚动,在写入,这样可能会平滑许多。至此PAGE模式应该适合水平方向的滚动,不适合纵向的滚动。

zhaotyue 发表于 2013-4-28 08:17:16

我的一下项目就是这样的 ,左循环显示报警信息!

xlwq 发表于 2013-4-28 09:33:01

之前我在做万年历时,把要显示的内容全部放入24C64里面,然后通过判断要显示的内容,计算对应的地址,读取数据缓存在显示,滚屏显示用的是不断刷新要显示的内容,数据地址不断后移。

lwg998 发表于 2013-4-28 09:45:52

本帖最后由 lwg998 于 2013-4-28 09:47 编辑

最简单的滚动效果硬件上最好实现,就是多一个数据寄存器,不断的写这个寄存器就可以了,移动是硬件完成的。但这种情况一般的屏都不会有。一般的屏都是多少点对应多少GRAM,现在这个屏的取模方式决定了无法做到写一行移动一行,只能想别的招了。
页: [1]
查看完整版本: 请教显示屏文字移动程序