基于51单片机的光立方设计毕业设计 - 图文

更新时间:2023-09-18 23:49:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计

基于51单片机的光立方设计

姓 名: 梁泉明 学 号: 10030005 班 级: 10信科一班 专 业: 信息科学与技术 所在系: 电子信息工程系 指导教师: 郝芸

基于51单片机的光立方设计

摘要

本文详细的介绍了光立方的搭建过程,以51系列的单片机STC12C5A60S2为主要的控制芯片,由512个LED通过共阴的形式连接起来,由74HC595为扩展单片机的I/O口,用ULN2803为驱动电路,形成一个规格为8*8*8(长,宽,高)14cm*14cm*20cm立方体,还介绍了这款芯片的特点和使用方法及在调试过程中遇到的软件和硬件方面的问题及解决方法,详细的阐述了光立方的设计原理和架构方法,对光立方目前存在的意义也进行了详细的介绍。

关键词:光立方;74HC595;单片机;ULN2803;LED

Light CuBe Based on 51 single ChiP miCroComPuter

ABstraCt

This PaPer introduCes the ProCess of Building Light CuBe, with 51 Series MCU STC12C5A60S2 as the main Control ChiP, ConneCted By 512 LED By CO Yin form, By 74HC595 for the exPansion of the MCU I/O Port, using ULN2803 as the drive CirCuit, the formation of a sPeCifiCation for 8*8* 8 (length, width, height) the 14Cm*14Cm*20Cm CuBe, also introduCes the CharaCteristiCs and methods of use of the ChiP and software and hardware in the ProCess of deBugging ProBlems and solutions, desCriBed in detail the design PrinCiPle and arChiteCture method Light CuBe, the CuBe existed at Present signifiCanCe have also Been introduCed in detail.

Keywords: Light CuBe; 74HC595; STC12C5A60S2; ULN2803; LED

目录

摘要 ................................................................................................................................ 错误!未定义书签。 关键词 ............................................................................................................................ 错误!未定义书签。

1.1课题研究的背景 ............................................................................................... 错误!未定义书签。 1.2课题研究的意义 ............................................................................................... 错误!未定义书签。 1.3课题研究内容和结构 ...................................................................................... 错误!未定义书签。 第二章 总体设计 ........................................................................................................... 错误!未定义书签。

2.1 系统的工作原理 ........................................................................................... 错误!未定义书签。 2.2 各模块方案选择 ........................................................................................... 错误!未定义书签。

2.2.1 单片机主控制模块 ............................................................................. 错误!未定义书签。 2.2.2 驱动模块 ............................................................................................... 错误!未定义书签。 2.2.3 显示模块 ............................................................................................. 错误!未定义书签。

第三章 系统硬件电路设计与实现 ............................................................................... 错误!未定义书签。

3.1 硬件电路设计 ................................................................................................ 错误!未定义书签。 3.2 单片机最小系统 .............................................................................................. 错误!未定义书签。

3.2.1时钟电路 ................................................................................................ 错误!未定义书签。 3.2.2 P0 口外接上拉电阻.............................................................................. 错误!未定义书签。 3.3驱动模块的设计 ............................................................................................... 错误!未定义书签。 3.4 光立方整体设计思路 ...................................................................................... 错误!未定义书签。

3.4.1 LED灯排序方式设计 ........................................................................... 错误!未定义书签。 3.4.2 LED灯接法方式设计 ........................................................................... 错误!未定义书签。 3.5光立方搭建方法 ............................................................................................... 错误!未定义书签。

3.5.1将LED从点到线的搭建 ...................................................................... 错误!未定义书签。 3.5.2将LED从线到面的搭建 ...................................................................... 错误!未定义书签。 3.5.3将LED从面到体的搭建 ...................................................................... 错误!未定义书签。 3.6 PCB板的焊接 .................................................................................................. 错误!未定义书签。

3.6.1 PCB板的制作 ....................................................................................... 错误!未定义书签。 3.6.2 主板的焊接 ........................................................................................... 错误!未定义书签。 3.6.3主芯片的焊接 ........................................................................................ 错误!未定义书签。 3.6.4开关及按键的焊接 ................................................................................ 错误!未定义书签。 3.6.4排插及晶振的焊接 ................................................................................ 错误!未定义书签。

第四章 软件设计 ........................................................................................................... 错误!未定义书签。

4.1 主程序的设计 .................................................................................................. 错误!未定义书签。 4.2 显示程序的设计 .............................................................................................. 错误!未定义书签。

4.2.1显示模块的原理 .................................................................................... 错误!未定义书签。 4.2.2 显示程序的设计 ................................................................................... 错误!未定义书签。 4.3 软件调试 .......................................................................................................... 错误!未定义书签。 第五章 成品测试和问题分析 ....................................................................................... 错误!未定义书签。

5.1 成品测试 ........................................................................................................ 错误!未定义书签。

