单片机论坛

 找回密码
 立即注册
QQ登录 只需一步,快速开始
搜索
查看: 50306|回复: 202
收起左侧

创意pov镜面旋转LED屏(含C源码、原理图)

  [复制链接]
laowen 发表于 2013-6-26 16:16 | 显示全部楼层 |阅读模式
在51hei黑论坛也逛了蛮久了,一直在看别人的作品,今天我也贡献一点内容,大家多多指教啊.
POV,英文Persistance Of Vision的缩写,即视觉暂留的意思。
用POV的原理来做显示屏,优势主要表现在:能以少量LED实现传统方式下海量LED才能实现的显示屏。例如POV的16个LED可以轻松地同时显示16个汉字,而传统LED屏需要4096个LED。 随之而来的是,体积小巧便于安装在适当的场合。字样或图案的显示效果,如漂浮在半空中。

网上有老外做的LED旋转显示屏,在技术上软硬件都不难,只需要花些时间慢慢调就能出来。关键是,给旋转的LED供电,对电子爱好者来说,是个麻烦事。这里,给出一个不需要给LED电路供电的方法。即让LED和单片机电路固定不动,而是旋转一面镜子。原理1.用一个小直流电机将一块镜子旋转起来(镜子背面贴一个小磁铁片);2.在镜子旋转的支架上,固定一个干黄管或霍尔芯片(检测是否有磁铁靠近),霍尔芯片的输出脚连到单片机上,这样单片机就知道电机的旋转速度。3.根据人眼的视觉滞留(大概是0.1~0.2秒),和上述测到的实时的电机旋转速度,在不同的瞬间,点亮LED,最终就形成LED显示的一个屏幕。(小时候的晚上,拿着蚊香在空中划过,就变成了一条红线,同理,一条LED线划过,会变成一个面。)单片机电路 实物
050203wk0ee4exrkmr0572.jpg

050203b010a1qv0ypif0ob.bmp

放置单片机电路:
050203i42jmmararrmpr77.bmp
旋转后 显示效果:
050204aoahoopr6c4qhaxg.bmp
由于此旋转结构是木头铁皮做的支架,精度较低,所以显示效果还可以再提高很多,这里只是抛砖引玉。


介绍

下面实物图中有两部分组成,一是旋转LED屏Demo板,二是风扇电机。Demo板固定在旋转轴上,电机转动后,Demo板上的16 个LED灯的旋转轨迹是个圆柱面。运行后,显示文字或图形,效果图如下图的"奥运加油"字样。
    050205ty144212q4y74713.bmp
  实物图        
050205c1auuzcaa6rcy7di.bmp
   050206jfa0987r9v387q7v.bmp
效果图
本设计另一个特点:以10个IO控制点亮16个LED灯(甚至可以做到32个LED),这样使得2051这样小单片机也能实现。
将Demo板绑在自行车的钢丝上(PCB上有6个定位钻孔,很方便),如下图。同时绑上3电池。在下图“小磁铁”处自行车内侧放一个小磁铁,以便Demo板上的霍尔芯片能感应到。车轮旋转起来后,显示的字样如下图右侧。
050206izadd3waog3dogsb.bmp
   
050206ysqotsf66ifw7pz2.bmp



其它效果
050207dsxmccsbtnu9sbrt.jpg


原理图: 原理图.pdf (52.26 KB, 下载次数: 1179)

评分

