2021年3D8光立方制作
- 格式:doc
- 大小:1.27 MB
- 文档页数:28
摘要之前在网上看了一些光立方的演示视频,被它那些立体感吸引了。
想到自己学单片机也这么久了,于是乎就想做一个玩玩,同时可以复习一学期以来自己的编程能力和动手的能力,一举两得是一件很不错的事情。
向朋友要了一些资料,就开工了。
光立方顾名思义就是一个立方体,采用的是8*8*8的模式,整个立方大概是16cm*16cm*18cm(长.宽.高)的样子,主要分为三个模块:主控模块、驱动模块、显示模块;我所做的光立方,主控电路采用的主控芯片是STC12C5A60S2芯片,驱动电路是采用我们常用的74HC573数字芯片,以及ULN2803达林顿管。
关键字:光立方 74HC573 STC12C5A60S2 ULN2803电路原理图:图1.电路原理图元件的选择:(1)由于光立方的程序量比较大,而且要求相对比较高,因此经过考虑之后我们决定用51系列的增强型芯片STC12C5A60S2,选择的理由:1.无法解密,采用第六代加密技术;2.超强抗干扰;3.内部集成高可靠复位电路,外部复位可用可不用;4.速度快,比8051快8-12倍;(2)由于灯的个数比较多,因此所需要的电流相对也比较大,所以选择ULN2803,ULN2803是八重达林顿,1 至8脚为8路输入,18 到11脚为8路输出。
驱动能力500MA \50V。
应用时9脚接地,要是驱动感性负载,10脚接负载电源V+。
输入的电平信号为0,或5V。
输入0是,输出达林顿管截止。
输入为5V电平时,输出达林顿饱和。
输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作;(3)由于在刚刚接触锁存器的时候,就接触了74HC573,对它的使用也比较成熟,因此在驱动部分使用了熟悉的74HC573,其优点有:1.高阻态;就是输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出;2.数据锁存;当输入的数据消失时,在芯片的输出端,数据仍然保持;3.数据缓冲; 加强驱动能力;(4)LED灯的选择,出于外观和整体的形状美观,个人推荐雾面蓝光方型LED。
单片机采用stc90c516,最小系统部分电路板已经省略,相应的,单片机的P0口,接电路图中标示为“P2”的插头上,而单片机上P2口接到电路图中标示为“P1”的接口上有坛友说杜阳的东西,有点专业的都知道,硬件构架不同,至于动画,我使用另一套原理实现了和他相同的动画,至于动画这部分,看得懂代码的人,都知道如何去改动画,很随意。
我也承认,我以前见过杜阳的作品。
大家有兴趣先制作,如果制作好了,我再继续写如何编写属于自己的动画。
最近我要去定制电路板,如果有兴趣,可以以成本价给大家出几块原理部分很早以前,就有相关的视频资料,在国内各大视频网站出现,样式绚丽,也一直有很多玩家想放置,对于这个东西来说,本身技术不是很复杂,也不是很简单,更多的是需要耐心。
下面我就来详解一下如何打造一个属于自己的光立方。
拿8*8*8的光立方来说:我们可以拆分为8个面每个面64个灯;我只要控制这64个灯使其能够自由变换,然后再通过控制每个层依次点亮即可,由于我们眼睛的视觉暂留,使我们感觉看到的东西是一起再亮的。
这样我们就看到了一个完整的个体。
理解了原理;我们来设计电路;大家都知道,如果要控制8*8点阵,需要16个引脚,那么有8个8*8点阵,我再用8个引脚来当充当各个8*8点阵的“开关”即可。
那么我们的电路设计的基本原理知道了。
如何让一个引脚来当64个灯的“总开关”呢?只要将64个灯阳极或阴极连在一起,在连到这个引脚上即可。
那么如何用16个引脚来控制这64个灯的另外64个引脚呢?我采用了hc573暂存的方法,来分别把64个灯的亮灭信息存到这个上面,然后再一起输出到灯上,这样我们通过查询相应芯片的型号可以确定基本电路。
电路部分573的64个输出引脚控制前面所述每一个面的64个灯;而uln2008控制的每一个层。
同时要注意每个573输出的引脚对应的按顺序的x轴的8个引脚。
这样做完全了后期编写程序方便。
因为我们的动画是实时运算的,而且我所采用的紧紧是stc89c52系列单片机,它本身的运算速度有限。
先上效果图首先,准备材料和工具。
材料:1, 雾面蓝色(喜欢其他色的随意)LED (3MM 或者5MM 都行),最好是雾面LED ,不懂得购买的时候跟老板说清楚就ok~2,STC12C5A60S2单片机一片3,DIP-40的插座一个4,22.1184MHZ晶振一个5,单排圆孔插针座20个(建议多准备些)6,单排插针4个7,USB母座一个8,0.3--0.8镀锡铜线一米左右,没有的也行,根据自己的焊接习惯。
个人比较喜欢镀锡铜线。
工具1,剪线钳2,尖嘴钳3,电烙铁4,焊丝5,松香6,镊子7,其他(总之就是焊接用的那些了,根据个人情况。
)———————————分割线———————————首先,电路图很简单了电路图很简单,稍微有点单片机基础都可以做。
然后呢,开动你灵活的小左和小右吧~准备绘制焊接图纸。
首先,确定你要做多大尺寸的光立方,4*4*4也就是64个灯,个人感觉做成7厘米见方左右就差不多了。
根据个人喜好调节吧~大小具体怎样确定呢,二少在这里简单说明一下,每一边是4个灯,也就是三个灯距,灯距的三倍加两个灯宽就是边长了。
灯距的确定,不是随便确定的,必须是2.54毫米的整数倍,为什么呢,因为洞洞板的孔距就是2.54,最后的灯是插在洞洞板上的。
本教程所定的灯距是4倍的孔距,也就是10毫米挂点,小误差这里就可以忽略了。
OK~根据灯的情况,确定洞洞板的大小,最少得是20孔,因为单片机用的是DIP40的,所以至少要保证单片机可以安装,当然高手还可以立式安装单片机,二少在这里就不多介绍了。
确定以上参数后,好了,开始制作吧~我这边手头有的洞洞板是19*23孔的,所以嘛~单片机就有俩引脚是悬空的,不过不影响。
焊接电路,(绘制软件,layout)然后,确定单片机和LED灯体的安装位置。
并做简单标注。
用尖嘴钳把插针掰成一个一个的,直接焊接于绿色的焊盘位置,4*4+4个。
如下图效果单片机最好安装在座子上,直接焊接死亡率较高。
光立方制作过程
制作人:HY
先来一张制作完的的图
网上的电路图
我做的电路图
没有接锁存器和三极管来电流大不过结果一样
第一步搭光立方搭架子
把方形的led折成这个形状
把正极的引脚弯下来
在纸盒子上打四个洞我是打多了的
把弯好的led插入里面焊接这样整齐点
焊接后的样子
在这样竖着焊接
这样焊接好一面,要焊四面
把焊接好的四面插在万能板上,把每一层连接上
这样光立方架子就搭好了
再在万能板上焊好单片机最小系统,我是采用usb口供电的
像这样每一层接在单片机的P0口的0, 1, 2, 3上紫色把每一列分成两部分接在单片机的P1口和P2口上红色
像这样每一列接单片机对应的引脚
看几张效果图
希望我的过程能给大家带来帮助
你有一个苹果,我有一个苹果,我们交换一下,还是一个苹果.你有一个思想,我有一个思想,我们交换一下,就有两个思想.
在电子学习中希望大家多分享自己的制作
不要闭门造车,也不要一味的索取.
一个人的能力有限,多把自己的成果分享出来
这在国际上叫“开源”
我希望在这个想法能在我们之中流传下去.
这仅仅是个人的想法.
谢谢大家的观看^_^。
3D光立方的设计与制作【摘要】本文主要介绍了3D光立方的设计思路和制作流程,3D光立方采用了8X8X8共计512个LED组成的阵列,本次设计制作一个三维的发光二极管立方显示体,能够通过编写程序来实现对每一个LED亮和灭的控制,从而可以显示多种多样的图案,具有很高的观赏性,通过制作3D光立方,能提高动手设计能力和对电路的分析能力。
【关键词】3D光立方;电路制作;LED1.背景与意义随着人们生活水平的不断提高,3D效果的欣赏已经成了人们的追求,美轮美奂的观赏让人醉心不已,给人带来无比宽松舒适的美感。
3D技术已进应用于教学,医学,地下采矿,空中导航等领域。
但就目前的发展,3D还不能够普及到人们的生活中,这也就萌发了人们对于3D的设计。
本次设计制作一个三维的发光二极管立方显示体,能够通过编写程序来实现对每一个LED亮和灭的控制,从而可以显示多种多样的图案。
因此,对发光二极管进行控制,使其显示出不同的花样,带给未来3D技术的科技体验。
2.系统电路设计本电路设计大体上可以分电源、处理系统、输出显示、输入控制四部分组成。
其结构框图如图1所示。
图1 3D光立方电路设计框图电源供电部分采用一块集成稳压器CW7805,把市电经变压器降压输入电路,而后整流送到稳压器稳压输出作为工作电压。
不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠。
输入控制部分采用按键开关,主要用于切换不同的显示模式。
单片机控制电路是该系统的核心部分,主要控制着LED灯的显示间隔、方式、变换等。
输出控制采用74HC573芯片作为控制光立方的I\O口扩展芯片,以拓展单片机的输出口,采用动态显示模式,按照图文运动的特点又可以分为闪烁、平移、旋转、缩放等多种显示模式。
可以通过一定的算法从原来的显示数据直接生成,再结合输出控制电路,这样程序书写就不会过于繁琐和重复,而且对核心控制器的内存空间要求不高。
LED显示阵列是由8X8X8共计512个LED组成光立方显示屏。
3D cube 光立方制作详解原理部分LED立方体是一个非常受欢迎的项目,而大小可以从3x3x3上升到10x10x10采用RGB LED。
很早以前,就有相关的视频资料,在国内各大视频网站出现,样式绚丽,也一直有很多玩家想做,对于这个东西来说,本身技术不是很复杂,也不是很简单,更多的是需要耐心。
本资料详细介绍了3D CUBE8 (LED立方体)的制作过程,通过本资料可轻松打造一个属于自己的光立方。
下面我就来详解一下如何打造一个属于自己的光立方。
拿8*8*8的光立方来说:我们可以拆分为8个面每个面64个灯;我只要控制这64个灯使其能够自由变换,然后再通过控制每个层依次点亮即可,由于我们眼睛的视觉暂留,使我们感觉看到的东西是一起再亮的。
这样我们就看到了一个完整的个体。
理解了原理;我们来设计电路;大家都知道,如果要控制8*8点阵,需要16个引脚,那么有8个8*8点阵,我再用8个引脚来当充当各个8*8点阵的“开关”即可。
那么我们的电路设计的基本原理知道了。
如何让一个引脚来当64个灯的“总开关”呢?只要将64个灯阳极或阴极连在一起,在连到这个引脚上即可。
那么如何用16个引脚来控制这64个灯的另外64个引脚呢?我采用了hc573暂存的方法,来分别把64个灯的亮灭信息存到这个上面,然后再一起输出到灯上,这样我们通过查询相应芯片的型号可以确定基本电路。
电路部分立方体的控制器是基于一个单片机ATMega32,573的64个输出引脚控制前面所述每一个面的64个灯;而场效应管控制每一个层,一般的都是用uln2803.焊接部分这里需要说的是,一定注意每个灯的焊接时间,和焊接整齐度,焊接整齐度直接影响整个制作效果。
每一层的二极管是共阴的。
我的方法是用一个木头板按照规则,扎64个孔然后把灯放到上面,一个一个焊接起来这样可以保障每一层的灯位置都是一样的而且各个灯之间排列是规则的。
最后通过架设支撑架的方式把各个层架起来,然后用电烙铁焊接起来。
#include <REG52.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar 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,0x 18,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x3 0,0x38,0x3c,0x3e,0x36,0x7e,0x30,0x30,0x3c,0x3c,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0xff,0x ff,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,0x 27,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,0 xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc 9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0 xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0 x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd, 0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa 0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14 ,0x10,0xc,0x8,0x4};/*railway 2*/uchar code dat2[28]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0 xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};/*railway 3*/uchar codedat3[24]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x65,0x64,0x 63,0x62,0x61,0x60,0x50,0x40,0x30,0x20,0x10};/*3p char*/uchar code table_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0 x0e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};/*initializtionThat is to initialize the program .It is write to set the timer in c52 mcu.So the program can renovate the led_3d_cube in fixed time use the interrupt function.*/void sinter(){IE=0x82;TCON=0x01;TH0=0xc0;TL0=0;TR0=1;}void delay5us(void) //误差-0.026765046296us STC 1T 22.1184Mhz{unsigned char a,b;for(b=7;b>0;b--)for(a=2;a>0;a--);}void delay(uint i){while (i--){delay5us();}//12t的mcu 注释这个延时即可}/*To judge the num bit*/uchar judgebit(uchar num,uchar b){char n;num=num&(1<<b);if (num)n=1;elsen=0;return n;}/*To figure out the round number*/uchar abs(uchar a){uchar b;b=a/10;a=a-b*10;if (a>=5)b++;return b;/*To figure out the absolute value*/uchar abss(char a){if (a<0)a=-a;return a;}/*The function can comparat the character.And remove the big one to the back.*/void max(uchar *a,uchar *b){uchar t;if ((*a)>(*b)){t=(*a);(*a)=(*b);(*b)=t;}}/*The function is to figure out the max number and return it.*/ uchar maxt(uchar a,uchar b,uchar c)if (a<b)a=b;if (a<c)a=c;return a;}void clear(char le){uchar i,j;for (j=0;j<8;j++){for (i=0;i<8;i++)display[j][i]=le;}}void trailler(uint speed){char i,j;for (i=6;i>=-3;i--){if (i>=0){for (j=0;j<8;j++)display[j][i]=display[j][i+1];}if (i<4){for (j=0;j<8;j++)display[j][i+4]=0;}delay(speed);}}void point(uchar x,uchar y,uchar z,uchar le){uchar ch1,ch0;ch1=1<<x;ch0=~ch1;if (le)display[z][y]=display[z][y]|ch1;elsedisplay[z][y]=display[z][y]&ch0;}void type(uchar cha,uchar y){uchar xx;for (xx=0;xx<8;xx++){display[xx][y]=table_cha[cha][xx];}}/*The first variable is the distance from the midpoint.The second is the layer.the third is the flash speed of the time between each two point. The forth is the enable io,it controls weather draw or claen.*/ void cirp(char cpp,uchar dir,uchar le){uchar a,b,c,cp;if ((cpp<128)&(cpp>=0)){if (dir)cp=127-cpp;elsecp=cpp;a=(dat[cp]>>5)&0x07;b=(dat[cp]>>2)&0x07;c=dat[cp]&0x03;if (cpp>63)c=7-c;point (a,b,c,le);}}void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le) {char t,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;for (i=0;i<t;i++){point(abs(a),abs(b),abs(c),le);a+=a1;b+=b1;c+=c1;}point(x2,y2,z2,le);}void box(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le) {uchar i,j,t=0;max(&x1,&x2);max(&y1,&y2);max(&z1,&z2);for (i=x1;i<=x2;i++)t|=1<<i;if (!le)t=~t;if (fill){if (le){for (i=z1;i<=z2;i++){for (j=y1;j<=y2;j++)display[j][i]|=t;}}else{for (i=z1;i<=z2;i++){for (j=y1;j<=y2;j++)display[j][i]&=t;}}}else{if (le){display[y1][z1]|=t;display[y2][z1]|=t;display[y1][z2]|=t;display[y2][z2]|=t;}else{display[y1][z1]&=t;display[y2][z1]&=t;display[y1][z2]&=t;display[y2][z2]&=t;}t=(0x01<<x1)|(0x01<<x2);if (!le)t=~t;if (le){for (j=z1;j<=z2;j+=(z2-z1)){for (i=y1;i<=y2;i++)display[i][j]|=t;}for (j=y1;j<=y2;j+=(y2-y1)){for (i=z1;i<=z2;i++)display[j][i]|=t;}}else{for (j=z1;j<=z2;j+=(z2-z1)){for (i=y1;i<=y2;i++){display[i][j]&=t;}}for (j=y1;j<=y2;j+=(y2-y1)){for (i=z1;i<=z2;i++){display[j][i]&=t;}}}}}void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le){uchar i;max(&z1,&z2);if (fill){for (i=z1;i<=z2;i++){line (x1,y1,i,x2,y2,i,le);}}else{line (x1,y1,z1,x2,y2,z1,le);line (x1,y1,z2,x2,y2,z2,le);line (x2,y2,z1,x2,y2,z2,le);line (x1,y1,z1,x1,y1,z2,le);}}void poke(uchar n,uchar x,uchar y){uchar i;for (i=0;i<8;i++){point(x,y,i,judgebit(n,i));}}void boxtola(char i,uchar n){if ((i>=0)&(i<8)){poke(n,0,7-i);}if ((i>=8)&(i<16)){poke(n,i-8,0);}if ((i>=16)&(i<24)){poke(n,7,i-16);}}void rolldisplay(uint speed){uchar j;char i,a;for (i=23;i>-40;i--){for (j=0;j<40;j++){a=i+j;if ((a>=0)&(a<24))boxtola(a,table_id[j]);}delay(speed);}}void roll_apeak_yz(uchar n,uint speed){uchar i;switch(n){case 1:for (i=0;i<7;i++){display[i][7]=0;display[7][6-i]=255;delay(speed);};break;case 2:for (i=0;i<7;i++){display[7][7-i]=0;display[6-i][0]=255;delay(speed);};break;case 3:for (i=0;i<7;i++){display[7-i][0]=0;display[0][i+1]=255;delay(speed);};break;case 0:for (i=0;i<7;i++)display[0][i]=0;display[i+1][7]=255;delay(speed);};}}void roll_apeak_xy(uchar n,uint speed){uchar i;switch(n){case 1:for (i=0;i<7;i++){line(0,i,0,0,i,7,0);line(i+1,7,0,i+1,7,7,1);delay(speed);};break;case 2:for (i=0;i<7;i++)line(i,7,0,i,7,7,0);line(7,6-i,0,7,6-i,7,1);delay(speed);};break;case 3:for (i=0;i<7;i++){line(7,7-i,0,7,7-i,7,0);line(6-i,0,0,6-i,0,7,1);delay(speed);};break;case 0:for (i=0;i<7;i++){line(7-i,0,0,7-i,0,7,0);line(0,i+1,0,0,i+1,7,1);delay(speed);};}}void roll_3_xy(uchar n,uint speed){uchar i;switch(n){case 1:for (i=0;i<8;i++){box_apeak_xy (0,i,0,7,7-i,7,1,1);delay(speed);if (i<7)box_apeak_xy (3,3,0,0,i,7,1,0);};break;case 2:for (i=0;i<8;i++){box_apeak_xy (7-i,0,0,i,7,7,1,1);delay(speed);if (i<7)box_apeak_xy (3,4,0,i,7,7,1,0);};break;case 3:for (i=0;i<8;i++){box_apeak_xy (0,i,0,7,7-i,7,1,1);delay(speed);if (i<7)box_apeak_xy (4,4,0,7,7-i,7,1,0);};break;case 0:for (i=0;i<8;i++){box_apeak_xy (7-i,0,0,i,7,7,1,1);delay(speed);if (i<7)box_apeak_xy (4,3,0,7-i,0,7,1,0);};}}void trans(uchar z,uint speed){uchar i,j;for (j=0;j<8;j++){for (i=0;i<8;i++){display[z][i]>>=1;}delay(speed);}}void tranoutchar(uchar c,uint speed){uchar i,j,k,a,i2=0;for (i=0;i<8;i++){if (i<7)box_apeak_xy (i+1,0,0,i+1,7,7,1,1);box_apeak_xy (i2,0,0,i2,7,7,1,0);a=0;i2=i+1;for (j=0;j<=i;j++){a=a|(1<<j);}for (k=0;k<8;k++){display[k][3]|=table_cha[c][k]&a;display[k][4]|=table_cha[c][k]&a;}delay(speed);}}void transss(){uchar i,j;for (i=0;i<8;i++){for (j=0;j<8;j++)display[i][j]<<=1;}}/*From now on,the function below is to display the flash.*/void flash_1(){clear(0);type(1,0);delay(60000);type(2,0);delay(60000);type(3,0);delay(60000);type(4,0);delay(60000);delay(60000);clear(0);rolldisplay(30000);type(0,7);delay(60000);trailler(6000);delay(60000);}void flash_2(){uchar i;for (i=129;i>0;i--){cirp(i-2,0,1);delay(8000);cirp(i-1,0,0);}delay(8000);for (i=0;i<136;i++){cirp(i,1,1);delay(8000);cirp(i-8,1,0);}delay(8000);for (i=129;i>0;i--) {cirp(i-2,0,1);delay(8000);}delay(8000);for (i=0;i<128;i++)cirp(i-8,1,0);delay(8000);}delay(60000);}void flash_3(){char i;for (i=0;i<8;i++){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i<7)box_apeak_xy(0,i,0,7,i,7,1,0);}for (i=7;i>=0;i--){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i>0)box_apeak_xy(0,i,0,7,i,7,1,0);for (i=0;i<8;i++){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i<7)box_apeak_xy(0,i,0,7,i,7,1,0);}}void flash_4(){char i,j,an[8];for (j=7;j<15;j++)an[j-7]=j;for (i=0;i<=16;i++){for (j=0;j<8;j++){if ((an[j]<8)&(an[j]>=0))line(0,an[j],j,7,an[j],j,1);}for (j=0;j<8;j++){if (((an[j]+1)<8)&(an[j]>=0))line(0,an[j]+1,j,7,an[j]+1,j,0);}for (j=0;j<8;j++){if (an[j]>0)an[j]--;}delay(15000);}for (j=0;j<8;j++)an[j]=1-j;for (i=0;i<=16;i++){for (j=0;j<8;j++){if ((an[j]<8)&(an[j]>=0))line(0,an[j],j,7,an[j],j,1);}for (j=0;j<8;j++){if (((an[j]-1)<7)&(an[j]>0))line(0,an[j]-1,j,7,an[j]-1,j,0);}for (j=0;j<8;j++){if (an[j]<7)an[j]++;}delay(15000);}}void flash_5(){uint a=15000;//a=delaychar i=8,j,an[4];//1for (j=7;j<11;j++)an[j-7]=j;while(i--){for (j=0;j<4;j++){box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]<7)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]>3)an[j]--;}delay(a);}//2i=3;for (j=0;j<4;j++)an[j]=5-j;while(i--){for (j=1;j<4;j++){if (an[j]<4)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]>0)an[j]--;}delay(a);}//3i=3;for (j=1;j<4;j++)an[j]=4-j;while(i--){for (j=1;j<4;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>0)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);}for (j=1;j<4;j++){if (an[j]<3)an[j]++;}delay(a);}//4i=3;for (j=0;j<4;j++)an[j]=j+1;while(i--){for (j=1;j<4;j++){if (an[j]>3)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>3)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);}for (j=0;j<4;j++)an[j]++;delay(a);}//5i=3;for (j=3;j<6;j++)an[j-2]=j;while(i--){for (j=1;j<4;j++){box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]>3)an[j]--;}delay(a);}//6i=3;for (j=0;j<4;j++)an[j]=5-j;while(i--){for (j=1;j<4;j++){if (an[j]<4)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]<3)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]>0)an[j]--;}delay(a);}//7i=3;for (j=0;j<4;j++)an[j]=3-j;an[0]=2;while(i--){for (j=0;j<3;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>=0)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);}for (j=0;j<4;j++){if (j<5-i)an[j]--;}delay(a);}//8i=10;for (j=0;j<4;j++)an[j]=j-2;while(i--){for (j=0;j<4;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>=0)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]<7)an[j]++;}delay(a);}}void flash_6(){uchar i,j,k,z;roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);for (i=0;i<3;i++){for (j=0;j<8;j++){for (k=0;k<8;k++){if ((table_3p[i][j]>>k)&1){for (z=1;z<8;z++){point (j,7-k,z,1);if (z-1)point (j,7-k,z-1,0);delay(5000);}}}}trans(7,15000);}}void flash_7(){uchar i;uint a=3000;roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);roll_apeak_xy(2,10000);roll_apeak_xy(3,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);roll_apeak_xy(2,10000);roll_apeak_xy(3,10000);for (i=0;i<8;i++){box_apeak_xy (0,i,0,7-i,i,7,1,1);delay(a);}delay(30000);roll_3_xy(0,a);delay(30000);roll_3_xy(1,a);delay(30000);roll_3_xy(2,a);delay(30000);roll_3_xy(3,a);delay(30000);roll_3_xy(0,a);delay(30000);roll_3_xy(1,a);delay(30000);roll_3_xy(2,a);delay(30000);roll_3_xy(3,a);for (i=7;i>0;i--){box_apeak_xy(i,0,0,i,7,7,1,0);delay(a);}}void flash_8(){uchar i;for (i=5;i<8;i++){tranoutchar(i,10000);delay(60000);delay(60000);}}void flash_9(){char i;uchar j,an[8],x,y,t,x1,y1;for (i=0;i<8;i++){box_apeak_xy (i,0,0,i,7,7,1,1);if (i)box_apeak_xy (i-1,0,0,i-1,7,7,1,0);delay(10000);}roll_apeak_xy(3,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);for (i=0;i<7;i++){line(6-i,6-i,0,6-i,6-i,7,1);line(i,7,0,i,7,7,0);delay(10000);}for (i=0;i<8;i++)an[i]=14;for (i=0;i<85;i++){clear(0);for (j=0;j<8;j++){t=an[j]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[j]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;line(x,y,j,x1,y1,j,1);}for (j=0;j<8;j++){if ((i>j)&(j>i-71))an[j]++;}delay(5000);}for (i=0;i<85;i++){clear(0);for (j=0;j<8;j++){t=an[j]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[j]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;line(x,y,j,x1,y1,j,1);}for (j=0;j<8;j++){if ((i>j)&(j>i-71))an[j]--;}delay(5000);}for (i=0;i<29;i++){clear(0);t=an[0]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[0]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;box_apeak_xy(x,y,0,x1,y1,7,0,1);box_apeak_xy(x,y,1,x1,y1,6,0,1);an[0]++;delay(5000);}for (i=0;i<16;i++){clear(0);t=an[0]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[0]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;box_apeak_xy(x,y,0,x1,y1,7,1,1);an[0]--;delay(5000);}for (i=0;i<8;i++){line(i,i,0,0,0,i,0);delay(5000);}for (i=1;i<7;i++){line(i,i,7,7,7,i,0);delay(5000);}for (i=1;i<8;i++){clear(0);box(7,7,7,7-i,7-i,7-i,0,1);delay(10000);}for (i=1;i<7;i++){clear(0);box(0,0,0,7-i,7-i,7-i,0,1);delay(10000);}for (i=1;i<8;i++){clear(0);box(0,0,0,i,i,i,0,1);delay(10000);}for (i=1;i<7;i++){clear(0);box(7,0,0,i,7-i,7-i,0,1);delay(10000);}for (i=1;i<8;i++){box(7,0,0,7-i,i,i,1,1);delay(10000);}for (i=1;i<7;i++){clear(0);box(0,7,7,7-i,i,i,1,1);delay(10000);}}void flash_10(){uchar i,j,an[4],x,y,t;for (i=1;i<7;i++){clear(0);box(0,6,6,1,7,7,1,1);box(i,6,6-i,i+1,7,7-i,1,1);box(i,6,6,i+1,7,7,1,1);box(0,6,6-i,1,7,7-i,1,1);box(0,6-i,6,1,7-i,7,1,1);box(i,6-i,6-i,i+1,7-i,7-i,1,1);box(i,6-i,6,i+1,7-i,7,1,1);box(0,6-i,6-i,1,7-i,7-i,1,1);delay(30000);}for (i=0;i<4;i++){an[i]=6*i;}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,y,0,x+1,y+1,1,1,1);box(x,y,6,x+1,y+1,7,1,1);}for (j=0;j<4;j++)an[j]++;delay(10000);}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,y,0,x+1,y+1,1,1,1);box(x,y,6,x+1,y+1,7,1,1);}for (j=0;j<4;j++)an[j]--;delay(10000);}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,0,y,x+1,1,y+1,1,1);box(x,6,y,x+1,7,y+1,1,1);}for (j=0;j<4;j++)an[j]++;delay(10000);}for (i=0;i<36;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,0,y,x+1,1,y+1,1,1);box(x,6,y,x+1,7,y+1,1,1);}for (j=0;j<4;j++)an[j]--;delay(10000);}for (i=6;i>0;i--){clear(0);box(0,6,6,1,7,7,1,1);box(i,6,6-i,i+1,7,7-i,1,1);box(i,6,6,i+1,7,7,1,1);box(0,6,6-i,1,7,7-i,1,1);box(0,6-i,6,1,7-i,7,1,1);box(i,6-i,6-i,i+1,7-i,7-i,1,1);box(i,6-i,6,i+1,7-i,7,1,1);box(0,6-i,6-i,1,7-i,7-i,1,1);delay(30000);}}void flash_11(){uchar i,j,t,x,y;uchar code daa[13]={0,1,2,0x23,5,6,7,6,5,0x23,2,1,0};for (j=0;j<5;j++){for (i=0;i<13;i++){if (daa[i]>>4)。
光立方教程今天,给大家带来光立方的制作教程,基于本人制作的经验,给各位想要做的朋友分享制作过程。
对于第一次制作的朋友,我们要先制作好一个日程表,如下图:我们要弄好一个计划,就好像单片机运行程序一样。
当然,废话少说。
接下来,我们需要一份购买材料的清单如上图所示,我们需要购买的万能板需要购买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。
组装部分一,灯珠焊接最开始的金字塔,我给大家的方案是泡沫板,现在我把焊接灯珠的方式改进了,焊接速度更快、质量更好,方法如图:就是这个,用一张18X30CM的万能板,上面焊接上间距2.54的排针,用法如下图:横向的孔数是7个,纵向孔数是8个,这样焊接出来的灯珠间距就都是8个了一目了然,这样就把灯珠固定好了,如果管脚的弯折方法和我图片一样的话(朝下的是正极),那么最优的方法是从右到左,从上到下排放。
焊接我就不多说了,这个是最讲究的,虽然有这个模板焊接起来很方便,但焊锡一定要上好,否则开焊后还是很难搞的。
温度要适当,免得烧毁灯珠,一般情况下,能把焊锡刚好溶化时的温度即可。
用这种方法焊接出的点阵,要比用泡沫做模板的点阵质量更好,很少有开焊点,取下的点阵横平竖直,效率上也有了极大的提高。
焊接好的平面如图:二,灯珠组装在组装之前,先准备2张18X30cm的万能板,喷上黑色的喷漆,比较常用的那种,价格不贵,如图:再拿出个8×8的点阵,比划一下,量好裁剪的尺寸,用斜口钳剪切还是很方便的。
然后就需要给底板和侧板焊接弯排针,间距都是8个孔,朝向请自己把握,下面是我做的图:我想看了图后,大家都应该明白了,除了弯排针,还要给每个面的管脚都焊接上2.54的冷压端子,很容易的,东西也很便宜。
这样做的好处就是非常容易拆装,第一次的时候我用的是直排针,结果就很难组装,弯排针不会影响美观。
在组装之前,先要焊接底板和侧板焊接上连接线,如图:每个面都是有64根线,我用的是以前零散、没了头子的杜邦线,长度刚刚好够的,读者可以自己做线或者买成品,买成品我觉得也不贵,成品线的好处是,一端是8P的插座,另一端是裸线,直接焊接就好。
这个过程还是相当漫长的,我焊接512个灯珠用了三个下午,底板的焊接和接线同样是三个下午,可以说,老老实实的焊接的话,还是需要一周的时间的,我希望喜欢DIY的朋友们要有耐心,过程肯定是枯燥乏味的,但成功的喜悦也是难以言喻的。
基于单片机的3D8光立方设计中图分类号:G688.2文献标识码:A文章编号:ISSN1672-2051 (2020)10-017-01一、设计背景自从国庆60周年联欢晚会开始演练后,一个全新的名词“光立方”吸引了大家的关注。
光立方表演作为国庆联欢晚会最具新意的亮点之一贯穿整个晚会,它凝聚了主创者与表演者的智慧与汗水,融合了北京奥运会开幕式“击缶而歌”和“活字印刷”的风格,而各种图案则与贯穿奥运会开幕式的“画卷”有异曲同工之妙。
为喜庆的节日奉上了视觉盛宴。
二、设计意义与创新21世纪新光源,使得它越来越多地用在彩灯装饰和照明领域。
未来LED发光二极管的市场规模与应用将无限宽广,并将进入一般家庭,取代各种传统的室内外照明灯具。
LED最大的特点在于无须暖灯时间、开关次数对寿命无影响、反应速度快(约在10^-9秒)、安全而且光源控制成本低,使频繁开关成为可能,及运用于动画效果灯上的最佳光源。
LED具有体积小、发热量低、寿命长、耗电量小、反应速度快等众多优点,却无白炽钨丝灯泡高耗电、发热量大,光效能低,易碎及萤光粉灯废弃物含汞污染环境等缺点,因此十分被灯饰业者看好。
因此,半导体节能声光控照明灯在各个领域的新系统设计、研究等方面显示出了强有力的推广和应用前景。
本设计采用三种不同的灯光,添加了更动感、跟立体的动画效果,让光立方整体更能呈现出炫丽多彩美轮美奂的动画造型和图案。
三、设计结构说明光立方顾名思义是一个立方体,采用的是8*8*8的模式,主要分为主控模块、驱动模块、显示模块三大模块。
光立方驱动电路,主控电路LED灯等都是纯手工焊接。
采用的主控芯片STC12C5A60S2芯片,驱动电路是采用我们常用的74HC573数字芯片。
利用512个LED组成的8*8*8的立方体结构,每层共64个LED采用共阴的接法,一共8层,利用锁存器74HC573与驱动器ULN2803的硬件组合而成,有三个控制按钮,用来切换不同的显示模式。
3D8光立方制作欧阳光明(2021.03.07)目录一、摘要 (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、STC12C5A60S2STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
1)增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统80512)工作电压:STC12C5A60S2系列工作电压:5.5V- 3.3V(5V单片机)3)工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz4)应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节5)片上集成1280字节RAM6)外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2, INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3)。
7)A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)8)通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口9)STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3)10)工作温度范围:-40 - +85℃(工业级) / 0 - 75℃(商业级)2、74HC57374HC573是八进制3 态非反转透明锁存器。
器件的输入是和标准CMOS 输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出,当输入的数据消失时,在芯片的输出端,数据仍然保持3、ULN2803ULN2803是八重达林顿管,1至8脚为8路输入,18 到11脚为8路输出。
驱动能力为500MA \50V。
应用时9脚接地,10脚接负载电源V+,输入的电平信号为0或5V。
输入0是输出达林顿管截止,输入为5V电平时,输出达林顿饱和。
输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作,该电路为反向输出型,即输入低电平电压,输出端才能导通工作。
(二)工作原理有8个8*8点阵,再用8个引脚来当充当各个8*8点阵的“开关”。
只要将64个灯阳极连在一起,在连到这个引脚上。
采用了hc573暂存的方法,来分别把64个灯的亮灭信息存到这个上面,然后再一起输出到灯上,573的64个输出引脚控制前面所述每一个面的64个灯;而每层灯的阴极全连接在一起接入uln2803,由uln2803控制的每一个层灯。
通过单片机主控芯片STC12C5A60S2来控制所有灯的亮灭,从而控制P0、P1、P2实现控制X、Y、Z空间立体控制来显示我们所需要显示的现象。
图1 8层面图2 64个灯孔整个设计主要分为三个模块分别是主控模块、驱动模块、显示模块1、驱动模块原理图3 74HC573驱动图4 原理图uln2803的1~8脚接主控芯片的P1口(1~8脚),数据由主控芯片P2口输入经过uln2803从11~18脚输出,实现通过uln2803来驱动每一层。
每个573的2~9脚(数据输入)都连接在一起连接到主控芯片的P0口(32~39脚),数据从主控芯片P0口输送到573,573的1脚是3态输出使能输入(低电平)一般都与地相接,573的11脚(锁存使能输入)都连接在一起连接到主控芯片的P2口(21~28脚)作为锁存控制。
当573的11脚为高电平和2~9脚为高电平时,573的12~19脚(3态锁存输出)为高电平,驱动一竖面的灯亮,当11脚为高低平、2~9脚为低电平时,573的12~19脚则就为低电平,从而灯灭,当11脚为低电平时,2~9脚不管高低电平,12~19脚的输出不变。
主控芯片通过573+uln2803来驱动控制哪竖面的哪一层的哪个灯的亮灭。
R1~R16是限流电阻。
(三)元器件选择1)由于光立方的程序量比较大,而且要求相对比较高,因此用 51 系列的增强型芯片STC12C5A60S2,选择的理由:1.无法解密,采用第六代加密技术; 2.超强抗干扰;3.内部集成高可靠复位电路,外部复位可用可不用;4.速度快,比 8051 快 8-12 倍。
2)由于灯的个数比较多,因此所需要的电流相对也比较大,所以选择ULN2803。
3)驱动部分使用了熟悉的74HC573,其优点有 1.高阻态,就是输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出;2.数据锁存;当输入的数据消失时,在芯片的输出端,数据仍然保持;3.数据缓冲、加强驱动能力。
4)LED 灯的选择,出于外观和整体的形状美观,采用的是雾状蓝光的 LED 灯,由于高亮灯比雾状灯刺眼,所以选择雾状灯。
图 5 雾状LED灯(四)制作、调试1)制作:1、我们首先完成的是驱动电路驱动电路由于线比较多电路比较复杂,所以我们有比较多的跳线,由八个74HC573组成的,如下图:图6 573驱动连接反面图7 573驱动连接正面2、主控电路主控电路是最简单的电路,主要是最小系统,其中还有一个控制层的驱动芯片焊接在主控板上,如图所示:图8 最小系统3、显示模块首先我们用一块比较大万能板,在上面做了8*8个点的标志,间距为2mm然后把灯按统一形状掰好管脚。
然后固定在在万能板上进行焊接,焊接完如下图:图9 灯的焊接焊好的如图:每次焊完以后都要去检查测试每个灯是否会亮,很重要的步骤图 10把八个面做好以后就是把八个面一层一层的叠起来,在这里要注意的是必须用尺子量好各个角度的高度(我们做的间距为2厘米),必须使每一个面在同一水平面上,如下图所示:同样的每次焊完以后都要去检查测试每个灯是否会亮图11 8层灯显示部分反面,如下图:图122)调试:主要是检查全部的灯是否正常工作:(1)程序烧写进单片机之后,发现有两列没有点亮,还好两列的都在边上,进而如果换灯也相对容易,我们用排除法来检查电路,首先是检查灯的线路是否虚焊,断路,果真有一列的是断路了,把它接上后这一列也亮了。
(2)还剩下另外一列,我们用同样的方法来做,从驱动电路到显示的都没有问题,而且在输入那一列的电压也正常,我们就想不通了,是什么原因呢?我们怀疑是不是有灯坏了,我们又一个一个的检查了这一列灯,但是全部都会亮,经过很细心的检查,发现有一个灯的亮度和其他的灯亮度完全不同,相对比较暗,于是我们把它换了下来,接上另外一个,果然是哪个灯的问题,原来是由于这灯的阻抗很大,把那一列的电平都拉低了,使灯无法亮起来。
(3)在调试过程中,有一竖面的灯完全不亮,第一个想法是灯没有供电,检测供电电路法发现没有问题,于是我找到573这一部分,因为这一部分跳线较多且线路密集,逐一测量发现线头间短路了,从新焊接后测试,故障顺利排除。
(4)在调试过程中有几个灯一直不亮,用万用表欧姆档测量发现灯已经烧坏,拆下坏掉,但是有2个灯是存在虚焊问题,从新焊接后正常工作。
五、结束语经过这次的设计,让我们更明确了团队合作的要领和精神,更明白了焊接技术的重要性,也让我们对单片机编程的进一步了解,为了这次设计我们找了查找了很多资料,包括一些对该设计元件的作用、工作电压等资料的了解,感谢百度和Google公司。
他们的搜索功能庞大、快捷又免费,让我们很方便地搜索到了我们所需要的设计资料和丰富的知识。
此次毕业设计,是我大学学习中遇到过的时段最长、涉及内容最广、工作量最大的一次设计。
用老师的一句话概括就是这次毕业设计相当如是把以前的小课程设计综合在一起的过程,只要把握住每个小课设的精华、环环紧扣、增强逻辑,那么这次的任务也就不难了。
同时感谢老师对我们的指导和为我们理清思路从而使我们更快我完成设计。
六、参考文献【1】祈伟杨亭.单片机C51程序设计教程与实验北京航空航天大学出版社2006年1月【2】张瑞玲.单片机原理与应用西北工业大学出版社2010年12月【3】赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003.七、附录(源程序)#include <REG52.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar 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,0x18 ,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0x 38,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,0x0 1,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,0xb c,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0x cd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0x b2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0x8a,0xaa ,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5, 0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0 xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0 x4};/*railway 2*/uchar code dat2[28]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xb c,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};/*railway 3*/uchar code dat3[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};/*3p char*/uchar code table_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0 e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};/*initializtionThat is to initialize the program .It is write to set the timer in c52 mcu.So the program can renovate the led_3d_cube in fixed time use the interrupt function.*/void sinter(){IE=0x82;TCON=0x01;TH0=0xc0;TL0=0;TR0=1;}void delay5us(void) //误差 -0.026765046296us STC 1T 22.1184Mhz {unsigned char a,b;for(b=7;b>0;b--)for(a=2;a>0;a--);}void delay(uint i){while (i--) delay5us();//12t的mcu 注释这个延时即可}/*To judge the num bit判断数字点*/uchar judgebit(uchar num,uchar b){char n;num=num&(1<<b);if (num)n=1;elsen=0;return n;}/*To figure out the round number计算出的轮数*/uchar abs(uchar a){uchar b;b=a/10;a=a-b*10;if (a>=5)b++;return b;}/*To figure out the absolute value找出绝对值*/uchar abss(char a){if (a<0)a=-a;return a;}/*The function can comparat the character.And remove the big one to the back.*/void max(uchar *a,uchar *b){uchar t;if ((*a)>(*b)){t=(*a);(*a)=(*b);(*b)=t;}}/*The function is to figure out the max number and return it.*/uchar maxt(uchar a,uchar b,uchar c){if (a<b)a=b;if (a<c)a=c;return a;}void clear(char le){uchar i,j;for (j=0;j<8;j++){for (i=0;i<8;i++)display[j][i]=le;}}void trailler(uint speed){char i,j;for (i=6;i>=-3;i--){if (i>=0){for (j=0;j<8;j++)display[j][i]=display[j][i+1];}if (i<4){for (j=0;j<8;j++)display[j][i+4]=0;}delay(speed);}}void point(uchar x,uchar y,uchar z,uchar le){uchar ch1,ch0;ch1=1<<x;ch0=~ch1;if (le)display[z][y]=display[z][y]|ch1;elsedisplay[z][y]=display[z][y]&ch0;}void type(uchar cha,uchar y){uchar xx;for (xx=0;xx<8;xx++){display[xx][y]=table_cha[cha][xx];}}/*The first variable is the distance from the midpoint.The second is the layer.the third is the flash speed of the time between each two point. The forth is the enable io,it controls weather draw or claen.*/ void cirp(char cpp,uchar dir,uchar le){uchar a,b,c,cp;if ((cpp<128)&(cpp>=0)){if (dir)cp=127-cpp;elsecp=cpp;a=(dat[cp]>>5)&0x07;b=(dat[cp]>>2)&0x07;c=dat[cp]&0x03;if (cpp>63)c=7-c;point (a,b,c,le);}}void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le){char t,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;for (i=0;i<t;i++){point(abs(a),abs(b),abs(c),le);a+=a1;b+=b1;c+=c1;}point(x2,y2,z2,le);}void box(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le) {uchar i,j,t=0;max(&x1,&x2);max(&y1,&y2);max(&z1,&z2);for (i=x1;i<=x2;i++)t|=1<<i;if (!le)t=~t;if (fill){if (le){for (i=z1;i<=z2;i++){for (j=y1;j<=y2;j++)display[j][i]|=t;}}else{for (i=z1;i<=z2;i++){for (j=y1;j<=y2;j++)display[j][i]&=t;}}}else{if (le){display[y1][z1]|=t;display[y2][z1]|=t;display[y1][z2]|=t;display[y2][z2]|=t;}else{display[y1][z1]&=t;display[y2][z1]&=t;display[y1][z2]&=t;display[y2][z2]&=t;}t=(0x01<<x1)|(0x01<<x2);if (!le)t=~t;if (le){for (j=z1;j<=z2;j+=(z2-z1)){for (i=y1;i<=y2;i++)display[i][j]|=t;}for (j=y1;j<=y2;j+=(y2-y1)){for (i=z1;i<=z2;i++)display[j][i]|=t;}}else{for (j=z1;j<=z2;j+=(z2-z1)){for (i=y1;i<=y2;i++){display[i][j]&=t;}}for (j=y1;j<=y2;j+=(y2-y1)){for (i=z1;i<=z2;i++){display[j][i]&=t;}}}}}void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le) {uchar i;max(&z1,&z2);if (fill){for (i=z1;i<=z2;i++) line (x1,y1,i,x2,y2,i,le);}else{line (x1,y1,z1,x2,y2,z1,le);line (x1,y1,z2,x2,y2,z2,le);line (x2,y2,z1,x2,y2,z2,le);line (x1,y1,z1,x1,y1,z2,le);}}void poke(uchar n,uchar x,uchar y){uchar i;for (i=0;i<8;i++) point(x,y,i,judgebit(n,i));}void boxtola(char i,uchar n){if ((i>=0)&(i<8)) poke(n,0,7-i);if ((i>=8)&(i<16)) poke(n,i-8,0);if ((i>=16)&(i<24)) poke(n,7,i-16);}void rolldisplay(uint speed){uchar j;char i,a;for (i=23;i>-40;i--){for (j=0;j<40;j++){a=i+j;if ((a>=0)&(a<24))boxtola(a,table_id[j]);}delay(speed);}}void roll_apeak_yz(uchar n,uint speed){uchar i;switch(n){case 1: for (i=0;i<7;i++){display[i][7]=0;display[7][6-i]=255;delay(speed);}break;case 2: for (i=0;i<7;i++){display[7][7-i]=0;display[6-i][0]=255;delay(speed);}break;case 3: for (i=0;i<7;i++){display[7-i][0]=0;display[0][i+1]=255;delay(speed);}break;case 0: for (i=0;i<7;i++){display[0][i]=0;display[i+1][7]=255;delay(speed);}break;}}void roll_apeak_xy(uchar n,uint speed){uchar i;switch(n){case 1: for(i=0;i<7;i++){line(0,i,0,0,i,7,0);line(i+1,7,0,i+1,7,7,1);delay(speed);} break;case 2: for (i=0;i<7;i++){line(i,7,0,i,7,7,0);line(7,6-i,0,7,6-i,7,1);delay(speed);}break;case 3: for (i=0;i<7;i++){line(7,7-i,0,7,7-i,7,0);line(6-i,0,0,6-i,0,7,1);delay(speed);}break;case 0: for (i=0;i<7;i++){line(7-i,0,0,7-i,0,7,0);line(0,i+1,0,0,i+1,7,1);delay(speed);}break;}}void roll_3_xy(uchar n,uint speed){uchar i;switch(n){case 1: for (i=0;i<8;i++){box_apeak_xy (0,i,0,7,7-i,7,1,1);delay(speed);if (i<7) box_apeak_xy (3,3,0,0,i,7,1,0);};break;case 2: for (i=0;i<8;i++){box_apeak_xy (7-i,0,0,i,7,7,1,1);delay(speed);if (i<7) box_apeak_xy (3,4,0,i,7,7,1,0);};break;case 3: for (i=0;i<8;i++){box_apeak_xy (0,i,0,7,7-i,7,1,1);delay(speed);if (i<7) box_apeak_xy (4,4,0,7,7-i,7,1,0);}break;case 0: for (i=0;i<8;i++){box_apeak_xy (7-i,0,0,i,7,7,1,1);delay(speed);if (i<7) box_apeak_xy (4,3,0,7-i,0,7,1,0);}}}void trans(uchar z,uint speed){uchar i,j;for (j=0;j<8;j++){for (i=0;i<8;i++) display[z][i]>>=1;delay(speed);}}void tranoutchar(uchar c,uint speed){uchar i,j,k,a,i2=0;for (i=0;i<8;i++){if (i<7)box_apeak_xy (i+1,0,0,i+1,7,7,1,1);box_apeak_xy (i2,0,0,i2,7,7,1,0);a=0;i2=i+1;for (j=0;j<=i;j++) a=a|(1<<j);for (k=0;k<8;k++){*欧阳光明*创编 2021.03.07display[k][3]|=table_cha[c][k]&a;display[k][4]|=table_cha[c][k]&a;}delay(speed);}}void transss(){uchar i,j;for (i=0;i<8;i++){for (j=0;j<8;j++)display[i][j]<<=1;}}/*From now on,the function below is to display the flash.*/void flash_1(){clear(0);type(1,0);delay(60000);type(2,0);delay(60000);type(3,0);delay(60000);type(4,0);de lay(60000);delay(60000);clear(0);rolldisplay(30000);type(0,7);delay(60000);trailler(6000);delay(60000 );}void flash_2(){uchar i;for (i=129;i>0;i--){cirp(i-2,0,1);delay(8000);cirp(i-1,0,0);}delay(8000);for (i=0;i<136;i++){cirp(i,1,1);delay(8000);cirp(i-8,1,0);}delay(8000);for (i=129;i>0;i--){cirp(i-2,0,1);delay(8000);}delay(8000);for (i=0;i<128;i++){cirp(i-8,1,0);delay(8000);}delay(60000);}void flash_3(){char i;for (i=0;i<8;i++){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i<7)box_apeak_xy(0,i,0,7,i,7,1,0);}for (i=7;i>=0;i--){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i>0)box_apeak_xy(0,i,0,7,i,7,1,0);}for (i=0;i<8;i++){box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i<7)box_apeak_xy(0,i,0,7,i,7,1,0);}}void flash_4(){char i,j,an[8];for (j=7;j<15;j++)an[j-7]=j;for (i=0;i<=16;i++){for (j=0;j<8;j++){if ((an[j]<8)&(an[j]>=0))line(0,an[j],j,7,an[j],j,1);}for (j=0;j<8;j++){if (((an[j]+1)<8)&(an[j]>=0)) line(0,an[j]+1,j,7,an[j]+1,j,0); }for (j=0;j<8;j++){if (an[j]>0)an[j]--;}delay(15000);}for (j=0;j<8;j++)an[j]=1-j;for (i=0;i<=16;i++){for (j=0;j<8;j++){if ((an[j]<8)&(an[j]>=0))line(0,an[j],j,7,an[j],j,1);}for (j=0;j<8;j++){if (((an[j]-1)<7)&(an[j]>0)) line(0,an[j]-1,j,7,an[j]-1,j,0); }for (j=0;j<8;j++){if (an[j]<7)an[j]++;}delay(15000);}}void flash_5(){uint a=15000;//a=delaychar i=8,j,an[4];//1for (j=7;j<11;j++)an[j-7]=j;while(i--){for (j=0;j<4;j++){if (an[j]<8)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]<7)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0); }for (j=0;j<4;j++){if (an[j]>3)an[j]--;}delay(a);}//2i=3;for (j=0;j<4;j++)an[j]=5-j;while(i--){for (j=1;j<4;j++){if (an[j]<4)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]<3)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0); }for (j=0;j<4;j++){if (an[j]>0)an[j]--;}delay(a);}//3i=3;for (j=1;j<4;j++)an[j]=4-j;while(i--){for (j=1;j<4;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>0)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0); }for (j=1;j<4;j++){if (an[j]<3)an[j]++;}delay(a);}//4i=3;for (j=0;j<4;j++)an[j]=j+1;while(i--){for (j=1;j<4;j++){if (an[j]>3)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>3)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0); }for (j=0;j<4;j++)an[j]++;delay(a);}//5i=3;for (j=3;j<6;j++)an[j-2]=j;while(i--){for (j=1;j<4;j++){box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0); }for (j=0;j<4;j++){if (an[j]>3)an[j]--;}delay(a);}//6i=3;for (j=0;j<4;j++)an[j]=5-j;while(i--){for (j=1;j<4;j++){if (an[j]<4)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]<3)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0); }for (j=0;j<4;j++){if (an[j]>0)an[j]--;}delay(a);}//7i=3;for (j=0;j<4;j++)an[j]=3-j;an[0]=2;while(i--){for (j=0;j<3;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>=0)box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0); }for (j=0;j<4;j++){if (j<5-i)an[j]--;}delay(a);}//8i=10;for (j=0;j<4;j++)an[j]=j-2;while(i--){for (j=0;j<4;j++){if (an[j]>=0)box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);if (an[j]>=0)box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);}for (j=0;j<4;j++){if (an[j]<7)an[j]++;}delay(a);}}void flash_6(){uchar i,j,k,z;roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);for (i=0;i<3;i++){for (j=0;j<8;j++){for (k=0;k<8;k++){if ((table_3p[i][j]>>k)&1){for (z=1;z<8;z++){point (j,7-k,z,1); if (z-1)point (j,7-k,z-1,0); delay(5000);}}}}trans(7,15000);}}void flash_7(){uchar i;uint a=3000;roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_yz(3,10000);roll_apeak_yz(0,10000);roll_apeak_yz(1,10000);roll_apeak_yz(2,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);roll_apeak_xy(2,10000);roll_apeak_xy(3,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);roll_apeak_xy(2,10000);roll_apeak_xy(3,10000);for (i=0;i<8;i++){box_apeak_xy (0,i,0,7-i,i,7,1,1);delay(a);}delay(30000);roll_3_xy(0,a);delay(30000);roll_3_xy(1,a);delay(30000);roll_3_xy(2,a);delay(30000);roll_3_xy(3,a);delay(30000);roll_3_xy(0,a);delay(30000);roll_3_xy(1,a);delay(30000);roll_3_xy(2,a);delay(30000);roll_3_xy(3,a);for (i=7;i>0;i--){box_apeak_xy(i,0,0,i,7,7,1,0);delay(a);}}void flash_8(){uchar i;for (i=5;i<8;i++){tranoutchar(i,10000);delay(60000);delay(60000);}}void flash_9(){char i;uchar j,an[8],x,y,t,x1,y1;for (i=0;i<8;i++){box_apeak_xy (i,0,0,i,7,7,1,1);if (i)box_apeak_xy (i-1,0,0,i-1,7,7,1,0); delay(10000);}roll_apeak_xy(3,10000);roll_apeak_xy(0,10000);roll_apeak_xy(1,10000);for (i=0;i<7;i++){line(6-i,6-i,0,6-i,6-i,7,1);line(i,7,0,i,7,7,0);delay(10000);}for (i=0;i<8;i++)an[i]=14;for (i=0;i<85;i++){clear(0);for (j=0;j<8;j++){t=an[j]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[j]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;line(x,y,j,x1,y1,j,1);}for (j=0;j<8;j++){if ((i>j)&(j>i-71))}for (i=0;i<85;i++){clear(0);for (j=0;j<8;j++){t=an[j]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[j]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;line(x,y,j,x1,y1,j,1);}for (j=0;j<8;j++){if ((i>j)&(j>i-71))an[j]--;}delay(5000);}for (i=0;i<29;i++){clear(0);t=an[0]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[0]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;box_apeak_xy(x,y,0,x1,y1,7,0,1); box_apeak_xy(x,y,1,x1,y1,6,0,1); an[0]++;delay(5000);}for (i=0;i<16;i++){clear(0);t=an[0]%28;x=dat2[t]>>5;y=(dat2[t]>>2)&0x07;t=(an[0]-14)%28;x1=dat2[t]>>5;y1=(dat2[t]>>2)&0x07;box_apeak_xy(x,y,0,x1,y1,7,1,1); an[0]--;delay(5000);}for (i=0;i<8;i++){line(i,i,0,0,0,i,0);delay(5000);}for (i=1;i<7;i++){line(i,i,7,7,7,i,0);{clear(0);box(7,7,7,7-i,7-i,7-i,0,1); delay(10000);}for (i=1;i<7;i++){clear(0);box(0,0,0,7-i,7-i,7-i,0,1); delay(10000);}for (i=1;i<8;i++){clear(0);box(0,0,0,i,i,i,0,1);delay(10000);}for (i=1;i<7;i++){clear(0);box(7,0,0,i,7-i,7-i,0,1);delay(10000);}for (i=1;i<8;i++){box(7,0,0,7-i,i,i,1,1);delay(10000);}for (i=1;i<7;i++){clear(0);box(0,7,7,7-i,i,i,1,1);delay(10000);}}void flash_10(){uchar i,j,an[4],x,y,t;for (i=1;i<7;i++){clear(0);box(0,6,6,1,7,7,1,1);box(i,6,6-i,i+1,7,7-i,1,1); box(i,6,6,i+1,7,7,1,1);box(0,6,6-i,1,7,7-i,1,1);box(0,6-i,6,1,7-i,7,1,1);box(i,6-i,6-i,i+1,7-i,7-i,1,1); box(i,6-i,6,i+1,7-i,7,1,1); box(0,6-i,6-i,1,7-i,7-i,1,1); delay(30000);}for (i=0;i<4;i++){an[i]=6*i;}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,y,0,x+1,y+1,1,1,1); box(x,y,6,x+1,y+1,7,1,1); }for (j=0;j<4;j++)an[j]++;delay(10000);}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,y,0,x+1,y+1,1,1,1); box(x,y,6,x+1,y+1,7,1,1); }for (j=0;j<4;j++)an[j]--;delay(10000);}for (i=0;i<35;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,0,y,x+1,1,y+1,1,1); box(x,6,y,x+1,7,y+1,1,1); }for (j=0;j<4;j++)an[j]++;delay(10000);}for (i=0;i<36;i++){clear(0);for(j=0;j<4;j++){t=an[j]%24;x=dat3[t]>>4;y=dat3[t]&0x0f;box(x,0,y,x+1,1,y+1,1,1); box(x,6,y,x+1,7,y+1,1,1); }for (j=0;j<4;j++)an[j]--;delay(10000);}for (i=6;i>0;i--){clear(0);box(0,6,6,1,7,7,1,1);box(i,6,6-i,i+1,7,7-i,1,1);box(i,6,6,i+1,7,7,1,1);box(0,6,6-i,1,7,7-i,1,1);box(0,6-i,6,1,7-i,7,1,1);box(i,6-i,6-i,i+1,7-i,7-i,1,1);box(i,6-i,6,i+1,7-i,7,1,1);box(0,6-i,6-i,1,7-i,7-i,1,1);delay(30000);}}void flash_11(){uchar i,j,t,x,y;uchar code daa[13]={0,1,2,0x23,5,6,7,6,5,0x23,2,1,0};for (j=0;j<5;j++){for (i=0;i<13;i++){if (daa[i]>>4){t=daa[i]&0x0f;line (0,0,t+1,0,7,t+1,1);}else t=daa[i];line (0,0,t,0,7,t,1);transss();delay(10000);}}for (j=1;j<8;j++){if (j>3)t=4;else t=j;for (i=0;i<24;i+=j){x=dat3[i]>>4;y=dat3[i]&0x0f;box_apeak_xy(0,x,y,0,x+1,y+1,1,1);transss();delay(10000);}}for (j=1;j<8;j++){if (j>3)t=4;elset=j;for (i=0;i<24;i+=j){x=dat3[i]>>4;y=dat3[i]&0x0f;point (0,x,y,1);transss();delay(10000);}}}void main(){sinter();while(1){clear(0);/*play list*/flash_1();clear(0);flash_2();flash_3(); flash_4(); flash_4(); flash_5();flash_5();flash_6(); flash_7(); flash_8(); flash_9(); flash_10();clear (0); flash_11();flash_9(); flash_5(); flash_7(); flash_5(); flash_6();flash_8(); flash_9();flash_10();}}//P0; //573 in//P1; //uln2803//P2; //573 LEvoid print() interrupt 1{uchar i;static uchar layer=0;P1=0;for (i=0;i<8;i++){P2=1<<i;delay(3);P0=display[layer][i];delay(3);}P1=1<<layer;if (layer<7) layer++;else layer=0;TH0=0xc0;TL0=0;}。