西华杯结题报告  _第1页
西华杯结题报告  _第2页
西华杯结题报告  _第3页
西华杯结题报告  _第4页
西华杯结题报告  _第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/39西华杯结题报告LED光立方摘要:本次课外学术科技研究的作品一改传统的平面流水灯的风格,而是从平面向立体发展,通过更宽广的三维空间呈现出更加绚丽的效果,直接冲击着人们审美视觉,不在停留在乏味的平面成像。人们在传统广告信息轰炸下,逐渐形成视觉疲劳,这样商家越来越激发不了广大消费群体的消费欲望。在此背景下,我们设计了可以显示3D图形的光立方,通过光立方实时的三维立体的显示广告,不停的变换立体图形效果达到引起消费者注意的目的,不仅可以使商家的商标和广告唯美的变换,还可以使消费者更愿意花时间去欣赏它,实时的了解商家要表达的信息。我们的设计采用的是888的模式,主要分为三个模块:主控模块,驱动模块,显示模块:采用的主控芯片为宏晶科技公司最新的IAP15F2K61S2单片机,驱动电路是采用我们常见的74HC573数字芯片,显示电路则是由512个草帽型的雾状LED灯组成的立方体,因此叫做光立方。本次设计的主要功能是在整体上实现画面立体2/39的显示,实现动态的实时3D显示效果,同时可以根据要求改变程序的数组部分就可实现画面的自主定义,也可自己写更多美轮美奂的图形。即可显示出我们想要的三维立体图形,字母,数字,也可以实现图形字母数字的来回变换,移动和交替的变换,达到不间断的变换效果。关键词:光立方、74HC573、IAP15F2K61S2、ULN2803目录1前言.1序言.1设计方法.1实施计划.1软件工具.12系统方案设计.2总体方案设计.2单片机主控制模块.2驱动模块.2显示模块.33理论分析与计算.4硬件原理分析.4软件原理分析.44系统电路设计.63/39主控电路.6驱动模块的设计.6显示模块的设计.85系统软件设计.96系统测试.10硬件测试.10软件测试.10测试分析.117总结.12设计总结.12设计改进.128附录.13系统的设计总图.13系统的设计PCB图.13相关的设计程序.141主程序.142子程序.161前言序言奥运会的开闭幕式、大型演唱会、城市地标广场等场合越来越多的采用光立方技术,所谓“光立方”:就是在平面LED基础上发展起来的新的显示技术,通过复4/39杂的程序控制,在三维空间能够显示具有立体感的图形、动画等。设计方法单片机控制模块:采用61KBIAP15F2K61S2单片机作为控制核心,具体使用时采用一块单片机开发板;驱动模块:采用ULN2803和74HC573锁存器来实现;显示模块:把LED焊接成八个面,每个面有64个。每个面用74HC573锁存器控制阳极,阴极由ULN2803控制是否导通。再用单片机P3口控制8个74HC573锁存器的输出使能端,P2口控制ULN2803的输入引脚。这样可以做到控制所有八个面512个灯泡的点亮;动画实现途径:通过单片机C语言编写程序下载到单片机上,利用程序来控制LED的亮灭,以达到动画的效果。实施计划根据设计要求,首先确定总设计方案,然后用EDA软件设计各单元电路并仿真分析,接着制作实物,并进行调试,最后完善总体电路写出设计报告。软件工具编辑说明书:WordXX5/39绘制框图:SmartDraw7绘制原理电路:Altiumdesigner09仿真分析:Multisim编程环境:keiluvision4PCB:Altiumdesigner09。2系统方案设计总体方案设计单片机主控制模块方案一:采用常用的89c51单片机作为主控芯片,由于89c51只有8K的内存,而光立方需要形成多种动画程序量大,可能会有溢出的情况发生。所以不采用此方案。方案二:采用最新51系列的增强型芯片STC15系列IAP15F2K61S2单片机作为主控芯片,其主要优点如下:1.大容量SRAM和程序flash;2.高集成度,内置A/D,高精准时钟等;3.速度更快,比STC早期1T系列快20%;4.超强抗干扰。驱动模块方案一:采用8个8050NPN三极管驱动,虽能起到反相的作用。但由于需要八个数量较多,对于整体6/39布局效果不佳,影响美观。并且性价比不高,所以不采用此方案。方案二:采用八重达林顿ULN2803,1至8脚为8路输入,18到11脚为8路输出。驱动能力500mA/50V。因为整个光立方体由512个LED灯组成,所需电流也较大,并且一片芯片就能等效8个三极管的作用,大大缩小元器件占用空间。综上所述选择ULN2803芯片。由于在刚刚接触锁存器的时候,就接触了74HC573,对它的使用也比较成熟,因此在驱动部分使用了熟悉的74HC573,其优点有:1.高阻态:就是输出既不是高电平,也不是低电平,而是高阻抗的状态,在这种状态下,可以多个芯片并联输出;2.数据锁存:当输入的数据消失时,在芯片的输出端,数据仍然保持;3.数据缓冲:加强驱动能力。显示模块方案一:由于我们常用的LED灯不容易聚光,光发散比较厉害点亮时相互之间将会有影响,容易影响视角效果。方案二:我们采用的是草帽型白发雾状蓝灯,工作电压为,工作电流2mA-10mA。使用雾状的比较聚光,动画效果更好,如图所示:7/393理论分析与计算硬件原理分析结合原理图,在实际的电路搭建中,所有的电路主板共用了一个电源,经过稳压后,在5V左右变化,采用的三极管参数为:9013结构为:NPN、低频管、放大倍数30-90、集电极基电压40V、集电极发射极电压20V、射极基极电压5V、集电极电流500mA、耗散功率625mW、特征频率最小150MHZ。仿真分析如下:图仿真分析图该型号的二极管工作电流在10至40mA,而74HC573单个管脚提供的理论最大输出电流为20mA,所以74HC573的输出电流足够点亮该二极管,为了提高二极管的亮度,同时为了合理的利用现有的器件。所以利用三极管的放大电流和开关的作用,在一面的二极管分支的组合中我们把每行8个二极管的阴极共接到一个三极管上,这样一共八行二极管接到三极管,三极管接到P2口。再把每列八个二极管的阳极共接到一起,通过74HC573连接到P0这一组IO口。然后在选通该分支电路工作时,就可以先选择好行后,再选择列,以达到8/39控制单个二极管的亮灭。通过P3口来选择二极管的分支。在焊接二极管的分支的过程中完全按照原理图的原理来焊接,然后按照排列的规律把八个8x8LED点阵连接在一个底座电路板上组合成立体的效果。软件原理分析首先是该系统的驱动程序的编写,经过分析我们总结出了两种方法。方法一:一种完全是依靠数组来实现,即用十六进制的数组以八个LED管为单位,例如0x01来控制P3口,输出到立方体的电路上即表示立方体的y轴的第一列整个给出高电平,然后再给P0口一个十六进制数例如0x01,即可控制大家的y轴上的第一个灯亮。这样就可完全以数组的形式来控制立方体中任意对应的二极管的亮灭。我们的x,y,z轴的定义如下图:图光立方坐标图方法二:利用循环的程序来实现,即用到某个灯亮时直接给高电平即可,例如要让x轴的一排八个LED灯全亮,利用for语句一次给P3口依次赋高电平同时给P01口高电平即可。4系统电路设计9/39本设计是以IAP15F2K61S2单片机为控制核心,其和传统8051指令兼容,但是管脚不兼容,我们实物中采用的是以该单片机为核心的开发板,再配上我们自己设计的驱动电路和显示部分,总体分为三个模块:主控模块、驱动模块、显示模块。主控电路控制光立方的单片机的部分电路如下,实物中是一块开发板。图单片机控制电路图单片机开发板实物驱动模块的设计本设计采用的是ULN2803达林顿管进行驱动。ULN2803是八重达林顿,1至8脚为8路输入,18到11脚为8路输出。驱动能力500MA50V。应用时9脚接地,如果驱动感性负载,10脚接负载电源V+。输入的电平信号为0,或5V。8输入0时,达林顿管输出截止。输入为5V电平时,输出达林顿饱和。输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作。10/39图ULN2803引脚图图ULN2803逻辑图图驱动电路原理图图驱动电路制作实物显示模块的设计显示部分采用的是512个草帽型雾状LED灯搭建的立方体,将每层的LED排序如下图,D0,D1,D2,D3?D62,D63分别为64个LED阵列实际排序方式,也就是光立方的俯视图。图光立方显示部分架构图显示部分制作实物“光立方”是由8层这样布局的LED组成,每层位置排列全部一致,每层LED的所有阴极全部接到一起,然后8层接到单片机的一组IO口上,进行层扫描,每一束面8个阳极通过74HC573输出端控制,单片机的另一组IO口控制74hc573的锁存端,确定使能哪一面。11/395系统软件设计3D8光立方主要是通过程序来控制光立方体从而达到多种动画变化的效果。由于要形成多样的3D动画,程序量大,为了便于程序的清晰流畅,我们分别设计了多个C文件和头文件,分别存放不同类型的数据,包括含有main的C文件、各种延时的C文件,声明函数的C文件,动画数组的C文件,各种动画数组调用函数的C文件,以及各种定义的头文件。软件的编译环境为keil,主程序的运行流程框图如下:图程序流程图在主C文件中,将系统所需要的文件的各种宏定义文件包含进来。接着初始化IO口,进入呼吸灯程序,呼吸一段时间后跳出循环,接着依次执行各个动画函数,驱动光立方,利用扫描形式使光立方体的LED灯逐个点亮形成动画。6系统测试硬件测试本次设计由于用到较多的LED灯,对于焊接和调试造成一定的难度,512个灯中只要有一个出问题,替12/39换工作将是非常的麻烦,必须把坏掉的LED拆开再取出重新焊接一个好的。本次设计过程中发现了一些问题。以下为主要的问题及解决方案:1、本系统在硬件测试时发现光立方体的LED灯普遍偏暗,电流较低,无法达到预期的效果。解决方法:首先进行电路的检测,测试是否存在短路、断路情况。发现没有问题,接着在IO口上接了上拉电阻,问题得以解决。2、调试过程中烧入全亮程序发现有一束八个灯同时不亮。解决方法:由于74HC573控制着光立方体灯的阳极亮灭,一个引脚控制八个LED,由此原理可以猜测可能是其中一个控制其亮灭的74HC573引脚出问题。通过与其他引脚的电压对比,发现控制这八个灯的引脚电压明显偏低,经仔细检查果真由于线路断路造成,问题得以解决。3、由于电烙铁工作时会有较小的静电产生,很容易烧坏LED灯,问题可能处在电烙铁在工作过程中产生的静电上。解决方法:1.将烙铁头跟接地线相连,以泄放产生的静电;2.如果烙铁没有接地线那就光脚才在地上也会13/39降低静电的影响。把八个灯归为一组,焊完组个检查,焊完64个整排再进行检查,把LED损坏的概率降到最低。软件测试由于要形成多样的3D动画,在变换的过程中也出现了不少的问题。最后经过多次的细心修改,顺利的完成了编程工作。主要问题有:1、烧入程序后,不能显示完整的动画。解决方法:重新检查程序,检查对应的引脚定义有没错。再者检查延时是否过快导致动画不明显。2、由于程序量庞大,烧入程序时应注意头文件是否包含正确,下载经常出现编译不通过的现象,提示多处错误。解决方法:将程序分类,分成多个C文件,包括主C,动画C,延时C,对于各种函数的声明,变量的定义,可以将它们分成不同的头文件,用的时候只需包含在程序的最前面,最后再定义一个包含动画数组的头文件,方便修改显示图案。测试分析本设计通过硬件设备和软件完美配合,总共呈现多种连续的动画效果。经过多次的反复测试与分析,所呈现的动画与程序中预期的效果吻合,符合设计要求。在软硬件测试过程中让我们对原先设计的电路的原理及功能进14/39一步熟悉,并对各电路模块和相关的芯片联合工作更加了解。在这个调试的过程中虽然挺枯燥无味,但锻炼我们发现问题并解决问题的能力,对我们的专业知识起到了温故知新的作用。下面是部分测试的效果:图CUBE由大变小图烟花的绽放图倒计时图我爱你7总结设计总结15/39经过数个月的理论知识的学习,最后我们开始动手制作并完成了项目,本设计采用61KIAP15F2K61S2单片机作为主控芯片,通过程序来实现立体动画。本设计的亮点是将原先平面的流水灯延伸到立体空间,使实现的动画更能冲击视觉效果,拥有更广阔的市场价值。我们确定这个课题是对于网上各种各样的光立方成品让人赞叹不已,也想能通过亲自来制作一个属于自己的光立方。与此同时,光立方毕竟是个新鲜产物,网上较多的是成品材料并没有太多的经验可以引以为鉴。在制作过程中遇到许多的困难,就比如说怎么把那512个LED从点到线、从线到面、从面到体就是必须要克服的难题,但是功夫不负有心人,经过指导老师的精心指导以及同学们的热心帮助,终于完成了硬件和软件的测试。通过这次的科技作品的设计,在过程中,很多我们不懂的问题都会主动查阅资料来寻找答案,在此学到了很多课堂上没有的专业知识进,同时也将所学的模拟、数字电子技术知识行了重温并付付诸实践,从而使我们的专业涵养得到了提高。由于此设计需要较高的焊接技巧,制作过程中也无形锻炼了自己的动手能力,这对于毕业后的我们在社会工作中将是一笔宝贵的财富。设计改进本次设计用到的是51增强型IAP15F2K61S216/39的单片机,不足之处是仅仅只用到了它的输出驱动以及大容量,运行速度快这几方面的能力,图案修改只能静态修改。我们还可以利用通信技术实时发送数据,改变图案,还可以采集外界模拟量,通过AD转换为数字量在光立方上面显示,比如:温度,音乐频谱,实现天气预报图案随模拟量变化等等。如果你学的够深话,只有想不到的,没有做不到的。8附录系统的设计总图系统的设计PCB图相关的设计程序1主程序#include#include/常用数据类型定义#include/LED驱动头文件#include/延时函数头文件#include/字模数据voidLEDIO_Init;voidmain17/39uint8i;LEDIO_Init;whileforDOT_PWM;lightbug;catercorner;/边角的三角形CUBE_LOG1;/扫描整个光立方CUBE_LOG2;CUBE_LOG3;CUBE_LOG6;/321LOG2;/烟花FIRE;FIRE;/LOG2;/FIRE;FIRE;/LOG2;/FIRE;CUBE_LOG7;/iloveSTCLOG6;/最后一面由全亮逐渐向左熄灭18/39LOG7;/最左边一面从里到外逐列点亮,最后至全亮CUBE_LOG4;/逐面点亮一个面的LED,从左向右流动,其他坐标点上的LED熄灭LOG8;/最右面的一面由全亮逐渐从顶行变化至末行熄灭LOG9;/底面从右往左依次逐列点亮至全亮CUBE_LOG5;/逐面点亮一个府面的LED,从下向上流动,其他坐标点上的LED熄灭LOG11;/从高位锁存面往低位锁存面依次逐一点亮LOG5;/整体从大CUBE缩小变化至小CUBELOG1;/从斜对角缩小和放大cubeCUBE_LOG13;/一二三四五六,逐面叠加点亮,有拖尾感觉!shalou;/显示一个沙漏的立体图形shalou;LOG3;/从右上角扩大至全亮CUBE_LOG9;/雨过天晴CUBE_LOG10;/音乐律动CUBE_LOG11;/竖直表面顺时针环绕CUBE_LOG12;/横向表面逆时针环绕LOG4;/最前面的一面由全亮逐渐向右上角缩小至熄灭19/39/LIST_LOG;LOG5;CUBE_LOG6;/方向指示图案Delay;CUBE_LOG7;/方向流动CUBE_LOG7;/XHULOG12;/上下起伏的波浪,逐渐上涨/CUBE_LOG7;/现为ZLOG14;/跳动的心CUBE_LOG7;/OFFLAST_LOG;whileDOT_PWM;/一个LED灯转一圈,回到初始状态voidLEDIO_InitP0M0=0xff;/设置P0口为推挽输入输出P0M1=0x00;/P3M0=0x00;/P3M1=0x01;P1M0=0xff;/设置P1口为推挽输入输出20/39P1M1=0x00;P2M0=0xff;/设置P2口为推挽输入输出P2M1=0x00;X=0xff;/P3锁存Y=0x00;/P0数据X=0x00;Z=0x00;/P2平面2子程序注:由于程序代码数千行,仅给出驱动C文件部分代码中的函数。#include/LED驱动头文件#include/常用数据类型定义#include/延时函数头文件#includestaticuint8MOVE=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;staticuint8ADD_X=0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff;staticuint8ADD_Y=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff;staticuint8SHALOU=0xff,0x7e,0x3c,0x18,0x18,0x3c,0x7e,0xff;voidCLEARZ=0x00;/熄灭所有LEDY=0x00;/设置Y轴坐标X=0xff;X=0x00;/锁存X轴坐标21/39/*函数名:点亮某一坐标点上的LED,坐标是:调用:LED_DOT_ON;参数:x:x轴,y:y轴,z:z轴返回值:无结果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭备注:/*/voidLED_DOT_ONCLEAR;Y=MOVEy;Z=MOVEz;X=MOVEx;X=0x00;22/39/*函数名:点亮某一Y轴上的LED调用:LED_Y;参数:返回值:无结果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭备注:/*/voidLED_YCLEAR;Y=0xff;/设置Y轴坐标X=MOVEx;/设置X轴坐标X=0x00;/锁存X轴坐标Z=MOVEz;/设置Z轴坐标/*23/39函数名:同时点亮某一Z轴上的LED调用:LED_ZWATERWater;参数:x:x轴,y:y轴,z:z轴返回值:无结果:点亮相对应坐标点上的一个LED,其他坐标点上的LED熄灭备注:/*/voidLED_ZY=0x00;/设置Y轴坐标X=0xff;/设置X轴坐标X=0x00;/锁存X轴坐标Y=MOVEy;/设置Y轴坐标X=MOVEx;/设置X轴坐标X=0x00;/锁存X轴坐标Z=0xff;/熄灭所有LED/*24/39函数名:呼吸灯程序/*/voidDOT_PWMuint16LOW=0;ifT=100;if&)CLEAR;/清屏/Z=0xff;Delay;forLED_DOT_ON;Delay;CLEAR;Delay;LED_DOT_ON;Delay;25/39forLED_DOT_ON;Delay;CLEAR;Delay;/*/voidLIST_LOGuint8z,y;CLEAR;Y=0x01;/设置Y轴坐标X=0x01;/设置X轴坐标X=0x00;/锁存X轴坐标forZ=0x80z;/锁存X轴坐标26/39Delayms;Z=0X01;forY=0x01X=0x01;/设置X轴坐标X=0x00;/锁存X轴坐标/锁存X轴坐标Delayms;/*函数名:图形1调用:CUBE_LOG1;参数:无返回值:无结果:逐一叠加点亮坐标为点上的一轴LED,其他坐标点上的LED熄灭备注:/*27/39*/voidCUBE_LOG1uint8z;CLEAR;Y=0x80;/设置Y轴坐标X=0x01;/设置X轴坐标X=0x00;/锁存X轴坐标forZ|=0x01Delayms;/*/*函数名:图形2调用:CUBE_LOG2;参数:无28/39返回值:无结果:逐一轴叠加点亮坐标为点上的一轴LED,其他坐标点上的LED熄灭备注:/*/voidCUBE_LOG2uint8y;Z=0x00;/熄灭所有LEDY=0x80;/设置Y轴坐标X=0x01;/设置X轴坐标X=0x00;/锁存X轴坐标Z=0xff;/轴上的LEDforY|=0x80y;X=0x01;/设置X轴坐标X=0x00;/锁存X轴坐标Delayms;29/39/*/*函数名:图形3调用:CUBE_LOG3;参数:无返回值:无结果:逐面点亮一个侧面的LED,从左向右流动,其他坐标点上的LED熄灭备注:/*/voidCUBE_LOG3uint8x;Z=0x00;/熄灭所有LEDY=0xff;/设置Y轴坐标X=0x01;/设置X轴坐标30/39X=0x00;/锁存X轴坐标Z=0xff;/轴上的LEDforY=0x00;/设置Y轴坐标X=0xff;/设置X轴坐标X=0x00;/锁存X轴坐标Y=0xff;/设置Y轴坐标X=0x01X=0x00;/锁存X轴坐标Delayms;/*函数名:图形5调用:CUBE_LOG5;参数:无返回值:无结果:逐面点亮一个府面的LED,从下向上流动,其他坐标点上的LED熄灭备注:31/39/*/voidCUBE_LOG5uint8i;Z=0x00;/熄灭所有LEDY=0xff;/设置Y轴坐标X=0xff;/设置X轴坐标X=0x00;/锁存X轴坐标Z=0x01;/底面上的LEDforZ=0x01Delayms;/*/*函数名:图形632/39调用:CUBE_LOG6;参数:无CUBD_LOG6;结果:开机倒数备注:/*/voidCUBE_LOG6int8i,x,y,f,num;Z=0x00;/熄灭所有LEDY=0x00;/设置Y轴坐标X=0xff;/设置X轴坐标X=0x00;/锁存X轴坐标forforforfor33/39forY=0x00;X=0xff;X=0x00;Y=0x80y;/设置Y轴坐标ifX=ADD_Xx;/设置X轴坐标X=0x00;/锁存X轴坐标ifX=ADD_Xx;/设置X轴坐标X=0x00;/锁存X轴坐标Z=NUMnum*8+y;Dela

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论