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


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线划过,会变成一个面。)


单片机电路 实物



 



 


放置单片机电路:



 

旋转后 显示效果: 


 

由于此旋转结构是木头铁皮做的支架,精度较低,所以显示效果还可以再提高很多,这里只是抛砖引玉。

介绍

下面实物图中有两部分组成,一是旋转LED屏Demo板,二是风扇电机。Demo板固定在旋转轴上,电机转动后,Demo板上的16 个LED灯的旋转轨迹是个圆柱面。运行后,显示文字或图形,效果图如下图的"奥运加油"字样。
    



 

  实物图        



 

   


 

效果图 
本设计另一个特点:以10个IO控制点亮16个LED灯(甚至可以做到32个LED),这样使得2051这样小单片机也能实现。


将Demo板绑在自行车的钢丝上(PCB上有6个定位钻孔,很方便),如下图。同时绑上3电池。在下图“小磁铁”处自行车内侧放一个小磁铁,以便Demo板上的霍尔芯片能感应到。车轮旋转起来后,显示的字样如下图右侧。




 

    



 




其它效果



 

源码及原理图请点击“阅读原文”在原文中获取

来源:http://www.51hei.com/bbs/dpj-19370-1.html

///////////////////////////////////////////////////

//

//硬件配置: 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++;

}

单片机

每天更新
单片机
各种知识,电子制作DIY,及
电子行业
最新资讯,关注我们,棒棒哒!

为了能够为人们提供加称量信息,研究人员设计出了一种以单片机基础的多功能地磅,该类别地磅能够同时对10多种商品进行销售单价储存,在称量之后还能够显著产品重量及价格,甚至还能够显著称量时间及温度,顾客查看消费清单加便捷,同时收银员也能够了解购物清单明细。达到改变秤量值的目的

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

51单片机——定时器

为什么使用定时器? 之前我们的led灯每隔1s循环左移点亮的时候,使用的定时方法是在c程序执行若干次空循环,这样会耗费很多cpu资源,因为空轮询。本篇博客将使用51单片机内置的定时器中断