8x8x8光立方C程序

8x8x8光立方C程序
8x8x8光立方C程序

#include

#include //空语句调用头文件

#define ss unsigned char

#define mm unsigned int

/**********************************************************************/

sbit DS=P1^0; //数据

sbit CLK=P1^1; //74HC595的SH-CP(11脚)

sbit STB=P1^2; //74HC595的时钟和输出锁存(12脚)

ss code shizhong[]={0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,

0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,

0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,

0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};

ss ceng[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//层扫描

/**************延时*****************/

void delay(mm time)

{mm i,j;

for(i=0;i

for(j=0;j<110;j++);

}

void zi()

{ss i;

DS=1;for(i=0;i<=16;i++) CLK=shizhong[i];

for(i=0;i<=112;i++)

{ if(i==15||i==47||i==31||i==63||i==79||i==81||i==97||i==99||i==101||i==103||i==105||i==107||i==1 09||i==111||i==95||i==65||i==49||i==33||i==17||i==1) {DS=1; CLK=shizhong[i];}

else {DS=0; CLK=shizhong[i];} }

STB=0 ;STB=1; P2=0x81; delay(1);

}

void zi1()

{ss i;

DS=0;for(i=0;i<=18;i++) CLK=shizhong[i];

DS=1;for(i=0;i<=12;i++) CLK=shizhong[i];

for(i=0;i<=98;i++)

{ if(i==15||i==31||i==47||i==63||i==69||i==71||i==73||i==75||i==77||i==79||i==53||i==37||i==21||i= =5) {DS=1; CLK=shizhong[i];}

else {DS=0; CLK=shizhong[i];} }

STB=0 ;STB=1; P2=0x42; delay(1);

}

void zi2()

{ss i;

DS=0;for(i=0;i<=36;i++) CLK=shizhong[i];

DS=1;for(i=0;i<=8;i++) CLK=shizhong[i];

for(i=0;i<=84;i++) { if(i==15||i==31||i==47||i==45||i==43||i==41||i==25||i==9) {DS=1; CLK=shizhong[i];}

else {DS=0; CLK=shizhong[i];} }

STB=0 ;STB=1; P2=0x24; delay(1);

}

/**************倒计时3****************/

void display11()

{ ss j,i,a;

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==2||j==5)

{

DS=0; for(i=0;i<=56;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=4;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=12;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=4;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=52;i++) CLK=shizhong[i];

}

else

{

DS=0; for(i=0;i<=50;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=6;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=52;i++) CLK=shizhong[i];

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=20;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==2||j==5)

{

for(i=0;i<=128;i++)

{ if(i==75||i==89||i==71||i==57)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

else

{

for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=20;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==2||j==5)

{

for(i=0;i<=128;i++)

{ if(i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

else

{

for(i=0;i<=128;i++)

{ if(i==23||i==25||i==39||i==41||i==57||i==55||i==71||i==73||i==87||i==89) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=20;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==2||j==5)

{

for(i=0;i<=128;i++)

{ if(i==55||i==69||i==73||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

else

{

for(i=0;i<=128;i++)

{ if(i==27||i==41||i==45||i==55||i==59||i==69||i==73||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1;P2=ceng[j]; delay(1);

}

}

a=20;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==2||j==5)

{

DS=0; for(i=0;i<=52;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=4;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=12;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=4;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=56;i++) CLK=shizhong[i];

}

else

{

DS=0; for(i=0;i<=52;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=6;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=50;i++) CLK=shizhong[i];

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

}

/**************倒计时2****************/

void display2()

{ ss j,i,a;

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==0||j==1||j==6)

{DS=0; for(i=0;i<=50;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=6;i++) CLK=shizhong[i];

DS=1; for(i=0;i<=10;i++) CLK=shizhong[i];

DS=0; for(i=0;i<=52;i++) CLK=shizhong[i];

}

if(j==2)

{

for(i=0;i<=128;i++)

{ if(i==53||i==55||i==69||i==71)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==3)

{

for(i=0;i<=128;i++)

{ if(i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

{

for(i=0;i<=128;i++)

{ if(i==57||i==59||i==73||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==5)

{

for(i=0;i<=128;i++)

{ if(i==51||i==53||i==67||i==69||i==57||i==59||i==73||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==7)

{

for(i=0;i<=128;i++)

{ if(i==53||i==55||i==57||i==69||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==0||j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==57||i==71||i==75||i==89||i==93||i==101) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

{

for(i=0;i<=128;i++)

{ if(i==39||i==53||i==57||i==71)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==3)

{

for(i=0;i<=128;i++)

{ if(i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==4)

{

for(i=0;i<=128;i++)

{ if(i==75||i==89||i==93||i==101)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==5)

{

for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==75||i==89||i==93||i==101) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==7)

{

for(i=0;i<=128;i++)

{ if(i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==0||j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==23||i==25||i==39||i==41||i==55||i==57||i==71||i==73||i==87||i==89) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2)

{

for(i=0;i<=128;i++)

{ if(i==39||i==41||i==55||i==57)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==3)

{

for(i=0;i<=128;i++)

{ if(i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==4)

{

for(i=0;i<=128;i++)

{ if(i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

if(j==5)

{

for(i=0;i<=128;i++)

{ if(i==23||i==25||i==39||i==41||i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==7)

{

for(i=0;i<=128;i++)

{ if(i==39||i==41||i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==0||j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==27||i==45||i==41||i==59||i==55||i==73||i==69||i==87||i==83||i==107) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2)

{

for(i=0;i<=128;i++)

{ if(i==41||i==59||i==55||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

if(j==3)

{

for(i=0;i<=128;i++)

{ if(i==55||i==73||i==69||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==4)

{

for(i=0;i<=128;i++)

{ if(i==69||i==87||i==83||i==107)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==5)

{

for(i=0;i<=128;i++)

{ if(i==27||i==45||i==41||i==59||i==69||i==87||i==83||i==107)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==7)

{

for(i=0;i<=128;i++)

{ if(i==41||i==59||i==55||i==73||i==69||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{

for(j=0;j<8;j++)

{

if(j==0||j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==53||i==69||i==55||i==71||i==57||i==73||i==59||i==75||i==61||i==77) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2)

{

for(i=0;i<=128;i++)

{ if(i==57||i==73||i==59||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==3)

{

for(i=0;i<=128;i++)

{ if(i==55||i==71||i==57||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==4)

{

for(i=0;i<=128;i++)

{ if(i==53||i==69||i==55||i==71)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==5)

{

for(i=0;i<=128;i++)

{ if(i==53||i==69||i==55||i==71||i==59||i==75||i==61||i==77)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==7)

{

for(i=0;i<=128;i++)

{ if(i==55||i==71||i==57||i==73||i==59||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

}

/**************倒计时1****************/

void display3()

{ ss j,i,a;

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0)

{for(i=0;i<=128;i++)

{ if(i==53||i==55||i==57||i==59||i==69||i==71||i==73||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==2||j==3||j==4||j==5||j==7)

{

for(i=0;i<=128;i++)

{ if(i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==6)

{

for(i=0;i<=128;i++)

{ if(i==55||i==57||i==71||i==73||i==59||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0)

{for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(i==39||i==53||i==57||i==71)

{

for(i=0;i<=128;i++)

{ if(i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==6)

{

for(i=0;i<=128;i++)

{ if(i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0)

{for(i=0;i<=128;i++)

{ if(i==39||i==41||i==57||i==55||i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==2||j==3||j==4||j==5||j==7)

{

for(i=0;i<=128;i++)

{ if(i==57||i==55||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==6)

{

for(i=0;i<=128;i++)

{ if(i==57||i==55||i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0)

{for(i=0;i<=128;i++)

{ if(i==27||i==45||i==41||i==59||i==55||i==73||i==69||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==2||j==3||j==4||j==5||j==7)

{

for(i=0;i<=128;i++)

{ if(i==41||i==59||i==55||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==6)

{

for(i=0;i<=128;i++)

{ if(i==41||i==59||i==55||i==73||i==69||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0)

{for(i=0;i<=128;i++)

{ if(i==53||i==69||i==55||i==71||i==57||i==73||i==59||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==2||j==3||j==4||j==5||j==7)

{

for(i=0;i<=128;i++)

{ if(i==55||i==71||i==57||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==6)

{

for(i=0;i<=128;i++)

{ if(i==53||i==69||i==55||i==71||i==57||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

}

}

}

/**************OK****************/

void display5()

{ ss j,i,a;

a=500;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==7||i==119)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==6)

{for(i=0;i<=128;i++)

{ if(i==7||i==119||i==1||i==13||i==125||i==113)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2||j==5)

{

for(i=0;i<=128;i++)

{ if(i==7||i==119||i==3||i==11||i==15||i==115||i==127||i==123)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==3||j==4)

{

for(i=0;i<=128;i++)

{ if(i==7||i==119||i==127||i==123||i==11||i==15||i==5||i==117)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

}

}

}

/**************倒计时0****************/

void display4()

{ ss j,i,a;

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==53||i==55||i==57||i==69||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==51||i==53||i==55||i==57||i==59||i==67||i==69||i==71||i==73||i==75) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2||j==3||j==4||j==5)

{

for(i=0;i<=128;i++)

{ if(i==51||i==53||i==57||i==59||i==67||i==69||i==73||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==57||i==71||i==75||i==89||i==93||i==101) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2||j==3||j==4||j==5)

{

for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==75||i==89||i==93||i==101)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==39||i==41||i==55||i==57||i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==23||i==25||i==39||i==41||i==55||i==57||i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2||j==3||j==4||j==5)

{

for(i=0;i<=128;i++)

{ if(i==23||i==25||i==39||i==41||i==71||i==73||i==87||i==89)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==41||i==59||i==55||i==73||i==69||i==87)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==1||j==6)

{

for(i=0;i<=128;i++)

{ if(i==27||i==45||i==41||i==59||i==55||i==73||i==69||i==87||i==83||i==107) {DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

if(j==2||j==3||j==4||j==5)

{

for(i=0;i<=128;i++)

{ if(i==27||i==45||i==41||i==59||i==69||i==87||i==83||i==107)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

}

/**************I****************/

void display6()

{ ss j,i,a,b;

b=5;

while(b--)

{

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==53||i==55||i==57||i==59||i==69||i==71||i==73||i==75)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

else

{

for(i=0;i<=128;i++)

{ if(i==55||i==57|i==71||i==73)

{DS=1; CLK=shizhong[i];}

else

{DS=0; CLK=shizhong[i];}

}

}

STB=0 ; STB=1; P2=ceng[j]; delay(1);

}

}

a=50;

while(a--)

{for(j=0;j<8;j++)

{ if(j==0||j==7)

{for(i=0;i<=128;i++)

{ if(i==21||i==35||i==39||i==53||i==57||i==71||i==75||i==89)

{DS=1; CLK=shizhong[i];}

else

光立方制作教程

五一长假漫漫,时间很充分,正好有时间去干那些因为时间不足而搁置已久的一些想法,首先想到的是做一个光立方,器件年前就买了,因为时间问题被长久搁置了。 之前论坛已经有人晒过,不过有的只是作品展示,在此我将详细的向大家解析一下光立方的制作流程,望大家喜欢。先上资料: 首先是前期准备工作,器件的选取,我的器件清单如下:

LED选取:如果有条件的话可以使用7色彩灯,视觉效果将会更好。或者是长方形发光二极管,方便焊接。 制作前先按照下图对小灯进行弯折处理(如果看不懂的话,请努力发挥自己的空间想象能力,之后就会豁然开朗的),这是一个漫长而痛苦的过程,建议每天睡前折一些,我断断续续干了近十天吧!(五一前虽然大块时间没有,但是每晚折小灯的时间绝对是有的)实际焊接时,请注意变通,每一层都会有一行需要多弯一下的,以实现共阴处理。

主要器件如下:

先在万用板上规划一下光立方小灯之间的间隔,建议2CM为宜,用铅笔或者彩笔在板子上确定64个点,以方便下一步操作。 找一块木板,最小是20*20CM,我找的时候费了点劲,采用爆破拆出来的,然后把万用板放在木板上,四角用大头钉固定(以确保扎点时位置不变),用圆规进行采点,记住是64个点,是7*7的方格。不要因为计算错误,以适用万用板而导致光立方间隔过密。 采用手钻打孔,不直接用大钻,是防止打孔过程中,孔洞打偏。

大钻扩孔,钻头选择要适宜,防止LED小灯插上后不稳,或者插上焊完取不出来,我采用的是2.8/2.9的钻头。游标卡车是为了测钻头大小的。

焊接时,建议一列一列的焊接,(层共阴,列共阳)这样操作起来比较容易,防止全部插上在焊接时,过多的小灯产生阻碍,由于我是左撇子,所以我是从右向左焊接。这是焊接好的第一层。焊完之后,现将小灯阳极管教理顺,与共阴平面呈垂直关系,以方便之后焊接。将LED点阵层起下的时候,为美观起见,请注意不要破坏小灯的相对位置及高低层次,(为了增强光立方坚固度,建议,每层上跨接一些硬些的细铜丝)。 要牢记:焊完一层后切记要记得检测是否有小灯在焊接过程中损坏。检测方法如下:层接地,即阴极接地,用一个串有1K限流电阻的导线接5V,然后依次接小灯阳极。

光立方制作+程序讲解

光立方教程 今天,给大家带来光立方的制作教程,基于本人制作的经验,给各位想要做的朋友分享制作过程。 对于第一次制作的朋友,我们要先制作好一个日程表,如下图: 我们要弄好一个计划,就好像单片机运行程序一样。

当然,废话少说。接下来,我们需要一份购买材料的清单 如上图所示,我们需要购买的万能板需要购买18*30的规格。这样子才有足够的空间去安装我们的电子元件。 首先,我们需要用万能板作为骨架,每2cm*2cm就要焊接一个排针,上下左右间隔一样。不过对于初学者来说,一次性焊接64颗排针有点困难,所以我们需

要用胶布把每一颗排针固定好,然后上焊,当然这是一个快捷的方法,也适合所有的初学者 当我们把排针固定好后,我们只需要把板子翻过来焊接就可以了。 接下来,我们要把每一颗led灯折弯后侧着放置在排针中。从左到右,从上至下

的安放,安放好后,我们只需要把他们的脚焊接即可。折弯时记住使用镊子折弯。效果图如下图所示 显而易见,这是非常需要考焊功的活,各位制作时候要注意节点与节点之间的间距,并且注意焊点不要点太多的锡,会影响做出来的效果与美观。接下来,我们

把弄好的8排led插在万能板上,注意:我们要注意每排之间的间隔。 下一步,我们需要在把每排led的共阴极连接在一起,一共8层,每层都要连接好,当我们把每层连接好后,我们要在每层的末端或者初始端接一条输出线,作为共阴极连接UNL2803。 当然,我们连接UNL2803的前提是先把芯片接好。小编我直接把芯片焊接在板子上,这种方法对于初学者来说不可取,需要弄芯片底座,不然芯片烧掉了就很

难拆下来了。 接下来我们要按照电路图接线路了(是不是很开心,终于可以接线路了,好戏在后头),下面是74HC573集成电路的接法: 首先我们先分析一下原理图:74HC573的1D~8D都连接在一起,然后再接到单片机的P0.0~P0.7端口;1Q~8Q分别连接每排的共阳里,就是焊接在电路板上的光立方引脚;至于LE要分别接到单片机的P2.0~P2.7。 当然上图是我的接线实物图,是不是很乱 ,当然,只要我们可以把思路可以理

光立方设计报告

光立方设计报告

一、要求 1、利用单片机控制8*8*8的LED灯显示3D图形。 2、进行实物焊接,调试。 二、设计思路 首先,8*8*8光立方是由8个相同的面组成,每一个面有64个蓝色LED灯,不同的图案又这些点连接而成。如果我们想要驱动任意一个LED灯,我们让列接地,行接正极就可以实现,因此整个立方体列共阴极,行共阳极。实际上这个就是控制512个LED 的不同灯点亮。 三、电路设计 主要分为主控模块、驱动模块、显示模块 1、主控模块 主控模块我们选用STC12C5A60S2

图1 主控电路 其中C1、C2为去耦电容防止高频干扰2、驱动模块

图2 行驱动电路 可以用一个3—8译码器选择8个不同的共阳极层,但是译码器的驱动能力差,中间可以用双P沟道MOS管APM4953来增强驱动能力。这样就可以控制点亮不同的层。 图3 列驱动电路 我们可以用5026来选择不同的列,一片5026就可以控制16列,

一共有64列,因此只需要用到4片。在每一片5026电源端上加一个电容,主要防止高频干扰。 3、显示模块 每一个LED的负端都连接在一起,构成一列;每一层的LED 的阳极连在一起。一层一列刚好可以确定一个LED灯。这样就 可以通过主控电路和驱动电路来点亮所要点亮的LED,组成我 们想要的图案。 四、元器件选择 (1)由于光立方的程序量比较大,而且要求相对比较高,因此我们决定用51系列的增强型芯片STC12C5A60S2,选择的理由: 1.无法解密,采用第六代加密技术; 2.超强抗干扰; 3.内部集成高可靠复位电路,外部复位可用可不用; 4.速度快; (2)4953的作用:行驱动管,功率管。 每一显示行需要的电流是比较大的,要使用行驱动管,每片4953可以驱动2个显示行,其内部是两个CMOS管,1、 3脚VCC,2、4脚控制脚,2脚控制7、8脚的输出,4脚控 制5、6脚的输出,只有当2、4脚为“0”时,7、8、5、6 才会输出,否则输出为高阻状态。 (3)SN74HC245DW,8路双向总线收发器,具有三态输出;74HC245八路总线收发器被设计用于数据总线之间的异步双向通信。

取模软件(上位机)与光立方通信程序

/*版权所有,翻版必究!! 题目:上位机与单片机通信 功能:锁存器、三极管控制口,上位机送数据给单片机,显示任意图案作者:肖锦鹏 日期:2013年9月11 */ #include #define uchar unsigned char #define uint unsigned int uchar x,y,face,a,b; uchar i=0; uchar shuzu[8][8]; // //uchar shuzu[8][8]={ //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, //0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, //0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, // // }; //显示固定图案,数组可任意改动 // void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); } void init() { TMOD=0x22; TH1=0XFf; //波特率设置,波特率为57600 TL1=0XFf; TH0=0x00; TL0=0x00; TR1=1; TR0=1; SCON=0X50;

光立方基于74hc595的上位机(取模软件)控制程序

光立方基于74hc595的上位机(取模软件)控制程序 #include //头文件 #include//头文件 #define uchar unsigned char//宏定义 sbit SHCP=P1^0;//595移位寄存器时钟,上升沿有效 sbit STCP=P1^1;//595存储器时钟,上升沿有效 sbit DS=P1^2;//数据输入端 sbit OE=P1^3;//数据输出端 sbit KEY1=P3^0;//组合按键 sbit KEY2=P3^1;//调时按键 sbit KEY3=P3^2;//调分按键 uchar i,j,hour,min,sec;//定义的全局变量,初值默认为零 uchar tab1[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0xbf};//0-9,和分隔符-的段码(共阳数码管) uchar tab2[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};//位选码 /*………延时子程序…………*/ void delay(uchar time)//入口参数time { uchar m,n;//定义局部变量 for(m=0;m

8x8x8LED光立方原理加程序

8x8x8LED光立方 周渴望南阳理工学院Q418084696 功能;通过自定义代码实现LED炫丽动画效果。 通过按钮P3-7按钮实现动画与暂停。 底面是512个LED分成64组的共阳极由8个74hc573控制,每层64个LED 共阴极接在一起,共引出8跟负极与uln2803相连由其控制(这里注意uln280输出高电平LED负极通,低电平LED负极断)。 原理:先点亮最下层LED,假设8个74hc573全输出高电平,uln2803控制最下层输出高电平,那么最下层64个LED都点亮,延时10ms到5ms,关断最下层显示开通第二层假设也是8个74hc573全输出高电平,那么倒数第二层64个LED 全亮,再延时2ms到5ms那么以此类推每层的LED64个全都会亮,由于从第一层亮到最后一层亮时间小于50ms,由于人眼睛视觉暂留效果,就会觉得是全部层一起亮的,这样就“一起”点亮了512个LED。 其实每层的LED亮的数量不一样就组成了各种画面,通过调节定时器,就会有一种绚丽的动画效果。 本文使用的是STC12c5a60s2单片机,因为其程序存储空间大,stc89c52rc单片机完全可胜任(验证),只是程序太多要想办法了。 原理图: 本试验中P0口控制8个74hc573的锁存端,P1控制每层与uln2803相连,P2口传输到74hc573数据。本文使用动态扫苗,基于我之前做的16x16点阵文字移动显示程序,程序简单易懂,但是代码较多。

程序: #include sbit LA0=P0^0; /*定义8个74hc573锁存脚*/ sbit LA1=P0^1; sbit LA2=P0^2; sbit LA3=P0^3; sbit LA4=P0^4; sbit LA5=P0^5; sbit LA6=P0^6; sbit LA7=P0^7; sbit KEY=P3^7; /*定义暂停开关*/

全彩光立方程序参考

/*******每层共阴*****/ /******2012年12月20日******/ #include # include #define ss unsigned char #define mm unsigned int sbit gong_yin1=P2^0 ; //最顶层 sbit gong_yin2=P2^2 ; //第三层 sbit gong_yin3=P2^3 ; //第二层 sbit gong_yin4=P2^4 ; //最底层 ss di00[]={1,0,1,0,1,0,1,0,1}; ss di01[]={0,1,1,1,0,1,1,1}; ss di10[]={0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1}; ss gong_yang10[]={0x0f,0x8e,0x8c,0x88,0x80,0x00,0x00,0x00,0x10,0x11,0x60,0x40,0x00,0x20}; ss gong_yang30[]={0x00,0x00,0x08,0x88,0xc8,0xe8,0xf0,0x71,0x31,0x11,0x00,0x04,0x06,0x02}; ss gong_yang11[]={0x01,0x33,0x77,0xff,0xe0,0x00,0x00, 0x08,0xcc,0xee,0xff,0x70,0x00,0x00}; ss gong_yang31[]={0x00,0x00,0x07,0xff,0xee,0xcc,0x80, 0x00,0x00,0x0e,0xff,0x77,0x33,0x10}; ss gong_yang12[]={0x48,0x44,0x22,0x21,0x30,0xc0}; ss gong_yang32[]={0x12,0x22,0x44,0x84,0x0c,0x03}; ss gong_yang13[]={0x0f,0xf0,0x00,0x00}; ss gong_yang33[]={0x00,0x00,0x0f,0xf0}; /*********延时*********/ void delay(mm time) {mm i,j; for(i=0;i

888光立方程序

#include #include #define uchar unsigned char #define uint unsigned int uchar display[8][8]; /*rank:A,1,2,3,4,I,心,U*/ uchar code table_cha[8][8]={0x51,0x51,0x51,0x4a,0x4a,0x4a,0x44,0x44,0x18,0x1c,0x18,0x18,0x18,0x18,0x1 8,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0 x38,0x3c,0x3e,0x36,0x7e,0x30,0x30,0x3c,0x3c,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0xff,0xff,0xff, 0x7e,0x3c,0x18,0x18,0x66,0x66,0x66,0x66,0x66,0x66,0x7e,0x3c}; /*the "ideasoft"*/ uchar code table_id[40]={0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x00,0xf8,0x27,0x27, 0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,0x01,0x0,0x01, 0x01,0xff,0x01,0x01,0x00}; /*railway*/ uchar code dat[128]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc ,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd ,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0xb2 ,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0x8a,0xaa,0 xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0 xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0x e4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x 4}; /*railway 2*/ uchar code dat2[28]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc ,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4}; /*railway 3*/ uchar code

4X4X4光立方C程序(含制作方法和电路图)

一、4X4X4光立方源程序 #include #include #define uint unsigned int #define uchar unsigned char unsigned int scale; //占空比控制变量 unsigned char code tabP0[38][8]={0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00}; unsigned char code tabP2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //扫描 unsigned char code PWMsz[8]={0x00,0x60,0x60,0x00,0x00,0x60,0x60,0x00}; //中间四个 /******************************************************************** * 名称: Delay_1ms() * 功能: 延时子程序,延时时间为1ms * x * 输入: x (延时一毫秒的个数) * 输出: 无 ***********************************************************************/ /************************************************************************/ //结束呼吸灯专用 uchar code table[]={ 0,0,1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18, 19,20,21,22,23,24,25,26,27, 28,29,30,31,32,33,34,35,36, 37,38,39,40,41,42,43,44,45, 46,47,48,49,50,51,52,53,54, 55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80,81,82, 83,84,85,86,87,88,89,90,91, 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109, 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125, 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,1 48,149,150}; void delay(uint z) { uint x,y; for(x=80;x>0;x--) for(y=z;y>0;y--); }

8阶光立方的制作

8阶光立方的制作 摘要 光立方是一个电子工程方面DIY的绝好实例,不管国内国外都有非常多的爱好者。它同时要求制作者具有软硬件设计及手工制作等多方面的能力,目前youtube上最大的DIY光立方是32阶全彩光立光,引脚数多达131,072个,这对于个人来说绝对算是个大型的工程了。 要制作出一个漂亮的光立方,除了电路设计与程序设计,辅助工具设计也很重要,缺少它甚至是无法完成整个制作的。另一方面,很多验证性工作也属于辅助设计,理论往往与实际会有很大的出入,这时就需要一步步去验证原始设计。网络上大多参考资料都只是一个制作记录,并没有详细分析为什么要这么做,是否还有其它的实现方法等等。因此,在遇到不同的实际环境的时候,出了问题却往往找不到原因在哪里,这就造成很多的困惑。本文试着从设计原理的角度来分析如何做一个8阶单色光立方,以及记录在制作过程当中遇到的各种问题与解决办法。 控制芯片采用STC MCU,输出为串口转并口,驱动芯片选用东芝16位移位寄存器,3个级联达48位并口输出,512个LED使用16*32矩阵接法。

目录1 准备篇 1.1设计框架 1.2 主芯片选型 1.3 所需工具材料 2设计篇 2.1 电路设计 2.2 程序设计 2.3辅助工具设计 3 完善篇 3.1 迭代 3.2 功能扩展

1 准备篇 光立方,由若干个LED以立方体的形式搭建而成。最常见的为8*8*8(512个LED),8阶光立方,也叫cube8。当灯按照一定的规则依次变换点亮的时候,可以产生十分唯美的灯光效果图,现在大多随着动感的音乐节奏一起变化,声色交错, 让人赏心悦目。 1-1光立方(蓝光)——cube8效果图 1.1 设计框架 第一个需要思考的问题是:如何连接这512个灯?有个前提条件需要满足:每个灯都必须可以单独点亮。那么,任何两个灯都不可以串联。最直接的办法是并联这512个灯,共阳或者共阴,然后提供512个输出。但这样做至少有两个非常大的缺点:首先,一般情况下无论是MCU、ARM、FPGA都无法提供这么多输出位,即使是使用多个16位移位寄存器,那么也需要32个,这无论在成本还是在实际焊接都十分不划算;其次,就算512个输出位不是问题,因为是立方体形式,线路之间会存在互相遮挡,所以,必须要求连接线路最少,显然,直接并联是最傻的情况。 现在把问题转换成一个求解题:试求512个灯的最少连接线路,要求每个灯可以单独点亮?这实际是一个求最优解(极值)问题。回想一个几何问题,在确定面

光立方呼吸灯程序

#include #define uint unsigned int #define uchar unsigned char int i=0; uchar code table[]={ 0,0,1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18, 19,20,21,22,23,24,25,26,27, 28,29,30,31,32,33,34,35,36, 37,38,39,40,41,42,43,44,45, 46,47,48,49,50,51,52,53,54, 55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80,81,82, 83,84,85,86,87,88,89,90,91, 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109, 110,111,112,113,114,115,116,117,118,119,120,121,122,123,124}; void delay(uint z) { uint x,y; for(x=15;x>0;x--) for(y=z;y>0;y--); } void light1(uchar num1) { uchar j; P2=0xff; P1=0x00; P2=0x00; j = table[num1]; delay(j); P2=0xff; P1=0xff; P2=0x00; delay(126-j); } void light2(uchar num2) { uchar j; P2=0xff; P1=0xff; P2=0x00;

444光立方电路图及程序

3.1单片机资源分配情况 将4*4*4的LED光立方分层4层,分别由单片机的P1.0,P1.1,P1.2,P1.3,四个口来控制每一层,且给低电平有效,再有P0口和P1的总共16个口来控制16列,给高电平有效,P0和P1口加上位排阻,再给每一列加三极管放大,三极管的基极接单片机的P0和P1口,集电极接5V电源,发射极接每一列。这样就可以通过控制每个口的输出信号来控制每个的亮灭。 3.2复位电路 通过某种方式,是单片机内部各类寄存器的值变为出事状态的操作称为复位。单片机的复位是通过外部电路来实现的,复位引脚RET通过一个施密特触发器与复位电路相连接,施密特触发器用作噪声抑制,伟哥机器周期的S5P2时刻,复位电路采样一次施密特输出电平,获得内部复位操作所需要的信号。单片机的时钟电路正常工作后,CPU在RET/VPD引脚上连续采集到两个机器周期的高电平后就可以完成复位操作了,但实际应用时,复位电平的脉冲宽度一般大于1ms。复位电路通常采用上电复位、手动按键复位和看门狗复位三种方式,本次采用的是上电复位方式。 3.3时钟电路 单片机的各个功能部件的运行都是是时钟控制信号为基准,一拍一拍的工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机

系统的可靠性和稳定性。常用的时钟电路设计为内部时钟方式,单片机内部有一个由反向放大器构成的震荡电路,芯片上的XTAL1和XTAL2分别为震荡电路的输入和输出端。只要在这两个引脚上接一个石英晶体振荡器和两个微调电容就构成内部方式的振荡器电路,有振荡器产生自激振荡,便构成一个完整的震荡信号发生器。 一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。本系统的C1、C2的值为33pf。 单片机在工作时,有内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,f表示。图2中的时钟频率为12MHz,即f=12MHz,则时钟周期为1/12us。 附注: 三极管可以不接,只是会影响光源亮度。 3.4系统的工作原理图 光立方一、二层:

基于单片机的光立方设计 (含程序 原理图 实物图)

目录 第一章绪论 (1) 1.1 课题的背景 (1) 1.2 研究目的和意义 (1) 1.3 论文研究内容与结构安排 (1) 第二章总体设计 (1) 2.1 工作原理 (2) 2.2 各模块方案选择与论证 (2) 2.2.1 单片机主控制模块 (2) 2.2.2 驱动模块 (2) 2.2.3 显示模块 (2) 第三章系统硬件电路设计与实现 (3) 3.1 硬件电路设计 (3) 3.2 单片机最小系统 (3) 3.2.1 时钟电路 (3) 3.2.2 P0 口外接上拉电阻 (3) 3.3 驱动模块的设计 (3) 3.4 光立方整体设计思路 (9) 3.4.1 LED灯排序方式设计 (2) 3.4.2 LED灯接法方式设计 (2) 3.5 光立方搭建方法 (2) 3.5.1将LED从点到线的搭建 (2) 3.5.2将LED从线到面的搭建 (2) 3.5.3将LED从面到体的搭建 (2) 第四章系统软件设计 (3) 4.1 主程序设计 (2) 第五章系统调试及结果分析 (10) 5.1 系统调试 (10) 5.1.1. 硬件测试 (10) 5.1.2. 软件测试 (11) 5.2 结果分析 (11) 第六章结论 .............................................. 错误!未定义书签。参考文献 . (13) 英文摘要 (13) 致谢语 (13) 附录 ..................................................................... I 1、实物图 (16) 2、系统原理图 (17) 程序清单 (17)

光立方红外遥控程序源码

/**********************************************黎明途电子*********************************************************** */ /**********************************************红外遥控器测试程序*******************************************/ /*拨轮按键左显示心形拨轮按键中全亮显示拨轮按键右单层向上动态*/ #include #define uchar unsigned char #define uint unsigned int char data menu,out,amenu,bb,num,cheng; //menu按键左,out按键右, amenu按键中, bb延时变量, num频谱显示,cheng行扫描变量, uchar data buffer[8]; //光立方显示一层的数据暂存数组 /*定义管脚定义单片机用于发送数据给74HC595引脚和数据移位控制*/ sbit SH_CP = P3^4; //SCK sbit ST_CP = P3^3;//RCK sbit DS = P3^5;//SER sbit CH340 = P0^3;//SE sbit SH_CP2 = P2^6; //SCK2 sbit ST_CP2 = P2^5;//RCK2

sbit DS2 = P2^3;//SER2 sbit RR=P3^6;//红 sbit GG=P2^2;//绿 sbit BB=P2^4;//蓝 sbit ABL=P4^3;//亮度 sbit k1=P0^4;//播放、暂停 sbit k2=P0^5;//音量减 sbit k3=P0^6;//音量加 bit receive_sta=0; //接受状态,表示数据是否接受完成sbit IRIN = P3^2; //红外接收器数据线 void IRdelay(char x); //x*0.14MS unsigned char IRCOM[7]; /********************************************************** *********/ /********************************************************** *********************************************************** *****************/ uchar code display1[8][8]={ //图形1 全亮模式 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第1层 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第2层

3DLED光立方设计

3DLED光立方设计 目录 一、摘要 (1) 二、关键字 (1) 三、引言 (2) 四、正文 (2) (一)、主要元件介绍 (3) 1、STC12C5A60S2 (3) 2、74HC573 (3) 3、ULN2803 (4) (二)、工作原理 (5) 1、驱动模块原理 (6) (三)、元器件选择 (7) (四)、制作、调试 (8) 1、制作 (9) 2、调试 (11) 五、结束语 (13) 六、参考文献 (12) 七、附录(程序) (13)

光立方 一、摘要: 本设计采用8*8*8 的模式,硬件主要分为三个模块:主控模块、驱动模块、显示模块。采用的主控芯片为STC12C5A60S2 芯片,驱动电路是采用我们常用74HC573数字芯片。数组 OUT[0]代表光立方从第一层 D0 到第八层 D0 的数据,以此类推数组 OUT[1] 代表光立方从第一层 D1 到第八层 D1 的数据。本设计采用C语言编程,利用单片机控制LED的亮灭,采用延时控制LED亮灭时间,最终使得整个立体展现不同的造型和图案,使其变得美轮美奂、绚丽多彩。 二、关键字: LED光立方,74HC573,STC12C5A60S2,ULN2803 三、引言: 光立方是由四千多棵光艺高科技“发光树”组成的,在2009年10月1日天安门广场举行的国庆联欢晚会上面世,这是新中国成立六十周年国庆晚会最具创意的三大法宝之首,自从国庆60周年联欢晚会开始演练后,一个全新的名词“光立方”,吸引了全国人民的关注。国庆联欢晚会三样法宝,光立方为最,“光立方”在气势和整体感觉上,融合了北京奥运会开幕式“击缶而歌”和“活字印刷”的风格,而各种图案则与贯穿奥运会开幕式的“画卷”有异曲同工之妙。“光立方”可以根据爱国歌曲的不同内容,展示不同的造型和图案,具有丰富的视觉效果。 四、正文 (一)主要元件介绍: 1、STC12C5A60S2 STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。 1)增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051 2)工作电压:STC12C5A60S2系列工作电压:5.5V- 3.3V(5V单片机) 3)工作频率范围:0 - 35MHz,相当于普通8051的0~420MHz 4)应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节 5)片上集成1280字节RAM 6)外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿 中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,

光立方设计电路原理图

光立方设计电路原理图 7月的时候,做出了光立方,在杂志、网络发布以来,广受好评,这段时间来,收到很多网友的建议,因此决心把原有的光立方硬件升级,让电路更简单,程序更简洁,以前的设计是由16个IC驱动的,好处是有可切换的坐标系(详见《无线电》杂志第十期),但16个IC和128根连接线的工作量实在不小,虽然控制程序只有60多行,但硬件的复杂让很多初学者望而却步。 一直以来,我都在思考做什么样的设计给大家,就拿光立方来说,为了程序的简洁、易于理解,我的硬件电路不同于美国的原版设计,也因为8位单片机的局限性,这也是当时我能想到最好的解决方案。程序的简化是硬件的复杂弥补的。可是工作室的这种设计行吗?就效果而言是可行的,后来很多网友都仿做了出来,可我觉得不行。美国原版的设计电路要比我的简单,那么有没有硬件更简单且程序更短的?抱着这种想法,我在11月初开始了设计,一周的时间,竟然完成了。 现在的光立方,硬件更简单,只有5个IC控制,不想用245的可以去掉,改为4个IC控制。这样硬件电路焊接比起之前的设计,大为简化,连接线也由以前的128根改为72根(和美国原作一样)。控制端口也有以前的三组改为2组16个。程序不但没有加长,反而更加简短。也不需要外接电源,USB供电即可。我实物用的是手机充电器供电,5V500ma,效果很好。这次的改进,唯一的缺点就是失去了可切换的坐标系,程序虽然简单,但需要一段时间理解。接下来就是秉承工作室传统,开始图文解说。 因为改了硬件,动画代码应该也做修改的,以为工作繁忙,就没时间做这部分了,所以大家看到的图案是与之前比,是上下颠倒的,有耐心的同学自己可以修改动画字符,每行的动画字符左右对称调换位置即可。这次的视频里,我特意修改的动画切换时间,而且这次也用的是非增强型单片机,就是想证明下,8位非增强型单片机,一样可以有这种效果,之前有网友评论说速度不够快,估计是没看程序就这么说了。 先是原理图(点击看高清源图):

光立方毕业设计

基于STC12C5A60S2的光立方设计 【摘要】本次设计使用512个LED灯制作8*8*8的LED立方体,命名为光立方。采用 STC12C5A60S2芯片作为主控,8个74HC573锁存器和一个ULN2803芯片扩展I/O口,作为外围控制。通过编程控制I/O口,点亮指定的LED灯,使得显示不同的画面。8*8*8光立方因点亮LED灯将会形成各种图形,如爱心、数字、雨滴、正方体等十几种画面。整个立体呈现不同的造型和图案,动画衔接完美,使其变得美轮美奂、绚丽多彩,立体感十足。此外,我们还可以外接音频输入,通过AD采样,快速傅里叶变换FFT,可以让光立方显示音频频谱。经过系统测试,最终达到设计要求。 【关键词】光立方 STC12C5A60S2 74HC573 ULN2803 Based on STC12C5A60S2 of the Light Cube Design 【Abstract】:The 8*8*8 LED cube is made of 512 LED lights,named Light Cube which used STC12C5A60S2 as main control chip,it has 8 74HC573 latches extended I/O ports,and a ULN2803 chip as out control. Through programming control I/O port, the LED light. 8 * 8 * 8 cubic light for light leds will form a variety of graphics, such as love heart,numbers,rain,cube and so on. animation, cohesion is perfect, stereo sense is dye-in-the-wood. In addition, we also can external audio input, through the AD sampling, fast Fourier transform FFT, can let light cube display audio spectrum. After the system test, finally to meet the design requirements. 【Keywords】:The Light Cube STC12C5A60S2 74HC573 ULN2803

北京理工大学-2016版学术型研究生培养方案(2017年修订)-软件工程

北京理工大学2016版学术型研究生培养方案 学科专业:软件工程 学科代码:083500 软件工程 (083500) 一、学科简介与研究方向 北京理工大学软件工程一级学科设立于2011年,2012年开始招生,是国内首批设立的软件工程一级博士学科授权点。软件工程是软件产业和信息产业的支撑学科,也是国家文化科技发展的重要支撑技术,科学研究、工程实践和交叉应用是其学科特性;物联网、云计算、海量数据、智能科学、数字媒体等领域的快速发展为软件工程学科发展提供了广阔空间。 培养单位主要依托软件学院、计算机学院,相关学科是计算机科学与技术和网络空间安全。软件学院是2001年12月经国家教育部和国家发展计划委员会批准的35所国家示范性软件学院之一,于2003年10月通过教育部组织的中期评估,2006年6月通过教育部组织的验收。软件学院经过15年的建设,在教学科研等方面取得了显著的成绩,形成了较为鲜明的特色,进入了国内一流软件学院前列。 软件学院设有1个系和4个研究所(软件工程系、软件理论研究所、软件安全研究所、数据科学研究所和数字媒体研究所),2个中心(北京市数字媒体技术实验教学示范中心、北京理工大学软件评测中心)、6个学科平台(软件工程教育部特色专业实验室、数字媒体教育部特色专业实验室、信息安全教育部特色专业实验室、数字表演与仿真技术北京市重点实验室、软件安全工程技术北京市重点实验室、网络信息安全国防科技工程中心)。 软件学院拥有一支学术造诣高、教学和软件开发经验丰富的专兼职相结合的教师队伍,现有专兼职教师100余人,校内专职、校内兼职及企业兼职教师的比例约为4:3:3。专职教师以青年教师为主,具有博士学位的教师达到3/4,具有国外进修、攻读学位等经历的教师超过50%,具有微软、IBM、CISCO、SAP等公司技术培训教师资格的超过50%。 近年来,软件学院以特色专业和交叉学科为依托,先后承担了北京奥运会、残奥会开闭幕式全景式智能编排与仿真系统、国庆60周年群众游行辅助训练和行进指挥系统、国庆60周年焰火晚会(光立方)智能编排系统、以及北京奥运会、残奥会和国庆60周年、上海世博会、广州亚运会安保系统等多项国家级重大项目,科研经费位居全国示范性软件学院前列。 依托重大科研项目,软件工程学科形成了自己的4个二级学科方向:软件理论、软件安全、数据科学和数字媒体。 1.软件理论:研究软件工程形式化方法、软件自动生成与演化、软件建模与分析,以及大规模复杂信息系统开发方法论等问题,突出软件工程的基础研究特色。 2.软件安全:研究面向软件代码的安全性保障、软件安全可信性评估、基于构件的软件安全性测试、嵌入式软件系统安全等技术内容,以及在国防信息安全领域、产学研一体化平台建设和服务社会等方面的应用,突出软件工程的安全攻防对抗特色。 3.数据科学:研究面向服务的计算、服务工程、网络搜索服务,以及面向服务架构的应用研发、基于智能化数据挖掘的技术监测分析等理论和应用问题,突出软件工程的软件即服务特色。 4.数字媒体:研究人群建模与仿真、交互媒体与可视化、数字表演、工程仿真与计算、智能媒体与量子仿真等,突出软件工程的文化创新特色。

相关文档
最新文档