STM32实现德飞莱LED滚动效果
Posted mygod2093725_wht
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32实现德飞莱LED滚动效果相关的知识,希望对你有一定的参考价值。
显示方式选择:
首先搞清楚,取模的方式有横向取模和纵向取模两种。
一般以C51格式取出来的16x16的汉字,由32个十六进制组成。
每个十六进制,0是白色的像素点,1是黑色的像素点,文字是由黑色的像素点组成。
我们需要指导每个十六进制对应汉字的哪个位置。
横向取模:
/*-- 文字: 口 --*/
/*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,
0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,
其中第一行的前两个十六进制,代表的是最上边的16个像素点。每两个十六进制一组,自上而下表示完所有的像素点。
纵向取模:
/*-- 文字: 口 --*/
/*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,0x00,
0x00,0x00,0xFE,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0x00,0x00,0x00,
其中上边一行的16个十六进制,表示的是汉字的上半部分,第一行的第一个表示纵着的8个像素点,自左向右表示汉字的上半部分,第二行十六进制以同样的方式表示汉字的下半部分。
然后,需要根据LED显示的方式,选择合适的取模方式。(当然,也可以不这么麻烦,无非多试几次)
R1或者G1 的寄存器,是要输入十六进制锁存的。因为一行或一列LED点有16个,所以需要输入两个字节大小的数据。
输入1,转换成连个16进制就是0x00,0x01。观察LED屏,发现亮点在一个角上。
根据上面取模的方式,需要直接把取模得到的16进制直接输入到R1或者G1 的寄存器,所以只能由两种摆放的方式,一个是把亮点放到右上角,对应横向取模,一个是把亮点放到左下角,对应纵向取模。
横向取模,每次把左右相邻的两个十六进制输入到寄存器,自上而下刷新显示。
纵向取模,每次把两行的同一列的两个十六进制输入到寄存器,自左向右刷新显示。
如果,不级联显示,这两种方式都是可以的,单个屏幕的滚动和静止显示都没问题。
但是,当你想要级联的时候,想要做一个较长屏幕的滚动显示,你会发现级联接口正好对应着横向取模的方式。
所以,放弃纵向取模的显示方式,改用横向取模的显示方式。
滚动效果
原理其实很简单,若干个静止的状态连续的有规律地切换,就形成了滚动的效果。
而每次切换改变的仅仅是每块屏的最左边一列和最右边一列。
因此只需要,前一个字节左移n位|后一个字节右移8-n位,
但是,这个寄存器在输入的时候必须把bit流倒着输入,所以就需要倒序取模,前一个字节右移n位|后一个字节左移8-n位。
然后需要保持这个状态静止一段时间才完成一次的移动。保持的方法是每次刷新加一个细小的延时,延后循环n次。
当完成8次移动之后,需要取出一个新的字节。所以需要预先多取出两个字节,移动16次一个循环,循环完成后取出下一个汉字。
以上是关于STM32实现德飞莱LED滚动效果的主要内容,如果未能解决你的问题,请参考以下文章