STEP1

按照电路图搭建3*3的LED矩阵,LED顶端朝自己,LED的负极引脚朝左掰弯,LED的正极引脚朝下掰弯,注意引脚交叉需要一定的间隔,不要短路。

这样就是光立方的一个面,一共需要焊3个面。

1571480487969382.png

STEP2

把3个面立在洞洞板并焊接起来,这就是一个立体的3*3*3立方体。

这时一共有9根LED的引脚焊接到了洞洞板上,分别是每个面的Y0、Y1、Y2。

1571480486378922.jpg

STEP3

把每层的LED负极分别接在一起,构成层选择线,层0、层1、层2。

1571480487618999.jpg

STEP4

把底部9个引脚(x、y坐标选择线)和3根层选择线接到单片机最小系统上,引脚可自定义连接。

例如

//底部9个点  
LED正极 
sbit B00=P0^7; 
sbit B01=P0^6;
sbit B02=P0^5;
sbit B10=P0^4;
sbit B11=P0^3;
sbit B12=P0^2;
sbit B20=P2^7;
sbit B21=P0^0;
sbit B22=P0^1;
//层选择线  
LED负极 
sbit Z0=P2^6;    
sbit Z1=P2^5;    
sbit Z2=P2^4;



测试效果

1571483059706678.gif

测试程序

#include<reg51.h>
//+     底部9个点
sbit B00=P0^7; 
sbit B01=P0^6;
sbit B02=P0^5;
sbit B10=P0^4;
sbit B11=P0^3;
sbit B12=P0^2;
sbit B20=P2^7;
sbit B21=P0^0;
sbit B22=P0^1;
//-     层选择线
sbit Z0=P2^6;    
sbit Z1=P2^5;    
sbit Z2=P2^4;    
void Postion(unsigned char x,unsigned char y,unsigned char z )
{
    Z0=1;Z1=1;Z2=1;
    B00=0; //+
    B01=0;
    B02=0;
    B10=0;
    B11=0;
    B12=0;
    B20=0;
    B21=0;
    B22=0;
    switch(z)
    {
        case 0:    Z0=0;break;
        case 1:    Z1=0;break;
        case 2:    Z2=0;break;
    }
    switch(x*10+y)
    {
        case 0:    B00=1;break;
        case 1:    B01=1;break;
        case 2:    B02=1;break;
        case 10:B10=1;break;
        case 11:B11=1;break;
        case 12:B12=1;break;
        case 20:B20=1;break;
        case 21:B21=1;break;
        case 22:B22=1;break;
    }
}
void delay100ms(void)  
{
    unsigned char a,b,c;
    for(c=19;c>0;c--)
        for(b=20;b>0;b--)
            for(a=130;a>0;a--);
}
void main()
{
    char x=0,y=0,z=0,c=0;
    while(1)
    {
        for(z=0;z<=2;z++){ //Z轴
            for(c=0;c<3;c++){ //每层循环次数
                for(x=0;x<3;x++){
                    Postion(x,y,z);
                    delay100ms();
                }
                x=2;
                for(y=0;y<3;y++){
                    Postion(x,y,z);
                    delay100ms();
                }
                y=2;
                for(x=2;x>=0;x--){
                    Postion(x,y,z);
                    delay100ms();
                }
                x=0;
                for(y=2;y>=0;y--){
                    Postion(x,y,z);
                    delay100ms();    
                }
                y=0;
            }
              
        }
        
    }
    
}