旋转LED灯原理和应用

发布者:龙爱泉也最新更新时间:2015-06-26 来源: 51hei关键字:旋转LED灯  51单片机  最简系统 手机看文章 扫描二维码
随时随地手机看文章
如果你在网上用google搜索“POV led”一词(POV即persistancd of vision),会找到世界各地的各种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,这样就能看到我们想看到的图案了。[page]
这是用此思路编的流水灯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显示并不难。
关键字:旋转LED灯  51单片机  最简系统 引用地址:旋转LED灯原理和应用

上一篇:51单片机+lcd12864液晶屏菜单程序
下一篇:怎样让Keil软件同时兼容51单片机和ARM单片机的问题

推荐阅读最新更新时间:2024-03-16 14:05

51单片机入门之六:1602液晶显示
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。 原理图如下: 程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit RS=P3^0; //数据/命令选择端(H/L) sbit EN=P3^2; //使能端 sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平 sbit wela=P3^3;//锁存器位选信号 uchar table1 = Hello,Welcome to my ;//字符表1 uchar tabl
[单片机]
<font color='red'>51单片机</font>入门之六:1602液晶显示
ADC0809与51单片机的连接方式
模数转换器定位为单片机的外部RAM单元,因此与单片机的连接就有很多种。大体上说ADC0809在整个单片机系统中是作为外部RAM的一个单元定位的。具体到某一个连接方式,定位又有区别。adc0809与单片机典型的连接有以下三种: ADC0809与51单片机的第一种连接方式 这是数据线对数据线、地址线对地址线的标准连接方式,如图2.2所示。由于ADC0809片内没有时钟,可利用单片机提供的地址锁存信号ALE经D触发器2分频后获得,ALE引脚的频率是单片机时钟频率的1/6,如果单片机时钟频率采用6MHz,则ALE引脚的输出频率为1MHz,再经过2分频后为500kHz,恰好符合0809对时钟的要求。 由于ADC0809具有输出
[单片机]
ADC0809与<font color='red'>51单片机</font>的连接方式
51单片机驱动AD7799程序(keil c)
下面提供一个完整版本的ad7799程序,Keil C写的ADI的24位A/DAD7799使用SPI接口程序:(VRS51L3074单片机 是一颗基于8051内核集成了多种模块并可多 范围的在嵌入式设计中应用的芯片,完整的工程文件及hex下载地址:http://www.51hei.com/f/Keil_C_AD7799.rar ) ad7798,ad7799的详细中文资料请看: http://www.51hei.com/chip/4000.html #pragma CODE DEBUG SYMBOLS OBJECTEXTEND //SRC 当与汇编混合编译时需要 #include"VRS51L3074_keil.h" #in
[单片机]
51单片机直接寻址方式与编程举例
直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。 例如:MOV A,30H 这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形
[单片机]
51单片机学习历程《二》——数码管的显示
数码管的使用非常广泛,有段锁存和位锁存,段锁存来显示你想显示的数字,位锁存用来定位某个数码管,这样就能被你控制显示花样的东西了,非常有趣! 实例一: 八个数码管从左到右分别显示0,1,2,3.。。。,7。 示例二:电话号码滚动显示
[单片机]
<font color='red'>51单片机</font>学习历程《二》——数码管的显示
一款基于51单片机的简易示波器设计
随着电子通信以及教学事业的发展,示波器的应用越来越广泛,它在教学中所起到的作用越来越重要,示波器可以测量信号的幅度,频率以及波形等等,但是高精度的示波器非常昂贵,对于非盈利事业的教学组织来说无疑不合适,所以提出了一种以单片机为控制核心的简易示波器设计方案。它由前向控制部分,数据采集和存储部分,51单片机控制部分以及按键和MS12864R显示部分组成。 1 简易数字示波器的工作原理以及总体框架 本设计硬件电路部分由单片机控制系统电路,前向输入调理电路,模数转换和存储电路,以及按键显示电路组成。其工作的基本思路就是以单片机为控制核心,让AD芯片完成数据的离散化,采集数据经过缓冲暂存于存储器里面,当波形显示时,单片机从存储器的读使能
[测试测量]
一款基于<font color='red'>51单片机</font>的简易示波器设计
基于51单片机实现无源蜂鸣器控制
前言 前篇教程我们已经介绍了如何控制51 单片机的IO 口输出高低电平,本章我们通过另外一个实验来讲述51单片机IO口的输出。通过单片机的一个IO口控制板载无源蜂鸣器,实现蜂鸣器控制。学习可以参考前面LED实验教程内容。 一、蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出1.5~
[单片机]
基于<font color='red'>51单片机</font>实现无源蜂鸣器控制
AT89C51单片机高速串行输出口设计
    摘要: 介绍使用AT89C51单片机扩展高速串行同步移位输出口的方法,给出基于分立TTL元器件和可编程逻辑器件PLD两种电路的实现方案,在LED点阵显示屏系统中已得到应用。     关键词: 串行口 单片机 可编程逻辑器件 AT89C51(与MCS-51兼容)单片机的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展多个8位并行I/O口。在LED点阵显示屏应用系统中,一般都采用数据同步移位输出方式,并使用移位寄存器芯片(如74LS595)扩展并行I/O口驱动LED点阵显示。LED点阵显示采用扫描方式,为不产生闪烁感,每秒需要传送50屏点阵显示数据,因此有大量的数据要通过同步移位的方式送到显示驱动电路部
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved