最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

POV led LED 旋转屏原理

IT圈 admin 41浏览 0评论

2024年9月19日发(作者:守明轩)

如果你在网上用google搜索“POV led”一词,你会找到世界各地的各种

LED 旋转屏的制作介绍。那些摇晃出的空中图案,漂浮在车轮上的动画,以及

形态各异的时钟,一定给你留下深刻印象。看到这些千奇百怪、创意无限的电子

作品,除了羡慕、敬佩、感叹外,你是否想过自己亲自动手也做一个,做一个属

于你自己的LED旋转屏呢?其实,无论你看到的LED旋转屏如何神奇,如何复

杂,其原理都一样,也很简单,说白了就是一个晃动的流水灯。

在51单片机最简系统的其中的一个端口P0接上8个LED,就是一个典型的

流水灯实验电路。由于没有几个元件,说干就干,把所有元件焊在万能板上,不

需花费多长时间,就可完成整个制作。

下面是随便找一个流水灯的C51程序

#include

void main(void)

{

unsigned int i,ch;

ch=0x01;

while(1)

{

for(i=500;i>0;i--);

if(ch==0x00) ch="0x01"; else ch="ch"<<1;

P0=~ch;

}

}

将这程序编译下载到系统的单片机上,待LED灯光开始正常开跑后,我们

拿着它在手上来回晃动,你发现这光已经不是一条竖直线了,它已经变成了一条

条斜线。你可以适当修改程序中的延时,让这一连串的斜线更漂亮些(宽和高基

本一致),怎么样,我们的最简LED旋转屏就这样做成了。

高兴之余,发现这与我们的目标好象还有点遥远,我们并不需要这些斜线,

怎样才能做出网上的那些大虾那样显示的各种各样的文字图案呢?接下来,我们

还得想其它办法,换一下思路,将需要的图案数据一串存在数组中,运行时又将

数据一串串读出来,驱动LED,这样就能看到我们想看到的图案了。

这是用此思路编的流水灯C51程序

#include

code unsigned char led[]={0x01,0x02, 0x04,0x08,0x10,0x20,0x40,0x80};

void main(void)

{

unsigned int i,j;

while(1)

{

for(j=0;j<8;j++){

P0=~led[j];

for(i=3000;i>0;i--);

}

}

}

运行看一下, 结果与我们的第一个程序效果是一样的,但这个程序的优势在

于我们可以按我们的要求,改变数组中的数据来驱动端口上的LED,达到我们

预期的显示效果。这可以说是流水灯的万能程序。这样我们迈出了第一步。

再来看如何产生需要的图案。

现在我们让LED显示数字12为例,我们先作一个表。

0 1 0 0 1 1 1 1 低四位

1 1 0 0 1 0 0 1

0 1 0 0 0 0 0 1

0 1 0 0 0 0 1 0

0 1 0 0 0 1 0 0 高四位

0 1 0 0 1 0 0 0

0 1 0 0 1 0 0 0

1 1 1 0 1 1 1 1

从下到上将每列看成是一个16进制数,我得到8个16进制数

10000010=0x82

11111111=0xff

10000000=0x80

00000000=0x00

11100011=0xe3

10010001=0x91

10001001=0x89

10000111=0x87

这样我们得到了我们想要的一组扫描码

{0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87}

将前一程序的数组数据改成我们得到的扫描码,我们得到新的C51程序

#include

code unsigned char led[]={0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87};

void main(void)

{

unsigned int i,j;

while(1)

{

for(j=0;j<8;j++){

P0=~led[j];

for(i=600;i>0;i--);

}

for(i=8000;i>0;i--);

for(i=8000;i>0;i--);

}

}

编译下载后,将运行进的电路板来回晃晃看……,哈,“12”已隐约出现在眼

前。

哈哈,是不是成功离我们已经不远了。

最后是发挥部分。接着要做的事就是解决如何让这些LED运动,如何检测

运行时的开始和结束,如何给运动着的系统供电,如何控制运动着的系统….等

等。不同的解决方案造就各具特色的LED旋转屏。

用上面的办法对一些简单图案还能行,当遇到LED个数多或图文复杂时,

用这样直接取码的工作量就会很大,这就需要专门软件,根据显示的字符和图案

自动生成扫描码。好在网上有不少这类软件可免费下载,免去了手工取码之苦。

临渊羡鱼,不如退而结网,动手做一个真正属于自己的旋转LED显示并不

