3D8光立方制作
3D8光立方制作
3D8光立方制作目录一、摘要。
.。
...。
.。
......。
..。
...。
.。
.。
.。
...。
....。
1二、关键字。
.。
.。
.。
..。
.。
.。
...。
.。
..。
...。
.。
.。
1三、引言。
....。
....。
.。
.。
..。
..。
.。
....。
.。
.。
.。
.2四、正文.。
....。
.。
..。
.。
.。
..。
.....。
....。
.。
..。
.2 (一)、主要元件介绍.。
..。
.....。
......。
.。
.。
..。
.。
..31、STC12C5A60S2。
...。
.....。
.。
..。
.。
......。
32、74HC573..。
..。
.。
.。
.。
....。
.....。
.。
.。
.。
.。
.。
.。
33、ULN2803.。
.。
...。
.......。
.。
.。
..。
.。
.。
(4)(二)、工作原理。
...。
.。
.。
.。
..。
.。
.。
..。
.。
.。
..5 1、驱动模块原理.。
......。
.。
......。
.。
.。
.。
.。
.。
6(三)、元器件选择..。
.。
..。
.。
.。
...。
.。
.....。
.。
.。
7(四)、制作、调试..。
.。
..。
...。
.。
..。
. (8)1、制作.。
.。
.。
..。
..。
.。
.。
..。
.....。
.。
.。
192、调试..。
.。
..。
...。
.。
..。
...。
.。
.。
...。
.。
..。
11五、结束语。
.。
.。
..。
..。
.。
.。
.。
...。
13六、参考文献....。
.....。
..。
.。
.。
.。
.。
....。
.。
...。
12七、附录(程序)。
.。
.。
.。
.。
.。
.。
...。
.。
..。
.。
.。
.。
132光立方一、摘要:本设计采用8*8*8 的模式,硬件主要分为三个模块:主控模块、驱动模块、显示模块。
采用的主控芯片为STC12C5A60S2 芯片,驱动电路是采用我们常用74HC573数字芯片。
数组 OUT[0]代表光立方从第一层 D0 到第八层 D0 的数据,以此类推数组 OUT[1] 代表光立方从第一层 D1 到第八层 D1 的数据。
光立方制作+程序讲解
光立方教程今天,给大家带来光立方的制作教程,基于本人制作的经验,给各位想要做的朋友分享制作过程。
对于第一次制作的朋友,我们要先制作好一个日程表,如下图:我们要弄好一个计划,就好像单片机运行程序一样。
当然,废话少说。
接下来,我们需要一份购买材料的清单如上图所示,我们需要购买的万能板需要购买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。
光立方设计制作(全过程、带程序连接)
摘要之前在网上看了一些光立方的演示视频,被它那些立体感吸引了。
想到自己学单片机也这么久了,于是乎就想做一个玩玩,同时可以复习一学期以来自己的编程能力和动手的能力,一举两得是一件很不错的事情。
向朋友要了一些资料,就开工了。
光立方顾名思义就是一个立方体,采用的是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。
3d 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系列单片机,它本身的运算速度有限。
光立方制作过程
光立方制作过程
制作人:HY
先来一张制作完的的图
网上的电路图
我做的电路图
没有接锁存器和三极管来电流大不过结果一样
第一步搭光立方搭架子
把方形的led折成这个形状
把正极的引脚弯下来
在纸盒子上打四个洞我是打多了的
把弯好的led插入里面焊接这样整齐点
焊接后的样子
在这样竖着焊接
这样焊接好一面,要焊四面
把焊接好的四面插在万能板上,把每一层连接上
这样光立方架子就搭好了
再在万能板上焊好单片机最小系统,我是采用usb口供电的
像这样每一层接在单片机的P0口的0, 1, 2, 3上紫色把每一列分成两部分接在单片机的P1口和P2口上红色
像这样每一列接单片机对应的引脚
看几张效果图
希望我的过程能给大家带来帮助
你有一个苹果,我有一个苹果,我们交换一下,还是一个苹果.你有一个思想,我有一个思想,我们交换一下,就有两个思想.
在电子学习中希望大家多分享自己的制作
不要闭门造车,也不要一味的索取.
一个人的能力有限,多把自己的成果分享出来
这在国际上叫“开源”
我希望在这个想法能在我们之中流传下去.
这仅仅是个人的想法.
谢谢大家的观看^_^。
3D光立方的设计与制作
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组成光立方显示屏。
基于单片机的光立方设计方案
基于单片机的光立方设计方案摘要本设计制作出一个三维立体显示图案的LED光立方。
本产品不仅可以像发光二极管点阵一样显示平面的静态或动态画面,还可以显示立体的静态或动态画面,打破了传统的平面显示方案。
同锁存器/8*8*8/LED显示时又增加了显示的花样和立体图案显示效果,可以广泛用于传媒信息显示和各种装饰显示,为将来显示技术的进步和发展指导了方向,光立方显示比发光二极管点阵更具有视觉效果,而且画面图案更加非富多彩。
本设计是采用AT89S52单片机为核心控制器,八D边沿触发器(三态)74LS574扩展I/O口,完成硬件电路设计。
通过软件编程控制数据下载到单片机完成设计图案的显示。
软件采用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
关键词51单片机/74LS574目录摘要 (I)1 绪论 (1)1.1国内外LED显示屏的发展概况 (1)1.2我国LED显示屏研究现状及发展趋势 (1)1.3设计的总体要求及方案选择 (2)1.4设计说明书的结构安排 (2)2 系统总体方案设计 (4)2.1系统总体硬件方案选择 (4)2.1.1 3D显示屏核心控制器 (4)2.1.2 电源电路 (5)2.1.3 I\O口扩展芯片 (5)2.1.4 层面控制驱动电路 (6)2.1.5 串口通讯芯片的选择 (6)2.1.6 LED发光显示二级管 (6)2.1.7 硬件电路绘图软件 (7)2.2系统总体软件方案选择 (8)2.2.1 单片机编程语言 (8)2.2.2 系统软件编译器WA VE介绍 (9)3 系统硬件方案设计 (10)3.1硬件整体设计概述及功能分析 (10)3.2电源供电系统设计 (10)3.351系列单片机简介 (11)3.3.1 时钟电路设计 (11)3.3.2 复位电路设计 (13)3.4驱动电路设计 (13)3.4.1 层驱动电路设计 (13)3.4.2 列驱动电路设计 (15)3.5通信系统硬件设计 (16)3.6光立方的制作及工作原理介绍 (17)3.6.1 3D LED光立方搭接 (17)3.6.2 3D LED光立方工作原理 (19)4 系统软件方案设计 (21)4.1概述 (21)4.2主程序设计 (21)4.3显示程序的设计 (22)4.3.1 LED显示屏的数据传送 (22)4.3.2 显示程序的设计 (22)4.4软件中防止程序出错ERR处理 (23)4.5ISP软件程序下载 (24)5 光立方PCB版制作 (25)5.1 PROTUES制作PCB版图 (25)5.1.1 绘制电路原理图并仿真测试 (25)5.1.2 加载网络表及元件封装 (26)5.1.3 规划电路板并设置相关参数 (27)5.1.4 元件布局及调整 (28)5.1.5 元件布线及调整 (29)5.1.6 输出及制作PCB (30)5.2PCB版的制作过程 (30)5.2.1 热转印版图 (31)5.2.2 蚀刻去铜 (31)5.2.3 去墨打孔 (31)6 系统测试及仿真 (32)6.1硬件系统测试 (32)6.2软件系统测试 (33)6.3系统总体测试 (33)6.4系统测试结果与结论 (34)6.4.1 测试结果分析 (34)6.4.2 测试结论 (34)总结 (35)参考文献 (37)附录1 总体电路原理图 (38)附录2 电路PCB版图 (39)附录3 电路3D仿真图 (40)附录4 元器件清单 (41)附录5 电路实物图 (43)附录6 源程序 (44)1 绪论1.1 国内外LED显示屏的发展概况在当今信息化社会的高速发展过程中,大屏幕显示已经从公共信息展示等商业应用向消费类多媒体应用渗透。
3D光立方制作详解
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个孔然后把灯放到上面,一个一个焊接起来这样可以保障每一层的灯位置都是一样的而且各个灯之间排列是规则的。
最后通过架设支撑架的方式把各个层架起来,然后用电烙铁焊接起来。
光立方制作+程序
光立方教程今天,给大家带来光立方的制作教程,基于本人制作的经验,给各位想要做的朋友分享制作过程。
对于第一次制作的朋友,我们要先制作好一个日程表,如下图:我们要弄好一个计划,就好像单片机运行程序一样。
当然,废话少说。
接下来,我们需要一份购买材料的清单如上图所示,我们需要购买的万能板需要购买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。
基于单片机的3D8光立方设计
基于单片机的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光立方程序
/*railway 3*/
uchar code dat3[24]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x0x60,0x50,0x40,0x30,0x20,0x10};
EX1=1;
EA=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--);
/*3p char*/
uchar code table_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
That 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.*/
display[j][i]=display[j][i+1];
}
if (i<4)
{
for (j=0;j<8;j++)
uchar i,j;
电子信息专业毕业设计3D光立方
摘要光立方是一个长、宽、高由8×8×8 个LED 灯组成的真实3D 立方体显示器。
其最大的特点,就是带给观赏者立体的超酷的3D视觉体验。
因此各大也充斥着各种各样的光立方版本。
但是这各种版本的光立方的制作方法都很复杂,而且成本也很高,而本设计与之相比则制作简单精美,成本低廉。
为保证光立方精美的外形,本设计还提供了一种光立方的制作模板,以确保将动手能力导致的美观差异降到最低。
为降低其成本,本设计采用了STC12C5A60S2单片机,这种单片机自带有A/D转换模块;使用的锁存器是常用的SN74HC573。
这样可以保证在降低制作成本的情况下,毫不影响作品的美观;再加上显示效果极佳的高亮雾面的蓝色方形LED,硬件电路无需添加额外的驱动和上拉电阻,即可实现其强大的功能:除了能显示3D 图形,还可以支持多级亮度和速度调整,允许用户自拓展音频显示功能,就像音乐显示器一样。
用户还可以在不改动硬件电路的情况下设计出自己喜欢的的自定义图形。
这些充分体现了制作成本低、显示效果好、功能完善的特点。
最后,经过软硬件调试,解决了一些硬件电路短路,程序报错的问题,完美地实现了多种图形动态显示,流畅的图形变换和音频显示的多种功能。
关键词:光立方制作模板音频显示 A/D转换ABSTRACTLight-cube is a long, wide, high is composed of 8 x 8 x 8 leds true 3 d volumetric display. Its biggest characteristic, is to bring the viewer stereo cool 3 d visual experience. So each big web site is filled with all kinds of cubic light version.But all versions of this light cubic method is very complex, and the cost is also high, and compared with this design is beautifully simple and low cost.In order to ensure the exquisite cubic shape, this design also provides a light cube production template, to ensure that the ability to appearance difference to a minimum.To reduce its cost, this design USES STC12C5A60S2 MCU, the MCU built-in A/D conversion module; Use the latch is SN74HC573 in common use. So that in the case of lower production costs, not effect the beauty of the works; Plus showed excellent results highlighted square LED fog below in blue, don't need to add additional hardware circuit drive pull up resistance, and its powerful functions can be realized: in addition to display 3 d graphics, can support multiple levels of brightness and speed adjustment, allows the user to expand the audio display function, like music display. Users can also in the case of do not change the hardware circuit design their own custom graphics. These fully reflect the production of low cost, good effect of display, the characteristics of the function is perfect.Finally, after the hardware and software debugging, solve some of the short circuit hardware circuit, program error, perfect the dynamic variety of graphic display, smooth graphics transform and audio display a variety of functions.Key words: light-cube making stencil audio-display A/D conversion目录1、引言01.1研究意义 01.2研究现状 (1)1.3该论文的容安排 (1)2、光立方的设计方案 (1)2.1本设计基本功能和特点 (1)2.2拓展功能 (2)2.3总体设计方案 (2)3、硬件设计 (4)3.1 单片机控制电路设计 (4)3.1.1单片机选型 (4)3.1.2单片机控制电路 (5)3.2 驱动电路设计 (6)3.2.1 负极驱动芯片 (7)3.2.2 正极驱动芯片 (9)3.3显示电路设计 (10)3.3.1各层电路设计 (10)3.3.2 LED地址对照表 (11)3.4实物效果图 (13)4、软件设计 (15)4.1 自定义头文件 (15)4.2电脑端的ISP控制软件 (18)4.3程序流程图 (19)4.4 LED显示核心思想 (20)4.5显示部分测试结果 (22)5、硬件焊接与调试 (23)5.1 本设计所需材料 (23)5.1.1LED灯 (23)5.1.2 74HC573芯片 (23)5.1.3自制双声道音频插头 (23)5.1.4 其他材料 (24)5.2光立方LED灯焊接方法与步骤 (25)5.3调试中的问题和解决方法 (27)5.4调试结果 (28)6、总结 (30)致 (30)参考文献 (31)附录 (32)1、引言1.1研究意义LED射灯是指发出的光线是方向性的(directional)的LED灯泡, 主要类型有MR16,GU10, PAR series.LED球泡灯是指发出的光线为发散性的LED灯泡, 主要类型为:E27 base.按照功率来分, LED灯泡可分为: 小功率(主要为5mm LED生产的)和大功率(主要1 W, 3 W ,甚至5 W LED生产的)。
光立方论文
目录1 概述 (2)1.1光立方原理 (2)1.2 3DLED光立体的优越性以及主要应用 (3)2设计课题硬件系统的设计 (3)2.1 LED管脚搭接方法: (3)2.2设计课题电路原理图 (7)2.3设计课题电路PCB图 (8)2.4 设计课题电路元器件布局图 (9)2.5 设计课题元器件清单 (10)3 设计课题软件系统的设计 (11)3.1 3dLED光立方代码图形 (11)3.2 设计课题软件系统程序清单 (12)4 设计结论 (18)4.1 设计总结与使用说明 (18)4.2 电路的调试和调试出现的问题 (19)4.3设计体会 (19)结束语 (20)致谢 (21)参考文献 (22)1 概述1.1光立方原理光立方也就是LED的立体阵列,一般的LED是平面的,比如一个字,而光立方则是在多个等间距的平面再组合成一个立体。
这样就可以显示真3D图形。
8*8*8光立方我们把它拆成8个面,如下图,每个面64个灯,或说成64束。
我们要控制这64个灯使其自由变换,然后控制每个层依次点亮即可。
图1学过点阵的都知道,如果要控制8*8点阵,需要16个引脚,那么8*8*8点阵我们再用8个引脚充当8*8点阵的总开关即可,我们只要把64个LED灯的阴极连接在一起就可以了。
图21.2 3DLED光立体的优越性以及主要应用1.3DLED以其功耗低,寿命长,亮度高,视角大,可视距离远等优点而具有极为广阔的发展前景。
随着人们生活水平的提高,3DLED逐渐应用于各行各业。
人们对其的要求也越来越高,已经不再满足于二维平面,进而转向三维平面。
3DLED的出现是一个很好的契机。
2.3DLED光立体极具观赏性,人们可以根据自己的要求,设计不同的图案,展现不同的立体效果。
可以说它是变幻无穷的。
因其极大地观赏性,使人们在接受信息,数据的同时更加印象深刻,使信息的传输更有效率。
3. 随着3D技术的逐步发展,3DLED被广泛应用于现实生活中,比如LED显示屏,LED图像,LED立体摄影。
光立方
电子课程设计——光立方学院:电子信息工程学院专业、班级:姓名:学号:指导教师:李小松2013年12月目录一、设计任务与要求 (3)二、总体框图 (4)三、选择器件 (5)四、功能模块 (8)五、总体设计电路图 (12)光立方一、设计任务与要求本设计要求制作出一个8x8x8的三维发光二极管显示方阵,能够通过编程来控制每个发光二极管的亮灭,利用人眼的视觉暂留效果,从而显示出不同的静态或动态画面。
硬件部分由主控电路,驱动电路,显示电路.其中各电路部分的具体要求如下:1.1主控电路:尽量使用内存量大的控制芯片作为主控模块,因为光立方的程序量较大,普通的8051单片机的内存是不够用的。
另外尽量使用处理速度快的主控芯片,为了产生所谓的动画效果,光立方每层LED灯的亮灭要求刷新速度很快,因此单片机的处理速度越快越好。
2.2驱动电路要求使用驱动能力高的并且集成度高的芯片作为驱动模块,8*8*8光立方要求的LED灯多达512个,如果这些灯全部点亮的话,会需要很大的电流,所以所选择的的驱动芯片一定要有足够的驱动能力,另外集成度高的芯片往往能为硬件的搭接提供方便。
2.3显示电路显示部分对LED灯的要求是LED自身的管脚长度尽量要长,这样在灯与灯之间焊接的时候就可以完全靠它们自身的管脚来搭接,而不需要再外接其他的支架,使光立方整体电路的焊接变得简单容易,并且整洁美观。
其次对LED灯的发光亮度要求是不能太亮,否则灯与灯之间会相互影响,从而影响整体的动画效果。
本设计的难度主要在512个LED灯的搭建上,焊接的时候必须要有耐心,如果在整个光立方都已搭接完成的时候才发现某个地方出现虚焊、漏焊等现象,那么后果是不堪设想的,所以最好是焊了一小部分电路后对其进行测试,一边搭建电路,一边测试电路,这样会在发现问题的情况下及时进行修改,切不可一次性将光立方搭建成型,而后再测试,那时要再修改可要大费周章了。
其次是软件的编写,在写程序的时候一定将原理搞清楚,这样写起来会得心应手,尽量在有能力的情况下多编写一些静态或者动态画面,增强自己的3D编程能力。
3D8光立方作品说明书
8*8*8光立方作品说明书摘要LED点阵显示屏已经应用到了我们生活中的方方面面,科技发展的脚步一直向前,由于3D电影给人们带来了更加震撼的视觉体验。
于是想设计出一种3D显示屏。
通过向指导员的学习了解,知道LED显示分静态显示和动态显示,以及两种显示的控制方法:LED共阴和共阳接法不同的驱动方法。
在网站上查找相关的文献时,我们了解LED显示技术的特色之处:一是节能(直接功耗,间接耗能)高空间利用率,二是基本无电离辐射。
LED点阵显示屏的特点还有比数码管具有实用、便宜、亮度高等优点,而且做出来的LED显示很耐用。
LED显示屏还具有亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定等优点。
LED点阵显示屏的发展前景极为广阔,目前正朝着更高亮度,更高耐气候性,更高的发光密度,形状的多样性,更高的发光均匀性、可靠性、多色化方向发展。
另外在电子工程师之家看到过不少网上朋友发帖子,晒自己制作的3D光立方显示,5*5*5的、有8*8*8的、甚至还有一个16*16*16的。
在爱折腾网站也曾看过有用蓝色LED和白色LDE制作的光立方。
在运动会的开幕式上,物理与电子信息学院展示了光立方,经过搜集资料看了视频了解后,我们被光立方的立体感吸引了,我们向物理与电子信息学院的同学学习制作一个光立方,一方面满足自己的兴趣爱好之心,另一面也锻炼我们的动手能力。
于是我最终确定也制作一个蓝色LED 显示8*8*8的光立方。
光立方顾名思义就是一个立方体,我们采用的是8*8*8的模式,大概的距离是17cm*17cm*17cm(长.宽.高),主要分为三个模块:主控模块驱动模块显示模块;我们所做的光立方驱动电路,主控电路等都是纯手工焊接。
采用的主控芯片12C5A60S2芯片,驱动电路是采用我们常用的74HC573数字芯片。
本设计采用C语言编程实现不同图案的转变,利用单片机控制512个LED灯的亮灭,采用延时控制LED亮灭时间使LED灯图案转变的速度不同,最终使得整个立体呈现不同的造型和图案,使其变得美轮美奂、绚丽多彩。
3D光立方毕业设计
经过这次的设计,让我们更明确了团队合作的要领和精神,更明白了焊接技术的重要性,也让我们对单片机编程的进一步了解,为了这次设计我们找了查找了很多资料,包括一些对该设快捷又免费,让我们很方便地搜索到了我们所需要的设计资料和丰富的知识。此次毕业设计,是我大学学习中遇到过的时段最长、涉及内容最广、 工作量最大的一次设计。用老师的一句话概括就是这次毕业设计相当如是把以前的小课程设计综合在一起的过程,只要把握住每个小课设的精华、环环紧扣、增强逻辑,那么这次的任务也就不难了。同时感谢老师对我们的指导和为我们理清思路从而使我们更快我完成设计。
(3)在调试过程中,有一竖面的灯完全不亮,第一个想法是灯没有供电,检测供电电路法发现没有问题,于是我找到573这一部分,因为这一部分跳线较多且线路密集,逐一测量发现线头间短路了,从新焊接后测试,故障顺利排除。
(4)在调试过程中有几个灯一直不亮,用万用表欧姆档测量发现灯已经烧坏,拆下坏掉,但是有2个灯是存在虚焊问题,从新焊接后正常工作。
图7 573驱动连接正面
2、主控电路
主控电路是最简单的电路,主要是最小系统,其中还有一个控制层的驱动芯片焊接在主控板上,如图所示:
图8 最小系统
3、显示模块
首先我们用一块比较大万能板,在上面做了8*8个点的标志,间距为2mm然后把灯按统一形状掰好管脚。然后固定在在万能板上进行焊接,焊接完如下图:
图9 灯的焊接
3
D
光
立
方
的
设
计
题目:3D光立方
级别:2011级
专业:电子科学与技术
姓名:李鹏华
一、摘要............................................1
二、关键字..........................................1
基于单片机的光立方设计_毕业论文(含程序+原理图+实物图)
1、实物图..........................................................................................................................16 2、系统原理图..................................................................................................................17 程序清单...................................................................................................................................17
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个输出位不是问题,因为是立方体形式,线路之间会存在互相遮挡,所以,必须要求连接线路最少,显然,直接并联是最傻的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3D8光立方制作目录一、摘要 (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,0x 66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0x38,0x3c,0x3e,0x36,0x7e,0x30,0x3 0,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,0x 89,0x00,0xf8,0x27,0x27,0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x8 1,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,0x f4,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,0x 79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x9 6,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,0 x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf 4,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,0xbc,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,0 x66,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,0x0e,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(spee d);} 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(spe ed);}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(spe ed);}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++){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);del ay(60000);type(4,0);delay(60000);delay(60000);clear(0);rolldisplay(30000);type(0,7);delay(60000);trai ller(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))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);}{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);}{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){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;}。