5.1.1. 硬件调试 ............................................................................................ 错误!未定义书签。 5.1.2. 软件系统 .............................................................................................. 错误!未定义书签。 5.2 结果分析 ........................................................................................................ 错误!未定义书签。 第六章 结论 ................................................................................................................... 错误!未定义书签。

参考文献......................................................................................................................... 错误!未定义书签。 致谢语 ............................................................................................................................ 错误!未定义书签。 附 录..................................................................................................................... 错误!未定义书签。 程序清单......................................................................................................................... 错误!未定义书签。

第一章 绪论

1.1课题研究的背景

“光立方”是一种基于娱乐和学习为一体的科学制作,光立方的娱乐体现在其开放性的DIY程序改造和立体的动画表现形式,可以随心所欲的变化程序来实现想要的动画效果。光立方的学习价值体现在对单片机的控制操作和对512个LED灯的点阵控制及对个模块功能的协调配合上,随着近年来电子行业的飞速发展,越来越多的电子爱好者对于光立方产生了很浓厚的兴趣,光立方创造出的浪漫气氛和绚丽画面,使它在很多场合作为一种生日礼物或者是示爱的工具,大多数的专业人士把光立方研究做为一种职业,光立方技术也逐渐的变得成熟,不仅具有了学习价值还具备了商业价值,因为其的立体渲染效果也使的它是个很好的广告宣传工具,诸多好处也使得光立方越来越受人追捧,大家都在光立方原有的基础上创新改进,其创造出的经济价值和娱乐价值已远远超过单纯的LED点阵显示,这也再一次深深的吸引了电子爱好者对其研究和创新。

1.2课题研究的意义

这次毕业课题的设计抛弃了传统LED的二维显示,改为了点阵的三维立体显示,显示的更加绚丽多彩,强烈冲击了人们的视觉,传统的光立方用的是简单的单片机,因为其性能制约使得其立体效果和动画效果不是很流畅,本次运用了性能最优秀的单片机STC12C5A60S2替代89C51,从而使系统的功能变得更加强大驱动能力更强,在动画的显示上更加的流畅和逼真,此外,传统的光立方的布局和排线太过复杂,DIY程序特别单一,硬件和软件的稳定性都非常的差,运行时存在的问题太多,焊接费时费力存在静电危害,在这个设计中我们很好的处理了这些问题,避免了很多问题的出现,画面非常自然流畅,此次的制作和设计对智能化产品实现经济和商业的价值具有积极地作用。

1.3课题研究内容和结构 本文主要模块如下:

STC单片机控制模块: 以STC12C5A60S2单片机为控制的核心,再加上辅助电路;

时钟信号产生模块:用24MHZ的石英晶体作为整个系统的晶振发生器,给电路提供时钟信号; 立体的显示模块:通过对单片机输入不同的代码使其通过控制LED的亮暗达到显示的作用; 本文的结构安排如下:

第二章:主要叙述了系统的工作原理和结构特点,对不同方案的选择和优化,对各个模块的详细

介绍。

第三章:详细说明了各个硬件电路的排布和设计,并且说明了各个部分的作用和芯片引脚功能的

分布和使用规则,此外还阐述了整个系统的设计思路和搭建的过程及过程中注意的问题。

第四章:介绍了软件调试的过程及遇到的问题,软件系统的整个架构和逻辑关系。

第五章:讲述了整个光立方在后期调试中的软硬件问题和解决这些问题的方法。

第六章:主要叙述了在光立方制作和设计过程中遇到什么困难和如何解决,并在此次设计中的心

得体会和得到什么收获。

第二章 总体设计

2.1 系统的工作原理 本系统设计主要以STC12C5A60S2单片机为核心,并以512个蓝色LED灯做为显示模块组成的光立方,主要有主控模块、驱动模块、显示模块构成,系统模块框图如图2-1:

图2-1 系统结构框图

2.2 各模块方案选择 2.2.1 单片机主控制模块

方案一:采用传统的89C51单片机作为主控制芯片,应为89C51单片机内部只有8K的存储空间,立体的光立方实现的功能比较复杂,一个单片机要控制512个灯所以程序代码存储空间可能大于8K有可能会溢出,所以不可采用此方案。

方案二:采用与89C51有相同功能的STC12C5A60S2单片机,此单片机具有60K的存储空间,足够应付光立方复杂的图像显示程序代码存储,此单片机还有运行速度快,加密安全,抗干扰能力强,内部还有集成复位电路等特点,比较适合此设计的要求,所以可采用此方案。

2.2.2 驱动模块

方案一:采用八个8050NPN三极管虽然可以起到反向的作用可是数量过多,从布线和三级管排布的美观上感觉有点混乱,而且出错率比较高,不够稳定,所以不采用此方案。