难。

2024年9月19日发(作者:守明轩)

如果你在网上用google搜索“POV led”一词,你会找到世界各地的各种

LED 旋转屏的制作介绍。那些摇晃出的空中图案,漂浮在车轮上的动画,以及

形态各异的时钟,一定给你留下深刻印象。看到这些千奇百怪、创意无限的电子

作品,除了羡慕、敬佩、感叹外,你是否想过自己亲自动手也做一个,做一个属

于你自己的LED旋转屏呢?其实,无论你看到的LED旋转屏如何神奇,如何复

杂,其原理都一样,也很简单,说白了就是一个晃动的流水灯。

在51单片机最简系统的其中的一个端口P0接上8个LED,就是一个典型的

流水灯实验电路。由于没有几个元件,说干就干,把所有元件焊在万能板上,不

需花费多长时间,就可完成整个制作。

下面是随便找一个流水灯的C51程序

#include

void main(void)

{

unsigned int i,ch;

ch=0x01;

while(1)

{

for(i=500;i>0;i--);

if(ch==0x00) ch="0x01"; else ch="ch"<<1;

P0=~ch;

}

}

将这程序编译下载到系统的单片机上,待LED灯光开始正常开跑后,我们

拿着它在手上来回晃动,你发现这光已经不是一条竖直线了,它已经变成了一条

条斜线。你可以适当修改程序中的延时,让这一连串的斜线更漂亮些(宽和高基

本一致),怎么样,我们的最简LED旋转屏就这样做成了。

高兴之余,发现这与我们的目标好象还有点遥远,我们并不需要这些斜线,

怎样才能做出网上的那些大虾那样显示的各种各样的文字图案呢?接下来,我们

还得想其它办法,换一下思路,将需要的图案数据一串存在数组中,运行时又将

数据一串串读出来,驱动LED,这样就能看到我们想看到的图案了。

这是用此思路编的流水灯C51程序

#include

code unsigned char led[]={0x01,0x02, 0x04,0x08,0x10,0x20,0x40,0x80};

void main(void)

{

unsigned int i,j;

while(1)

{

for(j=0;j<8;j++){

P0=~led[j];

for(i=3000;i>0;i--);

}

}

}

运行看一下, 结果与我们的第一个程序效果是一样的,但这个程序的优势在

于我们可以按我们的要求,改变数组中的数据来驱动端口上的LED,达到我们

预期的显示效果。这可以说是流水灯的万能程序。这样我们迈出了第一步。

再来看如何产生需要的图案。

现在我们让LED显示数字12为例,我们先作一个表。

0 1 0 0 1 1 1 1 低四位

1 1 0 0 1 0 0 1

0 1 0 0 0 0 0 1

0 1 0 0 0 0 1 0

0 1 0 0 0 1 0 0 高四位

0 1 0 0 1 0 0 0

0 1 0 0 1 0 0 0

1 1 1 0 1 1 1 1

从下到上将每列看成是一个16进制数,我得到8个16进制数

10000010=0x82

11111111=0xff

10000000=0x80

00000000=0x00

11100011=0xe3

10010001=0x91

10001001=0x89

10000111=0x87

这样我们得到了我们想要的一组扫描码

{0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87}

将前一程序的数组数据改成我们得到的扫描码,我们得到新的C51程序

#include

code unsigned char led[]={0x82,0xff,0x80,0x00,0xe3,0x91,0x89,0x87};

void main(void)

{

unsigned int i,j;

while(1)

{

for(j=0;j<8;j++){

P0=~led[j];

for(i=600;i>0;i--);

}

for(i=8000;i>0;i--);

for(i=8000;i>0;i--);

}

}

编译下载后,将运行进的电路板来回晃晃看……,哈,“12”已隐约出现在眼

前。

哈哈,是不是成功离我们已经不远了。

最后是发挥部分。接着要做的事就是解决如何让这些LED运动,如何检测

运行时的开始和结束,如何给运动着的系统供电,如何控制运动着的系统….等

等。不同的解决方案造就各具特色的LED旋转屏。

用上面的办法对一些简单图案还能行,当遇到LED个数多或图文复杂时,

用这样直接取码的工作量就会很大,这就需要专门软件,根据显示的字符和图案

自动生成扫描码。好在网上有不少这类软件可免费下载,免去了手工取码之苦。

临渊羡鱼,不如退而结网,动手做一个真正属于自己的旋转LED显示并不

难。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论