光立方教程说街道早就腐烂了,成就感也不错。每个人做的事情都有不同。这个没那么难。考验是耐力。我个人推荐能做的事就玩。基于单片机爱好者对单片机学习的热情,光立方是学习单片机非常好的练习材料,以8*8*8光立方为例,这是512个发光二极管像立方体那样构建并焊接的,有层共阴束共阳和层共阳束共阴两个方案,各层8*8个发光二极管,共8层通过c语言编译单片机程序,实现了自定义动画效果。你的思考范围有多宽,光立方的动画有多大。大家光立方制作的,是为了随意控制所有的珠子,实现自己思考的美丽动画。那么,从光立方的原理开始吧。说原理的话,头会痛吧。
光立方系统框图
单LED控制方式
首先,为了理解单个LED的控制方式,可以将正极连接到电源上,通过一个限流电阻将负极连接到单片机的某个IO端口上。IO端口输出低时,LED亮灯,反之LED熄灯。
单LED控制模拟原理图
如果想驱动任意位置的LED,则可以将用于该位置的LED的列线接地,并将行线连接到+V。学过单相思的朋友们知道电子管是怎么点亮的。其中,通过扫描,所有的数字管都能正常工作,并且可以显示我们想要的数字。
点矩阵也同样,尽管是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,控制器存储这些数据,实现1层64个灯的同时点亮。以下,对需要固定画面的显示、硬件执行的处理进行说明。
1)向8个74hc573传输第1层64点的数据,控制uln2803层控制芯片导通第1层开关,点亮第1层,此时其他层熄灭。
2)等待时间t。
3)熄灭第一层,74hc573开始第二层的数据的传输,锁存,开启第二层总控制开关,点亮第二层。
4)等待时间t。
熄灭第一层,将第八层的数据传送至所有74hc573,锁存,开启第八层的总开关,点亮第八层。
再回到第一步,继续循环。。
4*4*4RGB光立方8*8*8R光立方
由此,实现了一个周期的画面显示,因为人的眼睛的视觉暂时残留的特性,所以只要刷新得很快,我们看到的是光立方整体都很明亮。为了实现我们所期望的效果使画面稳定,上间隔点灯t必须一致。否则会发生亮度不均。
在实际使用上述电路的情况下,如果在74hc573输出的64针上分别施加1个限流电阻,则二极管保护作用、整体消耗功率的限制、亮度的调整良好。
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*4RGB光立方仿真原理图
4*4*4RGB光立方有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光立方混色调试
最后附上酱汁。
#includelt;stc12c5a.hgt;
#include lt;intrins.hgt;
#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
…………………。
太多的愿望!不粘贴的尝试!如果有必要的话。。。
来源头部
来源中间
来源尾部