方案二:采用与八个三极管功能一样的集成芯片ULN2803,此芯片1-8端口输入,18-11端口输出,驱动能力为500MA\\50V,大大满足了512个LED灯的电流,用一个芯片替代八个三极管,不仅体积变小了,功能还更强大了,所以采用此方案。

2.2.3 显示模块

方案一:由于我们常用的LED灯不容易聚光,光发散比较厉害点亮时相互之间将会有影响,容易影响视角效果。因为传统的LED灯的发光散比较厉害,而且灯彼此之间的距离比较近,互相之间干扰大,影响视觉效果,显示的图像不清晰,所以不可采用此方案。

方案二:采用白发蓝的LED雾灯,可以很好的收聚光线,使要显示的灯的光亮不会影响周围灯的亮度,暗灭很明显,工作电压2.7-4.2V,电流为2MA-10MA如图2-2所示:

图2-2 雾面乳型LED灯

第三章 系统硬件电路设计与实现

3.1 硬件电路设计 系统以STC12C5A60S2单片机为控制核心,其特点是能与8051指令和管脚兼容,而且片内还有很大的存储空间,满足程序代码存储,此单片机还有低功耗和串口烧写的功能,时钟发生源有很多种,比如阻容低速时钟源、带缓冲放大的晶体时钟源、普通晶体时钟源等,但由于考虑到电路的稳定性最终决定采用普通晶体时钟源为时钟发生器,其晶体用12MHZ的晶体,显示模块则用512个LED白发蓝的雾灯来实现。

3.2 单片机最小系统 单片机最小系统是指能够让单片机工作并发挥其作用的必要组成部分,就STC12C5A60S2单片机来说,其一般包括:单片机、时钟电路、复位电路、输入/ 输出设备等(见图3-1)。

单片机的最小系统如下图所示:

图3-1单片机最小系统框图

3.2.1时钟电路

设计时钟电路时,我们首先必须先了解单片机时钟端口的使用和特点: XTAL1(AT89C51中19 脚) :单片机内部振荡电路的输入端口。 XTAL2(AT89C51中18 脚) :单片机内部振荡电路的输出端口。

XTAL1 与XTAL2其实就是一个反向的放大器,它可以与石英晶振连接作为一个时钟振荡电路。

内部方式的的时钟电路就是如图3-3所示,只要在XTAL1、XTAL2上接一个石英晶体并在两端接两个电容,这样就可以产生一个内部激荡电路,这里需要注意的是此实验用的晶振是12MHZ的,和晶振相连的电容一般选用33PF的陶瓷电容。

外部方式的时钟电路就是如图3-4所示,RXD直接接地,TXD再接外部振荡器。外部振荡信号要求采用频率低于12MHZ的方波。

图3-3内部方式时钟电路 图3-4外部方式时钟电路

要检测晶振是不是正常工作可以通过示波器来检查,方法是在XTAL2 输出端接示波器并观察波形是不是正弦波,要是是正弦波则正常工作,反之则不正常工作。也可以通过电压表来测量,侧量XTAL2 输出端与地的电压,要是2V则正常工作。

3.2.2 P0 口外接上拉电阻

由于STC12C5A60S2单片机P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。作为一般的I/O口时,当P0口用来驱动NPN管子的时候,就需要上拉电阻的,

因为此时只有当P0为1时候,才能够使后端导通。

图3-6 P0端口的1位结构

3.3驱动模块的设计 在这里我们用的是ULN2803达林顿管来做系统的驱动,ULN2803采用AP=DIP18,AFW=SOL18封装方式。8个NPN达林顿晶体管,1-8引脚:输入端;11-18引脚:输出端;9引脚:地端;10引脚:电源+,连接在阵列非常适合逻辑接口电平数字电路(例如TTL,CMOS或PMOS上/ NMOS)和较高的电流/电压,如电灯,电磁阀,继电器,打印锤或其他类似的负载,广泛的使用范围:计算机,工业和消费应用。所有设备功能由集电极输出和钳位二极管瞬态抑制。 该ULN2803是专为符合标准TTL,而制造ULN2804适合6至15V的高级别CMOS或PMOS上。该电路为反向输出型,即输入低电平电压,输出端才能导通工作。

图二 ULN2803内部电路图 (1/8单元)

3.4 光立方整体设计思路

3.4.1 LED灯排序方式设计

如图为光立方的主视图,分别是光立方的八个竖面,阳极的八个端口由单片机P3.5口扩展出来的八个74HC595控制,而阴极则每层相连,由P3.6,P3.7口控制。

图3-8 3D8光立方效果图

3.4.2 LED灯接法方式设计

由于光立方是由8*8*8的512个灯组成的必须每盏灯都是单独控制的,可单片机的I/O口没有那么多,那么我们就要通过扩展I/O口来实现控制,用什么来扩展呢?这里我们用到的是结构简单的74hC593,用它我们就可以一个口扩展成八个口,这样单片机的八个口就可以扩展出8*8一共64个I/O口这样就可以控制LED灯的一个正极那么对于负极我们怎么控制呢,这里我们可以通过共连阴极的方法控制,就是把每层LED的阴极都连在一起,八层就有八个接口,这八个接口通过ULN2803控制接在单片机的另外八个接口上其实我们就是用单片机的16个I/O接口,通过扩展得到了64+8个接口,这样就可以把512个LED灯给控制好了,原理图如图3-9所示。