参与人数 8威望 +9 黑币 +31 收起 理由
彬Lsl + 5 很给力!
SHA手 + 5 很给力!
czy099128 + 5 很给力!
HGH铁柱 + 4 绝世好帖!
半块电路板 + 5 赞一个!
environmentx + 7
高山有崖 + 4
V刹V + 5 回帖助人的奖励!
查看全部评分
回复 使用道具 举报
 楼主| laowen 发表于 2013-6-26 16:16 | 显示全部楼层
  • ///////////////////////////////////////////////////
  • //
  • //硬件配置: P00~P07=LED1~LED8,
  • //                    P27~P20=LED9~LED16,
  • //          INT0=Hall IC
  • //
  • //                        Crystal: 11.0592M
  • ///////////////////////////////////////////////////
  • #include <reg51.h>
  • #include <string.h>


  • //STC系列特殊寄存器
  • sfr AUXR        =         0x8e ;//bit7~0 : T0x12 T1x12 UART_M0x6 EADCI , ESPI ELVDI - -
  • sfr        P1M0        =        0x91;
  • sfr        P1M1        =        0x92;
  • sfr        P2M0        =        0x95;
  • sfr        P2M1        =        0x96;
  • sfr        P3M0        =        0xb1;
  • sfr        P3M1        =        0xb2;

  • unsigned int Font[3][16]=//赛先生
  • {
  • {0x1010,
  • 0x6110,
  • 0x4120,
  • 0x5541,
  • 0x550F,
  • 0x7F42,
  • 0x5542,
  • 0xD55C,
  • 0x5542,
  • 0x7F42,
  • 0x55F9,
  • 0x5541,
  • 0x4120,
  • 0x5130,
  • 0x6020,
  • 0x0000
  • },
  • {0x0000,0x0A08,0x7210,0x2260,0x2380,0x2200,0xFE00,0x2200,  0x23F0,0x2208,0x2208,0x0208,0x0230,0x0000,0x0000,0x0000},
  • {0x0408,0x1808,0xF108,0x1108,0x1108,0x1108,0xFFF8,0x1108,  0x1108,0x1108,0x1108,0x1008,0x0008,0x0000,0x0000,0x0000}

  • };


  • unsigned char MASK_1BIT_ON[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  • unsigned int ReverseHighByteOrder(unsigned int a)
  • {
  •         unsigned char c,i;
  •         unsigned int b;
  •         b=(a>>8)&0x00ff;//b=调换之前的high字节

  •         c=0;//c=调换之后的字节
  •         for(i=0;i<8;i++)
  •         {
  •                 if(MASK_1BIT_ON[i]&b)
  •                         c=c|MASK_1BIT_ON[7-i];
  •         }


  •         b=c;
  •         b=(b<<8)&0xff00;
  •         b=b+(a&0x00ff);
  •         return b;
  • }
  • unsigned int ReverseLowByteOrder(unsigned int a)
  • {
  •         unsigned char b,c,i;
  •         b=a&0xff;//b=调换之前的低字节

  •         c=0;//c=调换之后的低字节
  •         for(i=0;i<8;i++)
  •         {
  •                 if(MASK_1BIT_ON[i]&b)
  •                         c=c|MASK_1BIT_ON[7-i];
  •         }

  •         a=a&0xff00;
  •         a=a+c;
  •         return a;
  • }
  • void Delay_ms(ms)
  • {
  •         int i,j;
  •         for(i=0;i<ms;i++)
  •         {
  •                 for(j=0;j<10;j++)
  •                 {}
  •         }
  • }

  • char HallIC_Coming;//是否是Hall IC碰到磁场
  • int Timer0_Cnt;//Timer0中断计数
  • ///////////////////////////////////////////////////
  • //
  • //主函数
  • //
  • ///////////////////////////////////////////////////
  • void main()
  • {       
  •         int i;
  •         for(i=0;i<16;i++)
  •         {
  •                 Font[0][i]=        Font[0][i]^0xffff;//反相
  •         //        Font[0][i]=ReverseLowByteOrder(Font[0][i]);//低字节的bit0~7修改为bit7~0
  •                 Font[0][i]=ReverseHighByteOrder(Font[0][i]);//高字节的bit0~7修改为bit7~0
  •         }

  •         //Test
  •         P0=0x00;//全部打开LED
  •         P2=0x00;
  •         Delay_ms(1000);
  •         P2=0xff;

  •            //Timer0的设置
  •         TR0 = 1;                //timer0启动
  •         ET0 = 1;                //timer0中断
  •            TMOD |= 0x01;   //timer0设置为mode1
  •         TH0=TL0=0;

  •         EX0 = 1;       
  •         EA = 1;

  •         //计算电机旋转速度
  • /*        Timer0_Cnt=0;
  •         HallIC_Coming=0;
  •         for(i=0;i<100;i++)
  •         {
  •                 while(HallIC_Coming==0);
  •                 HallIC_Coming=0;
  •         }
  • */        TR0=0;
  •         ET0=0;
  •        
  •        

  •         ////////////////////////////
  •         //正式开始
  •         HallIC_Coming=0;
  •         while(1)
  •         {
  •                
  •                 if(HallIC_Coming)//等待Hall IC触发的中断
  •                 {
  •                         //处理
  •                         for(i=0;i<16;i++)                       
  •                         {
  •                                 P2=Font[0][i]&0xff;
  •                                 P0=(Font[0][i]>>8)&0xff;
  •                                 Delay_ms(5);
  •                         }
  •                         ////////////////////////////
  •                         P0=P2=0xff;
  •                         HallIC_Coming=0;
  •                 }

  •         }

  • }


  • ////////////////////////////////////////////////////////////////////////////////////////
  • //
  • //外部中断0 (INT0,由Hall IC输出脚触发)
  • //
  • ////////////////////////////////////////////////////////////////////////////////////////
  • void ISR_INT0(void) interrupt 0
  • {
  •         HallIC_Coming=1;
  • }

  • //Timer0中断
  • void ISR_Timer0(void) interrupt 1
  • {
  •         Timer0_Cnt++;
  • }
  • 复制代码

    点评

    不错啊,这个牛逼  发表于 2017-10-17 21:43
    回复 使用道具 举报
    左左右右 发表于 2013-7-1 16:52 | 显示全部楼层
    膜拜啊 能做出这么牛的东西来,51hei(51黑)论坛有你更精彩.
    回复 使用道具 举报
    左左右右 发表于 2013-7-1 16:55 | 显示全部楼层
    我也来51hei很久了 咋就很难有进步呢 现在还只能搞流水灯之类的简单东西.
    回复 使用道具 举报
    Binz1960 发表于 2013-7-4 20:26 | 显示全部楼层
    谢谢分享
    回复 使用道具 举报
    匿名  发表于 2013-7-5 05:45
    好东西
    回复 使用道具
    nanguoguangzi 发表于 2013-7-9 05:42 | 显示全部楼层
    支持,好作品
    回复 使用道具 举报
    新手不新 发表于 2013-7-10 16:43 | 显示全部楼层
    不怎么好玩
    回复 使用道具 举报
    630540132 发表于 2013-7-12 14:41 | 显示全部楼层
    太了不起了...什么時候我才可以額這樣子的能力哦...
    回复 使用道具 举报
    匿名  发表于 2013-7-12 20:34
    很有创意啊
    回复 使用道具
    锅锅卟帅 发表于 2013-7-16 10:10 | 显示全部楼层
    厉害啊
    回复 使用道具 举报
    锅锅卟帅 发表于 2013-7-16 10:13 | 显示全部楼层
    厉害啊
    回复 使用道具 举报
    锅锅卟帅 发表于 2013-7-16 10:14 | 显示全部楼层
    有创意!!
    回复 使用道具 举报
    朗朗繁星 发表于 2013-7-16 22:11 | 显示全部楼层
    好哈学习学习
    回复 使用道具 举报
    wuhaisheng258 发表于 2013-7-17 11:25 | 显示全部楼层
    谢谢分享
    回复 使用道具 举报
    匿名  发表于 2013-7-17 20:06
    高手  佩服楼主
    回复 使用道具
    №奔跑№ 发表于 2013-7-18 19:56 | 显示全部楼层
    菜鸟加初学者表示膜拜
    回复 使用道具 举报
    1156615097 发表于 2013-7-23 22:25 | 显示全部楼层
    有套件卖吗?我要
    回复 使用道具 举报
    liaows 发表于 2013-7-24 09:06 | 显示全部楼层
    谢谢分享,试做一下。
    回复 使用道具 举报
    weiyy216 发表于 2013-7-25 16:26 | 显示全部楼层
    请问楼主   显示效果受旋转速度影响吗?如装在自行车轮子上的那种。
    回复 使用道具 举报
    鲜の水晶葡萄 发表于 2013-7-30 22:24 | 显示全部楼层
    不错不错
    回复 使用道具 举报
    fxping163 发表于 2013-8-3 14:09 | 显示全部楼层
    可以,有创意。
    回复 使用道具 举报
    CK、东哥 发表于 2013-8-4 22:13 | 显示全部楼层
    不错,支持下
    回复 使用道具 举报
    啵~~ 发表于 2013-8-5 10:17 | 显示全部楼层
    谢谢楼主啦
    回复 使用道具 举报
    康师傅 发表于 2013-8-7 16:27 | 显示全部楼层
    学习啦!
    回复 使用道具 举报
    pkj 发表于 2013-8-8 16:57 | 显示全部楼层
    真厉害,向你学习
    回复 使用道具 举报
    aimei 发表于 2013-8-9 23:09 | 显示全部楼层
    这个不错,准备做个来玩玩
    回复 使用道具 举报
    f800380564 发表于 2013-8-10 18:50 | 显示全部楼层
    大神  牛逼啊
    回复 使用道具 举报
    SisuoComputer 发表于 2013-8-11 17:26 | 显示全部楼层
    谢谢分享。。。。。。。。。。。
    回复 使用道具 举报
    SisuoComputer 发表于 2013-8-11 17:27 | 显示全部楼层
    厉害。。。。。。。。。。
    回复 使用道具 举报
    陨落的Einstein 发表于 2013-8-17 20:29 | 显示全部楼层
    很有创意!楼主,你确定是这份程序?这程序算不出来转速。你是不是在来回调那个Delay_ms(5);?
    回复 使用道具 举报
    陨落的Einstein 发表于 2013-8-17 20:42 | 显示全部楼层
    顺便问下,楼主有霍尔元件选型网站、资料、手册吗?
    回复 使用道具 举报
    苏樟超 发表于 2013-9-11 14:30 | 显示全部楼层
    原理图器件名称,电阻值标的不是很明确。
    回复 使用道具 举报
    苏樟超 发表于 2013-9-11 14:31 | 显示全部楼层
    3Mhz249是什么?LED限流电阻是51欧姆?
    回复 使用道具 举报
    苏樟超 发表于 2013-9-11 14:31 | 显示全部楼层
    3Mhz249是什么?LED限流电阻是51欧姆?
    回复 使用道具 举报
    爱你一万年 发表于 2013-9-24 19:58 | 显示全部楼层
    学一下
    回复 使用道具 举报
    模拟 发表于 2013-10-1 16:34 | 显示全部楼层
    不错,不错,不错,学习学习
    回复 使用道具 举报
    模拟 发表于 2013-10-1 16:34 | 显示全部楼层
    学习一下
    回复 使用道具 举报
    伤心童话 发表于 2013-10-2 22:09 | 显示全部楼层
    不错啊!刚接触。多多交流。
    回复 使用道具 举报
    jinchouxing 发表于 2013-10-3 21:29 | 显示全部楼层
    努力学习中
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 立即注册
    本版积分规则
    QQ|手机版|小黑屋|单片机论坛
    Powered by 单片机教程网
    快速回复 返回顶部 返回列表