1、3D光立方的设计题 目: 3D 光立方 级 别: 2011 级 专 业: 电子科学与技术 姓 名: 李 鹏 华目录1、摘要12、关键字13、引言24、正文2(1) 、主要元件介绍31、STC12C5A60S2.32、74HC57333、ULN28034(2) 、工作原理51、驱动模块原理.6(三) 、元器件选择.7(四) 、制作、调试.81、制作.92、调试.11五、结束语13六、参考文献12七、附录(程序)13光立方一、摘要: 本设计采用 8*8*8 的模式,硬件主要分为三个模块:主控模块、驱动模块、显示模块。采用的主控芯片为 STC12C5A60S2 芯片,驱动电路是采用我们常用74HC5
2、73 数字芯片。数组 OUT0代表光立方从第一层 D0 到第八层 D0 的数据,以此类推数 组 OUT1 代表光立方从第一层 D1 到第八层 D1 的数据。本设计采用 C 语言编程,利用单片机控制 LED 的亮灭,采用延时控制 LED 亮灭时间,最终使得整个立体展现不同的造型和图案,使其变得美轮美奂、绚丽多彩。二、关键字:LED 光立方,74HC573,STC12C5A60S2,ULN2803三、引言:光立方是由四千多棵光艺高科技“发光树”组成的,在 2009 年 10 月 1 日天安门广场举行的国庆联欢晚会上面世,这是新中国成立六十周年国庆晚会最具创意的三大法宝之首,自从国庆 60 周年联欢
3、晚会开始演练后,一个全新的名词“光立方”,吸引了全国人民的关注。国庆联欢晚会三样法宝,光立方为最,“光立方”在气势和整体感觉上,融合了北京奥运会开幕式“击缶而歌”和“活字印刷”的风格,而各种图案则与贯穿奥运会开幕式的“画卷”有异曲同工之妙。 “光立方”可以根据爱国歌曲的不同内容,展示不同的造型和图案,具有丰富的视觉效果。四、正文(1)主要元件介绍:1、STC12C5A60S2STC12C5A60S2/AD/PWM 系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代 8051 单片机,指令代码完全兼容传统 8051,但速度快 8-12 倍。内部集成 M
4、AX810 专用复位电路,2 路 PWM,8 路高速 10位 A/D 转换(250K/S),针对电机控制,强干扰场合。1) 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统 80512) 工作电压:STC12C5A60S2 系列工作电压:5.5V- 3.3V(5V 单片机)3) 工作频率范围:0 - 35MHz,相当于普通 8051 的 0420MHz4) 应用程序空间 8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K 字节5) 片上集成 1280 字节 RAM6) 外部中断 I/O 口 7 路,传统的下降沿中断或低电平触
5、发中断,并新增支持上升沿中断的 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 标志的才有双串口,Rx
6、D2/P1.2(可通过寄存器设置到 P4.2),TxD2/P1.3(可通过寄存器设置到 P4.3)10) 工作温度范围:-40 - +85(工业级) / 0 - 75(商业级)2、74HC57374HC573 是八进制 3 态非反转透明锁存器。器件的输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步) 。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出,当输入的数据消失时,在芯片的输出端,数据仍然保
7、持3、ULN2803 ULN2803 是八重达林顿管,1 至 8 脚为 8 路输入,18 到 11 脚为 8 路输出。驱动能力为 500MA 50V。应用时 9 脚接地,10 脚接负载电源 V+,输入的电平信号为0 或 5V。输入 0 是输出达林顿管截止,输入为 5V 电平时,输出达林顿饱和。输出负载加在电源 V+和输出口上,当输入为高电平时,输出负载工作,该电路为反向输出型,即输入低电平电压,输出端才能导通工作。(2)工作原理有 8 个 8*8 点阵,再用 8 个引脚来当充当各个 8*8 点阵的“开关” 。只要将 64个灯阳极连在一起,在连到这个引脚上。采用了 hc573 暂存的方法,来分别
8、把 64个灯的亮灭信息存到这个上面,然后再一起输出到灯上,573 的 64 个输出引脚控制前面所述每一个面的 64 个灯;而每层灯的阴极全连接在一起接入 uln2803,由uln2803 控制的每一个层灯。通过单片机主控芯片 STC12C5A60S2 来控制所有灯的亮灭,从而控制 P0、P1、P2 实现控制 X、Y、Z 空间立体控制来显示我们所需要显示的现象。图 1 8 层面 图 2 64 个灯孔整个设计主要分为三个模块分别是主控模块、驱动模块、显示模块1、驱动模块原理图 3 74HC573 驱动 图 4 原理图uln2803 的 18 脚接主控芯片的 P1 口(18 脚) ,数据由主控芯片
9、P2 口输入经过 uln2803从 1118 脚输出,实现通过 uln2803 来驱动每一层。每个 573 的 29 脚(数据输入)都连接在一起连接到主控芯片的 P0 口(3239 脚) ,数据从主控芯片 P0 口输送到 573,573 的 1 脚是 3态输出使能输入(低电平)一般都与地相接,573 的 11 脚(锁存使能输入)都连接在一起连接到主控芯片的 P2 口(2128 脚)作为锁存控制。当 573 的 11 脚为高电平和 29 脚为高电平时,573 的 1219 脚(3 态锁存输出)为高电平,驱动一竖面的灯亮,当 11 脚为高低平、29脚为低电平时,573 的 1219 脚则就为低电平
10、,从而灯灭,当 11 脚为低电平时,29 脚不管高低电平,1219 脚的输出不变。主控芯片通过 573+uln2803 来驱动控制哪竖面的哪一层的哪个灯的亮灭。R1R16 是限流电阻。(三)元器件选择1)由于光立方的程序量比较大,而且要求相对比较高,因此用 51 系列的增强型芯片 STC12C5A60S2,选择的理由:1.无法解密,采用第六代加密技术; 2.超强抗干扰;3.内部集成高可靠复位电路,外部复位可用可不用;4.速度快,比 8051 快 8-12 倍。 2)由于灯的个数比较多,因此所需要的电流相对也比较大,所以选择 ULN2803。 3)驱动部分使用了熟悉的 74HC573,其优点有
11、1.高阻态,就是输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出;2.数据锁存;当输入的数据消失时,在芯片的输出端,数据仍然保持;3.数据缓冲、加强驱动能力。4)LED 灯的选择,出于外观和整体的形状美观,采用的是雾状蓝光的 LED 灯 ,由于高亮灯比雾状灯刺眼,所以选择雾状灯。图 5 雾状 LED 灯(四)制作、调试1)制作:1、我们首先完成的是驱动电路 驱动电路由于线比较多电路比较复杂,所以我们有比较多的跳线,由八个 74HC573组成的,如下图:图 6 573 驱动连接反面图 7 573 驱动连接正面2、主控电路 主控电路是最简单的电路,主要是最小系统
12、,其中还有一个控制层的驱动芯片焊接在主控板上,如图所示:图 8 最小系统 3、显示模块 首先我们用一块比较大万能板,在上面做了 8*8 个点的标志,间距为 2mm 然后把灯按统一形状掰好管脚。然后固定在在万能板上进行焊接,焊接完如下图:图 9 灯的焊接焊好的如图:每次焊完以后都要去检查测试每个灯是否会亮,很重要的步骤图 10把八个面做好以后就是把八个面一层一层的叠起来,在这里要注意的是必须用尺子量好各个角度的高度(我们做的间距为 2 厘米) ,必须使每一个面在同一水平面上,如下图所示:同样的每次焊完以后都要去检查测试每个灯是否会亮图 11 8 层灯显示部分反面,如下图:图 12 2) 调试:主
13、要是检查全部的灯是否正常工作:(1)程序烧写进单片机之后,发现有两列没有点亮,还好两列的都在边上,进而如果换灯也相对容易,我们用排除法来检查电路,首先是检查灯的线路是否虚焊,断路,果真有一列的是断路了,把它接上后这一列也亮了。(2)还剩下另外一列,我们用同样的方法来做,从驱动电路到显示的都没有问题,而且在输入那一列的电压也正常,我们就想不通了,是什么原因呢?我们怀疑是不是有灯坏了,我们又一个一个的检查了这一列灯,但是全部都会亮,经过很细心的检查,发现有一个灯的亮度和其他的灯亮度完全不同,相对比较暗,于是我们把它换了下来,接上另外一个,果然是哪个灯的问题,原来是由于这灯的阻抗很大,把那一列的电平
14、都拉低了,使灯无法亮起来。(3)在调试过程中,有一竖面的灯完全不亮,第一个想法是灯没有供电,检测供电电路法发现没有问题,于是我找到 573 这一部分,因为这一部分跳线较多且线路密集,逐一测量发现线头间短路了,从新焊接后测试,故障顺利排除。(4)在调试过程中有几个灯一直不亮,用万用表欧姆档测量发现灯已经烧坏,拆下坏掉,但是有 2 个灯是存在虚焊问题,从新焊接后正常工作。五、结束语经过这次的设计,让我们更明确了团队合作的要领和精神,更明白了焊接技术的重要性,也让我们对单片机编程的进一步了解,为了这次设计我们找了查找了很多资料,包括一些对该设计元件的作用、工作电压等资料的了解,感谢百度和 Googl
15、e 公司。他们的搜索功能庞大、快捷又免费,让我们很方便地搜索到了我们所需要的设计资料和丰富的知识。此次毕业设计,是我大学学习中遇到过的时段最长、涉及内容最广、 工作量最大的一次设计。用老师的一句话概括就是这次毕业设计相当如是把以前的小课程设计综合在一起的过程,只要把握住每个小课设的精华、环环紧扣、增强逻辑,那么这次的任务也就不难了。同时感谢老师对我们的指导和为我们理清思路从而使我们更快我完成设计。6、参考文献【1】 祈伟 杨亭.单片机 C51 程序设计教程与实验 北京航空航天大学出版社2006 年 1 月 【2】张瑞玲.单片机原理与应用 西北工业大学出版社 2010 年 12 月【3】赵亮,侯
16、国锐.单片机 C 语言编程与实例M.北京:人民邮电出版社,2003. 七、附录(源程序)#include #include #define uchar unsigned char#define uint unsigned int uchar display88; /*rank:A,1,2,3,4,I,心,U*/uchar code table_cha88=0x51,0x51,0x51,0x4a,0x4a,0x4a,0x44,0x44,0x18,0x1c,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3
17、c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0x38,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_id40=0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x0
18、0,0xf8,0x27,0x27,0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,0x01,0x0,0x01,0x01,0xff,0x01,0x01,0x00;/*railway*/uchar code dat128=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
19、,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd
20、,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,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 2*/ uchar code dat228=0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0x
21、fc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4;/*railway 3*/uchar code dat324=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_3p38=0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0
22、x3f,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
23、; void delay5us(void) /误差 -0.026765046296us STC 1T 22.1184Mhzunsigned char a,b;for(b=7;b0;b-)for(a=2;a0;a-);void delay(uint i) while (i-) delay5us();/12t 的 mcu 注释这个延时即可/*To judge the num bit 判断数字点*/uchar judgebit(uchar num,uchar b)char n;num=numreturn b;/*To figure out the absolute value 找出绝对值*/ucha
24、r abss(char a)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=-3;i-)if (i=0)for (j=0;j=0)if (dir)cp=127-cpp;else cp=cpp; a=(datcp5)b=(datcp2)c=datcpif (cpp63)c=7-c;point (a,b,c,le);void line(uchar x1,uchar y
25、1,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=0)i-)for (j=0;j=0)delay(speed);void tranoutchar(uchar c,uint speed)uchar i,j,k,a,i2=0;for (i=0;i0;i-
26、)cirp(i-2,0,1);delay(8000);cirp(i-1,0,0);delay(8000); for (i=0;i0;i-)cirp(i-2,0,1);delay(8000);delay(8000);for (i=0;i=0;i-)box_apeak_xy(0,i,0,7,i,7,1,1);delay(20000);if (i0)box_apeak_xy(0,i,0,7,i,7,1,0);for (i=0;i=0)line(0,anj,j,7,anj,j,1);for (j=0;j=0)line(0,anj+1,j,7,anj+1,j,0);for (j=0;j0)anj-;de
27、lay(15000);for (j=0;j=0)line(0,anj,j,7,anj,j,1);for (j=0;j0)line(0,anj-1,j,7,anj-1,j,0);for (j=0;j3)anj-;delay(a);/2i=3;for (j=0;j0)anj-;delay(a);/3i=3;for (j=1;j=0)box_apeak_xy(j,anj,j,7-j,anj,7-j,0,1);if (anj0)box_apeak_xy(j,anj-1,j,7-j,anj-1,7-j,0,0);for (j=1;j3)box_apeak_xy(j,anj,j,7-j,anj,7-j,0
28、,1);if (anj3)box_apeak_xy(j,anj-1,j,7-j,anj-1,7-j,0,0);for (j=0;j3)anj-;delay(a);/6i=3;for (j=0;j0)anj-;delay(a);/7i=3;for (j=0;j=0)box_apeak_xy(j,anj,j,7-j,anj,7-j,0,1);if (anj=0)box_apeak_xy(j,anj+1,j,7-j,anj+1,7-j,0,0);for (j=0;j=0)box_apeak_xy(j,anj,j,7-j,anj,7-j,0,1);if (anj=0)box_apeak_xy(j,anj-1,j,7-j,anj-1,7-j,0,0);for (j=0;jk)z8;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);