第八个74HC595八个口 x轴 8到………1从 y轴 第一个74HC595八个口

ULN2803的八个口 图3-9 LED结构设计图

3.5光立方搭建方法 3.5.1将LED从点到线的搭建

准备材料首先要找一块万用板如图3-11,这样就可以保持灯与灯之间的距离保持相等,在这里我们用的是白发蓝的LED灯如图3-12所示,长正短负,我们采用的是共阴的连接方法,所以要把灯的形状折成如图3-13的样子,必须要折成90度,把灯插在原来选好的孔内,两个灯之间的距离是23mm,然后把八个这样的灯焊接好如图3-14所示 ,注意:弯折阴极脚时弯曲处尽量靠近灯体不要留太长,这样焊接阳极时不容易造成短路。

图3-11万能板 图3-12 LED灯的正负极

图3-13 LED灯的形状 图3-14 已搭好的8个LED灯

这样做出一条有八个LED灯组成的共阴极的灯链如图3-15所示,这里要注意焊接的时间和焊锡的用量,要是焊接时间太长就会把LED灯烫坏,用焊锡要均匀,不能太多也不能太少,太少连接不牢固,太多不美观。

图3-15焊接好的8个LED灯链

3.5.2将LED从线到面的搭建

接下把焊好的64个共阴的LED灯的阳极相连如图3-16所示,相连后就得到一个8*8的灯面如图3-17所示,注意:在焊接过程中会产生静电,所以要求电焊铁要接地,焊接完后要用万用表测量每个灯是否正常,是否存在虚焊和击穿。

图3-16阳极相连 图3-17 64个LED焊接图

3.5.3将LED从面到体的搭建

最后把焊好的八个面分别接在做好的电路板上,阳极对应接在八个74HC573的八个引脚上,阴极每一层给连接起来接在ULN2803的输出端口上,这样硬件模块的显示部分就算做好了,如图3-18所示。

图3-18已搭好的8层LED灯

3.6 PCB板的焊接 3.6.1 PCB板的制作

PCB板制作分为制作印制电路板、清洗与打孔和检修三个环节,对于PCB板印刷的制作环节大致分为印制底图图样描绘、底图掩膜层制作和蚀刻加工等。对于主板的大小选择上,主板是整个光立方的底座,大小要合适,不宜过大也不宜太小,太大不好看,太小放不下,一般设计的和焊的LED灯的尺寸差不多,刚好放的下还有点剩余最好,这样既美观又节省资源。

首先要用到DXP进行电路板的图纸设计和仿真测试,当仿真没有错误后,就可以自动布线,手动布局,生成3D的PCB版图,把生成的PCB版图文件拿去制作PCB板。

3.6.2 主板的焊接

在焊接主板之前必须保证主板清洁干净,检查是否有破损有裂缝,各个元器件的符号是否清晰,所要焊接的元器件是否齐全,焊各种元器件的准备工作是否都做好了,元器件是否都是完好的功能是否正常都要先检测好,这些都确定没有问题后,就开始按原理图上的位置焊接元器件,焊接时用锡不要太多,那样会很不好看,而且有可能会和附近的元器件发生短路,焊接时间不能太久,很多元器件受不了电烙铁的高温,还要避免静电干扰,焊点要小要均匀,刚好焊住而且焊点光滑明亮。

3.6.3主芯片的焊接

单片机的焊接是个难点,因为用的是贴片的单片机焊脚很小,焊锡一多就容易混成一团,对于贴片单片机的焊接和其它元器件的焊接不同,它的焊接首先是要固定四个脚,把四个角用焊锡固定好了,就一条边一条边的焊,先是在一条边上用很多的焊锡,再用焊锡膏弄在焊锡上,然后烙铁从一条边上划过,这时焊锡在焊锡膏的作用下就会彼此分离就刚好把单片机的引脚焊住了,以此类推其它边也焊完了,这样焊接的单片机既美观又简单,如果你按传统办法焊接,很容易两个引脚短接还不美观。

图3-1 单片机焊接

3.6.4开关及按键的焊接

按键的焊接是最简单的,四个引脚分别插在四个孔中,要注意的是按键的四个脚是两两一对的,不要认为他们都是一样的,要是焊错了就没有按键的功能了,就成了一根导线了,自锁开关的焊接比较复杂,特别是六根引脚的开关,它的按下和弹回来接通的引脚是不同的引脚,自锁开关的原理图如下图4-2所示。

图3-2 自锁开关图

3.6.4排插及晶振的焊接

