文章目录
- 一、前言
- 二、OLED模块介绍
-
- 1、介绍
- 2、驱动
- 三、硬件连接
- 四、软件代码
- 五、效果展示
- 六、代码链接
一、前言
顾名思义,光立方是一种发光的立方体。光立方的基本原理是利用人眼的暂留效应和单片机的控制LED灯光迅速闪烁,显示出完整的图案。光立方原理相对简单,但生产过程耗时。
二、OLED模块介绍
1、介绍
本设计的光立方采用循环照明法,循环照明LED灯层被点亮,以达到预期的效果。这与数字管的动态扫描相同。当第一层被点亮时,图形对应,第二层对应图形。当扫描速度加快时,它看起来像一个图形。
2、驱动
由于光立方小,本设计采用9013 NPN驱动三极管的目的是驱动三极管LED灯具提供足够大的电压电流,NPN当使用三极管作为驱动电路时,基层需要串联电阻,以保护三极管不被烧坏。三极管集电极与发射极接LED灯的负极端接GND。
三、硬件连接
正面 侧面 背面
单片机最小系统可自行添加按钮控制程序。本设计未添加。 驱动电路 LED灯电路 P0、P控制每层点亮LED灯,连接控制LED灯三极管的基级。
P24、P25、P26、P27用三极管控制照明层数。
四、软件代码
main主函数
调用想要的灯光,可以根据自己的想法进行不同的创意。我直接调用,方便大家学习使用。
void main() {
while(1) {
and1(); and2(); and3(); and4(); and5(); and6(); and7(); } }
BMP.c
存储不同的照明效果,我设计了中设计了9个供您学习。全亮,全灭,平面从左到右,平面从底到顶,旋转照明,旋转全亮,平面旋转,波浪,斜。每个效果的程序结构基本相同。
void end() //全灭 void begin() //全亮 void and1()///从平面最左边到最右边 void and2()///平面底部到顶部 void and3()//旋转点亮 void and4()//旋转亮 void and5()//平面旋转 void and6()//波浪
void and7()//斜面1
大致讲解:由于使用P0、P1两个端口,所以使用A、B分别控制,AB的第一行为光立方每一层的第一个状态,第二行为第二个状态。循环中j为状态的个数,根据实际情况进行改写,k为每个状态的时长,时长过短时影响效果,i为层数的选择,不需要更改。
void and6()//波浪
{
unsigned char code A[2][4]=
{
{
0x5a,0xa5,0x5a,0xa5}, //状态1
{
0xa5,0x5a,0xa5,0x5a}, //状态2
};
unsigned char code B[2][4]=
{
{
0x5a,0xa5,0x5a,0xa5},//状态1
{
0xa5,0x5a,0xa5,0x5a},//状态2
};
int i,j,k;
for(j=0;j<2;j++)
{
for(k=0;k<60;k++)
{
for(i=0;i<4;i++)
{
switch(i)
{
case(0):
b1=1;b2=0;b3=0;b4=0; break;//显示第0层
case(1):
b1=0;b2=1;b3=0;b4=0; break;//显示第1层
case(2):
b1=0;b2=0;b3=1;b4=0; break;//显示第2层
case(3):
b1=0;b2=0;b3=0;b4=1; break;//显示第3层
default:break;
}
a=A[j][i];
b=B[j][i];
DelayMs(1);
}
}
}
}
delay.c
根据不同的效果进行添加。
#include "delay.h"
/*------------------------------------------------ uS延时函数 ------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------ mS延时函数 ------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
五、效果展示
4*4*4光立方
六、代码链接
关注公众号“小小创客者”回复“4*4光立方”获得代码,如有错误欢迎指正。