迅维网

查看: 12829|回复: 5
打印 上一主题 下一主题

旋转LED显示原理介绍

[复制链接]
跳转到指定楼层
1#
发表于 2013-8-28 08:39:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 广东惠州 来自 广东惠州

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
如何让一列灯旋转起来感觉像稳定的字显示在空中呢?首先我们来分析下人的眼睛,其实人的眼睛非常好骗的,只要让电机扫描的快一点就行了,实际上肉眼在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供电问题是比较麻烦的,这里我采用了无线供电方式,经过实践论证,功率很有限,需要改进的地方还很多,电路原理是把直流转成交流,然后经过初级线圈 ,最后次级线圈感应得电,经过整流滤波后给旋转部分供电,直流转交流部分电路是一个自激震荡电路。动手能力强的朋友经过改造电机电刷方法实现,如果有条件制作的欢迎用此种方式。

推荐
发表于 2013-8-29 00:43:35 | 只看该作者 来自: 辽宁大连 来自 辽宁大连
讲的挺详细,学到了。

回复 支持 1 反对 0

使用道具 举报

2#
发表于 2013-8-28 22:53:21 | 只看该作者 来自: 广东中山 来自 广东中山
以前做过一个,用了10颗LED,不断扫描,不过后来发现投影式更好玩啊!

回复 支持 反对

使用道具 举报

4#
发表于 2013-9-13 09:33:29 | 只看该作者 来自: 河南洛阳 来自 河南洛阳
讲的挺详细,顶起来.

回复 支持 反对

使用道具 举报

5#
发表于 2014-11-14 14:22:35 | 只看该作者 来自: 安徽合肥 来自 安徽合肥
这个能做LED跑字屏吗

回复 支持 反对

使用道具 举报

6#
发表于 2015-10-26 22:53:42 | 只看该作者 来自: 上海 来自 上海
你好,看了你的分析,想问问楼主:1)多个LED线阵列在一起可以显示文字、图像吗,请您解释一下原理(类似于您对单列LED显示文字的分析);(2)涉及到多色像素高的图片怎样实现;(3)视频信息能通过LED阵列实现吗。期待您的回复

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复