排插的焊接需要把针和板子贴紧,不能留下空隙,而且排插短的那头接板子,在焊接的时候排插会比较热,不能用手直接接触,先焊排插的两端,焊完两端排插就固定了,再焊剩下的就简单了,对于晶振的焊接要迅速,晶振比较脆弱,尽量快点焊接。

图3-3 PCB板的正反面

第四章 软件设计

系统的组成有两各个部分一个是硬件一个则是软件,软件的伸缩性很大,编写的好的程序实现起来简单不易出错,编的不好的数据会出现很多问题,本系统采用的是模块化的设计方案,减少软件出错的概率,在软件的设计过程中需要用到了软件编辑器,软件可以使单片机上电初始化,也可以是单片机实现特定的功能效果。

本系统程序主要由三大块组成,分别是主程序、按键程序和显示程序,软件的执行过程如下图3-1所示。首先程序执行主程序,在主程序中判断按键程序,当接收到按键程序时,主程序调用显示程序,把显示程序发给硬件,硬件显示出来。

图4-1 软件执行图

4.1 主程序的设计 一般编写程序都是从功能出发,要求怎么的功能就写怎么的代码,本系统都是采用C语言的编码格式编写的代码,设计了三个外接按键P3.2、P3.3、P3.4,分别是主菜单、确定和退出,主菜单里有自动模式、频谱模式、测试模式,系统还设置了呼吸待机灯,流程图如3-2所示:

图4-2 主程序流程图

程序的开始之前必须要写好各个模块的初始化定义,初始化的内容有中断初始化,定时器的初始化,串口的通信方式和波特率的选定,I/O口的设定等等。

4.2 显示程序的设计 显示程序一般由字库代码和执行程序构成,字库代码可以借助取模软件,由静态的画面通过像素点的移动,利用人眼的视觉延时效果,产生动的效果,这就要求对扫描时间的控制和频率的的快慢决定的很好。

4.2.1显示模块的原理

要使静态的画面动起来就需要对静态图像不断的刷新,图像与图形之间切换的速度很快,这样人眼看出来的效果才是流畅的动画,扫描是把光立方分成很多的部分,一个部分一个部分的扫描显示,当扫描到最后一部分时又开始从第一部分循环扫描,其实每一个LED灯的亮度都是由刷新的速度决定的,刷新速度快灯的亮度就亮,这是因为人的视觉的延时,刷新速度太快亮灭的效果就看不出来,在人眼里看到的就是一直亮着,而且亮度还会叠加,实际的灯的亮度比看到的灯的亮度暗很多。

4.2.2 显示程序的设计

本设计的程序采用的是动态的扫描显示,通过选通一列的方式,这时程序里的一行数组就按照由低位到高位的方式依次从单片机的I/O口输出到驱动74HC595移位寄存器中从寄存器中输出到LED的阳极控制灯的亮暗,这样一次一次的循环就可以产生一个动态的画面,整个流程图如下3-3所示。

单片机高速的输出数据,数据通过P3.5口到达74HC595,通过综合选通端口选通一个74HC595输出,紧接着单片机又通过P3.5口输出另一组数据,通过改变选通端口输入到另一个寄存器中再显示,其实这些数据都有一个字模,通过调用这些字模,再配合数据的左移右移,或者加一减一,这样一个字库就可以动起来,再加上延时程序这样程序就可以完美的显示。

for(k=0;k<60;k++) for(i=0;i<8;i++) { Set595(shuzi[7][i]); Set595(shuzi[6][i]); Set595(shuzi[5][i]); Set595(shuzi[4][i]); Set595(shuzi[3][i]); Set595(shuzi[2][i]); Set595(shuzi[1][i]); Set595(shuzi[0][i]); P1=y1[j]; P2=z1[7-i]; dis595(); } } }

/**********************************************************************/ /*方框缩放*/

/**********************************************************************/ void suofang() { uChar x,y,z,w,e,r,a,s; for(y=0;y<8;y++) { for(x=0;x<8;x++) { if((z==0)&&(y==0)||(z==0)&&(y==7)) { P1=y1[y]; P2=z1[0]; Set595(x1[x]); dis595(); } } } for(e=0;e<8;e++) { for(r=0;r<8;r++) { if((w==0)&&(e==0)||(w==0)&&(e==7)) { P1=y1[e]; P2=z1[r]; Set595(x1[0]);

dis595(); } } } for(e=0;e<8;e++) { for(r=0;r<8;r++) { if((w==0)&&(e==0)||(w==0)&&(e==7)) { P1=y1[e]; P2=z1[r]; Set595(x1[7]); dis595(); } } } for(a=0;a<8;a++) { P1=y1[a]; P2=z1[7]; Set595(x1[0]); dis595(); P1=y1[a]; P2=z1[7]; Set595(x1[7]); dis595(); } for(s=0;s<8;s++) { P1=y1[s]; P2=z1[0]; Set595(x1[0]); dis595(); P1=y1[s]; P2=z1[0]; Set595(x1[7]); dis595(); } for(y=0;y<8;y++) { for(x=0;x<8;x++) { if((z==0)&&(y==0)||(z==0)&&(y==7))

{ P1=y1[y]; P2=z1[7]; Set595(x1[x]); dis595(); } } } }

