行百科
当前位置: 首页 > >  常识 > > 

光立方原理讲解(单片机学习-烂大街了的光立方教程)

2024-08-14 15:30:02

虽说光立方教程早已烂大街了,但是做出来成就感还是不错的,每个人做的都有其不同所在,这玩意也没多大难度,考验的就是耐心了,个人建议是能做的就做个玩玩,基于单片机爱好者对单片机学习的热情,光立方是一学习单片机非常好的练习材料,拿8*8*8光立方举例,它是由512个发光二极管按照立方体的方式搭建焊接起来的,有层共阴束共阳和层共阳束共阴两种方案,每一层有8*8个发光二极管,共8层,用c语言编译单片机程序使自定义动画效果得以实现。你的思维有多宽,光立方的动画就有多多。我猜想大家做光立方都是为了能随性所欲的控制每一个灯珠,来实现自己想的一些精美动画。那么,让我们从光立方的原理开始入手。一讲到原理,估计就头疼了。


光立方系统框图

单个LED的控制方式

首先了解单个LED的控制方式,可以是将正极接电源,负极通过一个限流电阻连接至单片机的某个IO口。IO口输出低电平时,LED就亮,反之,LED灭。

单个LED控制仿真原理图


如果我们想驱动任意位置的LED,我们只需要在该位置LED所使用的列线接地,行线接上+V即可。学过单片机的朋友们,都知道数码管是怎么点亮的,其中有位选和段选之分,通过扫描来实现所有数码管能正常工作以实现显示我们想要的数字。

点阵也一样,尽管是8*8的点阵,如果我们让整体能随意显示图案,那也需要用扫描的方式才能够实现,否则,无法实现对其精准的控制。所谓扫描,就是说,我们一次只能让一行排或者一竖排的灯亮。每次只能这么点,8次为一个周期,从左至右依次点一次,那么循环起来,我们看到的就是完整的图像了。


8*8点阵仿真原理图


8*8点阵-部分汇编程序

每一层LED的控制方式

若按照单个LED的控制方式,每个LED需要占用单片机的一个IO口,控制100个LED就需要100个IO口。那么,有没有一种方式,可以用较少的IO口,控制较多的LED呢?答案是肯定的,这种方法,就是扫描驱动电路。

所以一般情况下,光立方的每一层虽然有64个灯,但是我们会有64跟线分别连接到这些灯上,从而实现一次性的对64个灯进行控制,通常单片机引脚较少,一般将采用74hc573,74hc595等芯片进行拓展。

光立方74hc573芯片进行拓展仿真原理图


8*8*8光立方仿真原理图


8*8*8光立方LED的控制方式

首先要准备好工具、材料、理论图。

所需工具:

尖嘴钳、

电络铁、

放大镜。

材料清单:

发光二极管(2*3*4led灯512个)、

限流电阻(64个500欧姆电阻限制每束电流)、

洞洞板(20cm*20cm)、

单片机最小系统(stc12c5aRD+芯片)、

锁存器(8个74hc573)、

8路NPN达林顿管(1个uln2803)、

ic插座(40孔9个)、

焊锡2卷、导线若干。

数据通过并行的方式,分别打入每一个74hc573中,再控制器储存这些数据,从而实现一层64个灯同时的点亮,下面描述,一下一个固定画面的显示,所需要硬件执行的过程。

1)将第一层64个点的数据传入8个74hc573中,控制uln2803层控制芯片打开第一层开关,使第一层点亮,这个时候,其他层是灭的。

2)等待时间t。

3)熄灭第一层,开始向74hc573中传输第二层的数据,锁存,开启第二层总控制开关,点亮第二层。

4)等待时间t。

熄灭第一层,将第八层的的数据传进所有74hc573中,锁存,开启第八层总开关,点亮第八层。

再回到第一步,循环下去。。。。。


4*4*4RGB光立方&8*8*8R光立方


这样,便实现了一个周期画面的显示,由于人眼的视觉暂留的特性,只要刷新的够快,我们看到的就是光立方整体都在亮。便实现了我们想要的效果。为了画面的稳定,上面间隔点亮t要保持一致,否则会出现亮度不均的情况。

  在实际使用上述电路的时候,最好给74hc573输出的64个引脚分别加一个限流电阻,这样能起到很好的二极管保护作用和整体功耗的限制以及亮度的调节。

