迅维网

标题: 旋转LED显示原理介绍 [打印本页]

作者: 慧龙业余电脑    时间: 2013-8-28 08:39
标题: 旋转LED显示原理介绍
如何让一列灯旋转起来感觉像稳定的字显示在空中呢?首先我们来分析下人的眼睛,其实人的眼睛非常好骗的,只要让电机扫描的快一点就行了,实际上肉眼在24帧/秒以上就不会看到闪烁的,所以要保证电机的速度能在一秒转24圈以上,这样的话人眼就觉得旋转的字很稳定很清晰的显示在空中了。
旋转LED旋转起来是一个圆,那么就需要有一个传感器来判断起点位置,有人用霍尔传感器,有人用红外对管,笔者觉得用红外对管来的便宜些,而且实现起来也容易。这个起点检测非常重要,单片机就是根据这个起点来判断是否要开始显示 数据的。如果起点检测不到 单片机就不开始显示。
如何让一列灯不断的送数据实现一个文字的显示呢?这个我们就要了解文字取模的原理了,这里以PC2002字幕软件为例,取一个16*16的中文字,见字幕选项设置:

从第一列开始向下
每取8个点作为一个字
节,如果最后不足8个
点就补满8位。
   取模顺序是从低到
高,即第一个点作为最
低位。如*-------取
为00000001
   取模后如下表:
0xFF,0x7F,0xFF,0xBF,0x3F,0xC8,0xBF,0xFB,0xBF,0xFB,0xBF,0xEB,0x80,0x9B,0xB7,0xFB,0xB7,0xEB,0xB7,0x9B,0xB7,0xFB,0x37,0xF8,0xF7,0xEF,0xF7,0x1F,0xFF,0xFF,0xFF,0xFF,/*"点",0*/

现在我们知道16*16取模是一列一列取的了,一列有2个字节,一共16列,所以一个16*16的汉字就有32个字节,需要占用单片机的Code空间 32个字节。然后再结合硬件来分析,如下图:


一列灯16个 刚好对应16*16一个汉字的一列:2个字节,所以把取模到的数据依次送到P2口 和P4 P5口,这里硬件中P4 P5组成一个字节,所以显示程序如下:
for(i=0;i<16;i++) //送16列   显示 这里只显示一个字。
            {                    
              P2=zimo[i*2]; //送数据低位显示
                                 P4=(zimo[i*2+1]);//送数据高位显示        这里用了单片机P4 和P5口 是LQFP48脚才有的IO口  
                                 P5=(zimo[i*2+1])>>4;//这里行和列 都是IO口独立驱动的LED
                DelayUs(200);        //延时让LED亮起来 每列延时的时间
                                 P2=0XFF;
                                 P4=P5=0XFF;
               
            }
在什么时候送显示呢?单片机IO一判断到 红外接收管接收到起点信号,就开始显示,显示完16列后等待下一次的起点信号。这样只要电机的速度够快就会稳定的把字显示字空中了。平面的文字显示同理。
如何让一组文字不断的移动?这就需要一个字幕计数器,旋转LED每旋转一圈,这个字幕计数器就加一,指向下一列,这样不断的刷新,感觉文字就在移动了,程序如下:
j就是字幕计数器,每转一圈j就会加1;
if(KEY==0) //红外接收管 判断起始位
        {
            j++;            
if(j>672) //根据显示的字数定义改数值672/16=42个字 显示完42个字后 重新开始
            {
                j=0 ;
            }            
for(i=j;i<128+j;i++) //每转一圈  前进一列  这里定义一圈中同时显示128/16=8个字,
            {                                                                                                                                          P2=zimo[i*2]; //送数据低位显示
                                P4=(zimo[i*2+1]);//送数据高位显示        这里用了单片机P4 和P5口 是LQFP48脚才有的  
                                P5=(zimo[i*2+1])>>4;//这里行和列 都是IO口独立驱动的LED
                DelayUs(200);        //延时让LED亮起来 每列延时的时间
                                P2=0XFF;
                                P4=P5=0XFF;
               
            }
最后一点是供电的问题,旋转LED供电问题是比较麻烦的,这里我采用了无线供电方式,经过实践论证,功率很有限,需要改进的地方还很多,电路原理是把直流转成交流,然后经过初级线圈 ,最后次级线圈感应得电,经过整流滤波后给旋转部分供电,直流转交流部分电路是一个自激震荡电路。动手能力强的朋友经过改造电机电刷方法实现,如果有条件制作的欢迎用此种方式。

作者: cyi8    时间: 2013-8-28 22:53
以前做过一个,用了10颗LED,不断扫描,不过后来发现投影式更好玩啊!
作者: tsong    时间: 2013-8-29 00:43
讲的挺详细,学到了。
作者: Wxgshou    时间: 2013-9-13 09:33
讲的挺详细,顶起来.
作者: 123迅维网    时间: 2014-11-14 14:22
这个能做LED跑字屏吗
作者: jieyuan2002    时间: 2015-10-26 22:53
你好,看了你的分析,想问问楼主:1)多个LED线阵列在一起可以显示文字、图像吗,请您解释一下原理(类似于您对单列LED显示文字的分析);(2)涉及到多色像素高的图片怎样实现;(3)视频信息能通过LED阵列实现吗。期待您的回复




欢迎光临 迅维网 (https://www.chinafix.com/) Powered by Discuz! X3.4