/**********************************************************************/ void xingdian() { uChar x,y,z; for(z=0;z<8;z++) for(y=0;y<8;y++) { for(x=0;x<8;x++) { if((y==0)||(y==2)||(y==4)||(y==6)||(y==1)||(y==3)||(y==5)||(y==7)) { P1=y1[y]; P2=z1[z]; Set595(x1[x]); dis595(); } } delayms(20000); } } /*主函数*/

/**********************************************************************/ void main() { uChar j; while(1) { daojishi(); //倒计时7—0 for(j=0;j<50;j++) { suofang(); //方框缩放 } // xingdian(); //星点 }

图3-3 显示程序流程图

4.3 软件调试 单片机是这个设计的核心,在硬件正常工作的情况下检测软件才是正确的,要是硬件都存在问题去检测软件完全没有意义,对于硬件的检测,可以对单片机的时钟引脚18和19检测,引脚18对地的电压在2.24v,而引脚19是2.09v,对于复位电路的检测则是用5v的电源短接下引脚9,模拟复位电路,如果单片机复位正常则不存在问题。在程序的编写中用keil编写,keil软件可以生成.HEX文件,因为我们用到的下载软件时专业的STC—ISP.exe软件,这个软件只能识别.HEX文件,只有.HEX文件才能写入单片机。在程序的编写中全部都是采用C语言编写,C语言简洁灵活,兼容性高,编译简单,执行效率高,对于循环的使用方便。

第五章 成品测试和问题分析

5.1 成品测试

5.1.1. 硬件调试

本设计因为用到的LED灯比较多,必须确保每个灯都正常工作,如果512个LED灯有一个出现击穿或者不亮就必须把八层LED都拆开,取下坏掉的灯换上好的再焊上,而且要保持结构的整齐度行列对齐,这样显示的效果就会比较好。

在测试过程中发现一些问题,以下是问题及问题的解决方法:

1、这个系统功能比较强大,所以需要的驱动程序和程序量比较多8k的89C51完全不够代码的存储会出现程序的溢出和无法编译的情况。

解决方法:这里我们采用STC12C5A60S2 单片机,它比89C51有更大的存储,STC12C5A60S2单片机有60K FLASH ROM,而且还自带AD功能,适应高速扫描的光立方。

2、本系统发现部分LED灯的亮灭没有规律,有些灯甚至都不亮,还有些灯闪烁不定。 解决方法:这里我把八层LED灯从电路板上分别取下,单个灯用万用表的测灯功能测量,发现不亮的LED灯时,我就给单个替换。

3、在单个灯的替换过程中居然发现我测量的单个灯亮了,可是我没测量的LED灯也同时亮了

解决方法:这里我们知道可能是LED灯在焊接过程中被击穿了,我采用的是反接正负横竖排的方法,当我们反接时坏掉的LED灯就会点亮,还有一种方法就是万用表的正负两极都接在横排或者竖排,这时被点亮的LED灯就是被损坏的,取下替换了就可以了。

4、在光立方的显示中有某一层始终是亮的,不该点亮时是亮的,当应该点亮时又特别亮,而且把负极的引线去掉依然点亮。

解决方法:这种情况就是整层中有一盏灯坏了,当我们把负极的引线去掉后整层依然点亮,仔细观察发现这一层会有一盏灯不亮,坏的灯就是它了,把他取下替换就可以了。

5、系统焊接完成上电后发现没有反应,灯不亮,系统不工作。

解决方法:这里我们用万用表对电路板个部分检查,发现系统没有供电,检查电源模块发现电源焊接口虚焊,电路板的焊点脱落,这里我们采用外部备用口送电。

6、本系统由于焊接点比较多,而且焊接的点离灯头很近,所以很容易把灯烧坏,焊烙铁在焊接过程中会产生静电,静电可以把LED灯给损坏。

解决问题:在这里我们考虑把焊烙铁接地,如果焊烙铁没有接地线我们可以在焊烙铁中部加一根引线接在暖气片上或者直接接地,焊完一行检查一次,焊完一个面再检查一次,最后全部焊完再检查,确保LED灯全部正常工作。

5.1.2. 软件系统

光立方程序比较多,需要的存储空间要比常规的51系列单片机的大,而且刷新率非常的高,要求的性能很高,软件编写难度大,要有很强的空间思维意识,想像力要很丰富,程序变化大,编译中存在很多问题,所以需要精心的调试很改进,优化出最简单效果最好的程序。

1、烧入程序后,LED灯的亮度很不均匀,明亮闪烁。

解决方法:检查元器件是否有虚焊和漏焊,调整延时的时间长短,调试出效果最佳的延时时间,

2、用keil编写完软件发现无法编译通过,显示程序P3无定义。

解决方法:头文件选择错误不能选择常规单片机的头文件,要自制一个头文件,放在主程序的文件下。

3、程序编译完成后,编译也通过了,没有产生.HEX文件。

解决方法:在软件中没有选择产生.HEX文件,在设置里设置产生.HEX文件 4、光立方显示不稳定,常常会自我中断,不按程序设定的功能显示。

解决方法:程序编写中对于按键没有处理,要加一个按键去抖动判断,判断按键是否按下而不是抖动触到。

5.2 结果分析 本设计经过一个多月的焊接再加上一个多月的调试和改进,现在总算顺利完成了,硬件和软件的运行还是算比较稳定,本设计利用硬件的立体性,利用软件的变化多样性,这两者结合起来就可以产生非常绚丽的画面效果,该设计功能强大,DIY性特别强,可以通过改变程序产生很多意料不到的画面效果。

第六章 结论

本毕业设计主要采用STC12C5A60S2单片机控制,加上几个辅助模块,再加上LED显示模块,就构成了立体显示的8*8*8的光立方,此光立方集合了美学,研究,观赏于一体,既有观赏性又有研究和开发的多种优点,此外在光立方LED的焊接过程中要求比较高,工程量比较大,可以大大锻炼焊接能力极大的提高自己的动手能力,是个很有趣很受锻炼的设计。

从毕业设计的题目选择到基本确定大概花了一个星期,在确定题目的同时我也积极在网上查找资料,有时去图书馆看看关于单片机类的书籍,查查芯片的使用和要求及优点和不足,最终我找到最合适的STC12C5A60S2这款芯片集合了好多芯片的优点,功能特别强大,现在最新的单片机,正由于它是最新的,所以在找资料和画原理图方面很不好实现,几乎很难找到关于它的资料,即使找到了也是纯英文的,还要自己翻译,在原理图方面也一样复杂,几乎没有关于它的封装,在找资料这块花了不少时间,对于LED灯焊接方面也要求的很高,重复无聊的折LED的管脚这都还好,主要是LED灯的击穿问题特别难处理,对于单个LED我们需要检测,对于焊成条形的LED也要检测,对于焊成面的LED还要检测,最困难的是对于焊成体的LED还要检测,有时一条LED灯没问题,可是焊成面就出问题。虽然在动手做这个设计之前我也是做好各方面准备,可是在实施的时候遇到的问题还是使我料想不到,各种软件的使用还有贴片元件的焊接都是很考验基本功的,有些不懂的我就在网上看相关视频,到各种DIY论坛请教这方面的“大神”,可以说我已经下载了网上所有关于光立方的资料,这过程很辛苦,有时一天就为了解决一个问题,从早找到晚,比如找74HC595的PCB封装图,或者STC12C5A60S2的原理图和封装图。对于软件模块要求的就更高了,软件的书写规范和字库的创建,都是一个不小的工程,这个系统中用到的延时程序,每一帧的时间计算,扫描的频率和灯的亮度,都要细细计算,编写调试再编写再调试,这样反复好多次才终于编写出一个稳定的程序。

总的来说,做这个设计确实累,可是当光立方正常工作时看到它显示出绚丽的动画时,付出的这一切都值得了,在制作过程中得到的经验和学到的知识是扎实的,在制作和研究过程中觉得特别的充实,理论知识得到了巩固,知识再也不是仅仅停留在书面上了,动手能力也加强了很多,现在懂得了自己查资料,自己分析问题解决问题,可以说这次的毕业设计做的非常的有意义,受益匪浅。

参考文献

[1]阎石. 数字电子技术基础第四版[M].北京:高等教育出版社, 1998.12:77 -174 [2] 张瑞玲.单片机原理与应用 西北工业大学出版社2010年12月

[3]刘守义主编. 数字电子技术(第二版) [M]. 西安电子科技大学出版社, 2007,7 [4]陈堂敏.刘焕平主编.单片机原理与应用.北京:北京理工大学出版社,2007 [5]余孟尝《数字电子技术基础简明教程》·高等教育出版社

[6]邓元庆.数字电路与逻辑设计[M].北京:电子工业出版社, 1995:49- 195. [7]肖洪兵.跟我学用单片机[M].北京航空航天大学出版社,2002 [8]杨元挺《电子技术技能训练》·电子工业出版社

[9]王东峰等.单片机C语言应用100例[M].电子工业出版社,2009

[10]潘永雄.《新编单片机原理与应用》,西安:西安电子科技大学出版社,2003 [11]童诗白,华成英,《模拟电子技术基础》,北京:高等教育出版社,2000 [12]马忠梅等,单片机的C语言应用程序设计,北京航空航天大学出版社,

[13]冯建华,赵亮.单片机应用系统设计与产品开发[M].北京:人民邮电出版社,2004 [14]付晓光.单片机原理与使用技术[M].清华大学出版社,ISBN7- 81082- 169- 5TP [15]胡汉才《单片机原理及其接口技术》·(第2版) 北京:清华大学出版社 [16]李中发《数字电子技术基础》·中国水利水电出版社

致谢语

临近毕业现在才感觉学校那么的温暖,有种不舍的情怀,在离别之际我留在这学校的唯一作品就是这份毕业设计,这里要感谢我的导师,在我做毕业设计的过程中,从论文的撰写毕业设计的选题还有设计思路的扩展方面都给予了很大帮助,主任抽出宝贵的时间给我指导,时不时的问我有没有什么困难,有困难她给我解决,处处对我很关照,作为导师尽职尽责和蔼可亲。在这也谢谢我的同学们给于我帮助,给我提供焊接和很多软件和硬件测试工具。

附 录

1、实物图:

2、系统原理图:

U2C1C2+5VC3111412SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679C1111412U6SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679C3U10:Ab0174HC042U1d119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221b022b123b224b325b426b527b628b71011121314151617C410a013MROEC4a01013MROE74HC595PECKAGE=SOP1674HC595PECKAGE=SOP16U10:Bb1374HC0441512345679d218XTAL2U3C1111412SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679C11114C312U7SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'e19RSTC3U10:Cb2574HC046+5V293031PSENALEEAC410a013MROEC410a013MROE74HC595PECKAGE=SOP1674HC595PECKAGE=SOP16U10:Db31374HC0412C2C1C3C4220UF12345678+5VP1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52U4C1f1f21114SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679U8C1111412SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679C3U10:Eb41174HC0410C312C4a0C410a013MROE1013MROE74HC595PECKAGE=SOP1674HC595PECKAGE=SOP16b59U10:F874HC04C1d130pFx3C310uFx1f1C1x2111412U5SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679C11114U9SH_CPDSST_CPQ0Q1Q2Q3Q4Q5Q6Q7Q7'1512345679X1CRYSTALNET=b0d2R10f2e1C3U11:Ab6174HC042C312C230pF1kPECKAGE=res300thR950kPECKAGE=res300thC410a013MROEC410a013MROE74HC595PECKAGE=SOP1674HC595PECKAGE=SOP16U11:Bb7374HC044 3、系统PCB图:

程序清单

#inClude

#inClude //空语句调用头文件 #inClude\

#define uChar unsigned Char #define uint unsigned int

/**********************************************************************/ sBit DS=P1^0;

/**********************************************************************/

/**********************************************************************/ sBit CLK=P1^1; //74HC595的SH-CP(11脚)

sBit STB=P1^2; //74HC595的时钟和输出锁存(12脚)

/**********************************************************************/ /*坐标数组*/

/**********************************************************************/ uChar Code shu[8]={0,1,2,3,4,5,6,7}; //十进制数选 uChar Code x1[8]={0x7f,0xBf,0xdf,0xef,0xf7,0xfB,0xfd,0xfe};//595数据 uChar Code y1[8]={0xfe,0xfd,0xfB,0xf7,0xef,0xdf,0xBf,0x7f};//595使能

uChar Code z1[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//层扫描

/************************************************************************/ /*亮度调节延时*/

/************************************************************************/ void delay(unsigned int i) { unsigned int j; for(;i>0;i--) { for(j=5;j>0;j--); } }

/**********************************************************************/ /*ms延时*/

/**********************************************************************/ void delayms(uChar xms) { uChar i,j; for(i=0;i

/************************************************************************/ /*亮度调整*/

/************************************************************************/ /*void PWM_LIGHT(unsigned Char P) { OE=0; delay(P); OE=1; delay(10-P); } */

/***********************************************************************/ /*595发送一字节*/

/***********************************************************************/ void Set595(unsigned Char xie) { unsigned Char i; unsigned int temP; temP=xie; for(i=0;i<8;i++) { if(temP&0x01) {

DS=1; } else DS=0; temP=temP>>1; CLK=0; _noP_(); _noP_(); CLK=1; //移位上升沿有效? } }

/**********************************************************************/

/**********************************************************************/ void dis595(void) { STB=0; _noP_(); _noP_(); STB=1; //串行输出上升沿有效 }

/**********************************************************************/

/**********************************************************************/ void Set595_1(unsigned Char xie,unsigned Char xie1) { unsigned Char i; for(i=0;i<8;i++) { DS=xie&0x01; DS=xie1&0x01; DS=0; DS=1; xie>>=1; xie1>>=1; //移位上升沿有效? } }

/**********************************************************************/ /*倒计时*/

/**********************************************************************/ void daojishi(void) { uChar i,j,k; for(j=0;j<8;j++) {

本文来源:https://www.bwwdw.com/article/t58h.html

Top