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++;
}