888光立方程序Word格式.docx
《888光立方程序Word格式.docx》由会员分享,可在线阅读,更多相关《888光立方程序Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
ucharcodedat3[24]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x50,0x40,0x30,0x20,0x10};
/*3pchar*/
ucharcodetable_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};
/*initializtion
Thatistoinitializetheprogram.
Itiswritetosetthetimerinc52mcu.
Sotheprogramcanrenovatetheled_3d_cubeinfixedtimeusetheinterruptfunction.*/
voidsinter()
{
IE=0x82;
TCON=0x01;
TH0=0xc0;
TL0=0;
TR0=1;
}
voiddelay5us(void)//误差-0.026765046296usSTC1T22.1184Mhz
unsignedchara,b;
for(b=7;
b>
0;
b--)
for(a=2;
a>
a--);
voiddelay(uinti)
{
while(i--){
delay5us();
}//12t的mcu注释这个延时即可
/*Tojudgethenumbit*/
ucharjudgebit(ucharnum,ucharb)
charn;
num=num&
(1<
<
b);
if(num)
n=1;
else
n=0;
returnn;
/*Tofigureouttheroundnumber*/
ucharabs(uchara)
ucharb;
b=a/10;
a=a-b*10;
if(a>
=5)
b++;
returnb;
/*Tofigureouttheabsolutevalue*/
ucharabss(chara)
if(a<
0)
a=-a;
returna;
/*Thefunctioncancomparatthecharacter.
Andremovethebigonetotheback.*/
voidmax(uchar*a,uchar*b)
uchart;
if((*a)>
(*b))
{
t=(*a);
(*a)=(*b);
(*b)=t;
}
/*Thefunctionistofigureoutthemaxnumberandreturnit.*/
ucharmaxt(uchara,ucharb,ucharc)
b)
a=b;
c)
a=c;
voidclear(charle)
uchari,j;
for(j=0;
j<
8;
j++)
for(i=0;
i<
i++)
display[j][i]=le;
voidtrailler(uintspeed)
chari,j;
for(i=6;
i>
=-3;
i--)
if(i>
=0)
display[j][i]=display[j][i+1];
if(i<
4)
display[j][i+4]=0;
delay(speed);
voidpoint(ucharx,uchary,ucharz,ucharle)
ucharch1,ch0;
ch1=1<
x;
ch0=~ch1;
if(le)
display[z][y]=display[z][y]|ch1;
else
display[z][y]=display[z][y]&
ch0;
voidtype(ucharcha,uchary)
ucharxx;
for(xx=0;
xx<
xx++)
display[xx][y]=table_cha[cha][xx];
/*Thefirstvariableisthedistancefromthemidpoint.
Thesecondisthelayer.
thethirdistheflashspeedofthetimebetweeneachtwopoint.
Theforthistheenableio,itcontrolsweatherdraworclaen.*/
voidcirp(charcpp,uchardir,ucharle)
uchara,b,c,cp;
if((cpp<
128)&
(cpp>
=0))
if(dir)
cp=127-cpp;
cp=cpp;
a=(dat[cp]>
>
5)&
0x07;
b=(dat[cp]>
2)&
c=dat[cp]&
0x03;
if(cpp>
63)
c=7-c;
point(a,b,c,le);
voidline(ucharx1,uchary1,ucharz1,ucharx2,uchary2,ucharz2,ucharle)
chart,a,b,c,a1,b1,c1,i;
a1=x2-x1;
b1=y2-y1;
c1=z2-z1;
t=maxt(abss(a1),abss(b1),abss(c1));
a=x1*10;
b=y1*10;
c=z1*10;
a1=a1*10/t;
b1=b1*10/t;
c1=c1*10/t;
t;
point(abs(a),abs(b),abs(c),le);
a+=a1;
b+=b1;
c+=c1;
point(x2,y2,z2,le);
voidbox(ucharx1,uchary1,ucharz1,ucharx2,uchary2,ucharz2,ucharfill,ucharle)
uchari,j,t=0;
max(&
x1,&
x2);
y1,&
y2);
z1,&
z2);
for(i=x1;
=x2;
t|=1<
i;
if(!
le)
t=~t;
if(fill)
if(le)
for(i=z1;
=z2;
for(j=y1;
=y2;
display[j][i]|=t;
display[j][i]&
=t;
display[y1][z1]|=t