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个孔然后把灯放到上面,一个一个焊接起来这样可以保障每一层的灯位置都是一样的而且各个灯之间排列是规则的。
最后通过架设支撑架的方式把各个层架起来,然后用电烙铁焊接起来。
- 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;}。