8*8*8光立方

8*8*8光立方调试

8*8*8光立方点亮效果图

8*8*8光立方俯视效果图

8*8*8光立方显示效果图

8*8*8动画效果图

4*4*4 RGB光立方

RGB光立方为全彩光立方,能显示全部色彩,是由RGB全彩LED焊接而成。 RGB LED灯是以红绿蓝三色混光而成,以三原色共同交集成像,此外,也有蓝光LED配合黄色荧光 粉,以及紫外LED配合RGB荧光粉。某些LED背光板出现的颜色特别清楚而鲜艳,甚至有高画质电视的程度,这种情形,正是RGB的特色,标榜红就是红、 绿就是绿、蓝就是蓝的特性,在光的混色上,具备更多元的特性。


RGB全彩LED灯尺寸引脚图


4*4*4 RGB光立方仿真原理图

4*4*4 RGB光立方有64个RGB全彩LED,要控制的有192个I/O,用到6个锁存器,限流电阻、上拉电阻若干,单片机最小系统stc12c5a等元器件。

4*4*4RGB光立方板底走线


4*4*4RGB光立方测试

4*4*4RGB光立方调试图


4*4*4RGB光立方演示图

4*4*4RGB光立方效果图


4*4*4RGB光立方动画图


4*4*4RGB光立方绿光调试


4*4*4RGB光立方混色调试

最后附上源码:

#include<stc12c5a.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

uchar u=1;

sbit keyout=P4^4;

uint code tab_water[]={

0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0080,0x0140,0x0080,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x0000,0x0080,0x0140,0x0220,0x0140,0x0080,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x0000,0x01c0,0x0220,0x0410,0x0410,0x0410,0x0220,0x01c0,0x0000,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x0000,0x03e0,0x0410,0x0808,0x0808,0x0808,0x0808,0x0808,0x0410,0x03e0,0x0000,0x0000,0x0000,0x0000,

0x0000,0x0000,0x07f0,0x0808,0x1004,0x1004,0x1004,0x1004,0x1004,0x1004,0x1004,0x0808,0x07f0,0x0000,0x0000,0x0000,

0x0000,0x0ff8,0x1004,0x2002,0x2002,0x2002,0x2002,0x2002,0x2002,0x2002,0x2002,0x2002,0x1004,0x0ff8,0x0000,0x0000,

0x1ffc,0x2002,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x4001,0x2002,0x1ffc,0x0000

};

char code tab00[]={7,7,7,7,7,7,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,1,2,3,4,5,6,//28

8+6,8+6,8+6,8+6,8+6,8+6,8+5,8+4,8+3,8+2,8+1,8+1,8+1,8+1,8+1,8+1,8+2,8+3,8+4,8+5,//20

16+5,16+5,16+5,16+5,16+4,16+3,16+2,16+2,16+2,16+2,16+3,16+4,//12

24+4,24+4,24+3,24+3,//24+4

32+4,32+4,32+3,32+3,

40+5,40+5,40+5,40+5,40+4,40+3,40+2,40+2,40+2,40+2,40+3,40+4,//12

48+6,48+6,48+6,48+6,48+6,48+6,48+5,48+4,48+3,48+2,48+1,48+1,48+1,48+1,48+1,48+1,48+2,48+3,48+4,48+5,//20

56+7,56+7,56+7,56+7,56+7,56+7,56+7,56+7,56+6,56+5,56+4,56+3,56+2,56+1,56+0,56+0,56+0,56+0,56+0,56+0,56+0,56+0,56+1,56+2,56+3,56+4,56+5,56+6//28

};

char code tab10[]={56+7,56+7,56+7,56+7,56+7,56+7,56+7,56+7,56+6,56+5,56+4,56+3,56+2,56+1,56+0,56+0,56+0,56+0,56+0,56+0,56+0,56+0,56+1,56+2,56+3,56+4,56+5,56+6,//56+28

......................

太多了!就不贴出来了!有需要就...............


源码_头


源码_中


源码_尾