《光立方毕业论文含程序+原理图+实物图培训讲学.doc》由会员分享,可在线阅读,更多相关《光立方毕业论文含程序+原理图+实物图培训讲学.doc(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。光立方毕业论文含程序+原理图+实物图-目录第一章绪论-1-1.1课题的背景-1-1.2研究目的和意义.-1-1.3论文研究内容与结构安排-1-第二章总体设计-2-2.1工作原理-2-2.2各模块方案选择与论证-2-2.2.1单片机主控制模块-2-2.2.2驱动模块-2-2.2.3显示模块-2-第三章系统硬件电路设计与实现-3-3.1硬件电路设计-3-3.2单片机最小系统-3-3.2.1时钟电路-4-3.2.2P0口外接上拉电阻-4-3.3驱动模块的设计-5-3.4光立方整体设计思路-6-3.4.1LED
2、灯排序方式设计-6-3.4.2LED灯接法方式设计-7-3.5光立方搭建方法-7-3.5.1将LED从点到线的搭建-7-3.5.2将LED从线到面的搭建-7-3.5.3将LED从面到体的搭建-8-第四章系统软件设计-9-4.1主程序设计-9-第五章系统调试及结果分析-10-5.1系统调试-10-5.1.1.硬件测试-11-5.1.2.软件测试-11-5.2结果分析-11-第六章结论-12-参考文献-13-英文摘要-14-致谢语-15-附录-16-1、实物图-16-2、系统原理图-17-程序清单-18-基于单片机的光立方设计刘荣三明学院09级电子信息工程专业福建三明365004摘要本文介绍了一款
3、基于STC12C5A60S2单片机光立方的设计并阐述了整体设计思路,介绍了系统软硬件设计的主要方法。系统采用的是8*8*8模式构成512个LED灯后组成的光立方,距离为14cm*14cm*20cm(长.宽.高)10,所设计的光立方驱动电路采用uln2803芯片,呈现出立体动画效果。关键词光立方;74HC573;单片机-1绪论1.1课题研究的背景:“光立方”一词正逐渐引起了全国人民的关注,并得到了全球的高度肯定。由此,也掀起了光立方的设计与学习热潮,在原有的基础上不断增加难度,增加变换花样,吸引电子爱好者对其研究、创新。事实上,“光立方”已经渗透到以下几个方面:照明类LED光效户外景观照明展开的
4、视觉装饰活动;信息传播类LED光效各种类型的大屏幕点缀着人们的生活;光立方制作所需材料较常见,成本低廉、性价比高等优点具有较高的研究价值。1.2课题研究的意义:本次毕业设计一改传统的平面流水灯的风格,而是从平面向立体发展,通过更宽广的三维空间呈现出更加绚丽的效果,直接冲击着人们审美视觉,不在停留在乏味的平面成像。设计并采用更优于89C51的STC12C5A60S2单片机,使系统具有更强大的功能和驱动能力。再者,从平面向立体这符合科技发展的要求,适应主流。3D8光立方主体部分由512LED灯组成,在制作过程中锻炼学习动手焊接能力,并以低成本,智能化产品对实现经济利益、商业价值的形成具有积极的推动
5、作用。1.3论文研究内容与结构安排本文研究的内容如下:单片机控制模块:采用60KSTC12C5A60S2控制核心,其它相关的外围电路构成本系统的模块;时钟信号电路:采用普通晶体时钟源,其中晶体用11.0592MHZ的石英晶振;显示模块:通过对单片机编程,利用程序来控制LED的亮灭,以达到动画的效果。具体介绍内容安排如下:第二章主要阐述系统方案的选择与论证,将系统分为主控模块、驱动模块、显示模块等,并分别对各模块方案进行了选择与论证。第三章主要介绍了个硬件电路的设计,还对各单元实现的功能以及芯片引脚功能特点进行说明。同时阐述整个系统的设计思路以及搭建方法。第四章 主要阐述主程序的编写以及整个软件
6、的框架。第五章 阐述的是整个光立方系统的调试过程以及在调试过程中出现的软件、硬件问题。并阐述了解决这些问题的办法。第六章主要对整个毕业设计的设计过程进行总结,并阐述了在制作过程中的收获和心得。2总体设计2.1工作原理本设计以STC12C5A60S2单片机为控制核心设计一个由512个蓝色LED灯组成的光立方。系统主要由主控、驱动、显示等模块构成。系统模块框图如图2-1:图2-1系统结构框图2.2各模块方案选择与论证2.2.1单片机主控制模块方案一:采用常用的89c51单片机作为主控芯片,由于89c51只有8K的内存,而光立方需要形成多种动画程序量大,可能会有溢出的情况发生。所以不采用此方案。方案
7、二:采用51系列的增强型芯片60KSTC12C5A60S2单片机作为主控芯片2,其主要优点1.无法解密,采用第六代加密技术;2.超强抗干扰;3.内部集成高可靠复位电路,外部复位可用可不用;4.速度快,比8051快8-12倍11;因此采用此方案。2.2.2驱动模块方案一:采用8个8050NPN三极管驱动,虽能起到反相的作用。但由于需要八个数量较多,对于整体布局效果不佳,影响美观。并且性价比不高,所以不采用此方案。方案二:采用八重达林顿uln2803,1至8脚为8路输入,18到11脚为8路输出。驱动能力500MA50V。因为整个光立方体由512个LED灯组成,所需电流也较大,并且一片芯片就能等效8
8、个三极管的作用,大大缩小元器件占用空间。综上所述选择ULN2803芯片。2.2.3显示模块方案一:由于我们常用的LED灯不容易聚光,光发散比较厉害点亮时相互之间将会有影响,容易影响视角效果。方案二:我们放弃我们经常用的草帽型LED,采用的是白发雾状(乳型)蓝灯,工作电压为2.74.2V,工作电流2mA10mA。使用雾状的比较聚光,512个灯同时点亮时也同样能够达到动画的效果,如图2-2所示:图2-2雾面乳型LED灯3系统硬件电路设计与实现3.1硬件电路设计本电路是由STC12C5A60S2单片机为控制核心,其和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,具
9、有串口烧写编程功能,低功耗1;时钟源电路有很多种,比如阻容低速时钟源、普通晶体时钟源、带缓冲放大的晶体时钟源等等,考虑到电路稳定及材料选购等方面,决定采用普通晶体时钟源,其中晶体用12MHZ的石英晶振12。显示部份由显示部份由512个雾面LED灯组成来进行显示。3.2单片机最小系统单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。对STC12C5A60S2单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/输出设备等7(见图3-1)。单片机的最小系统如下图所示:图3-1单片机最小系统框图图3-2单片机最小系
10、统3.2.1时钟电路在设计时钟电路之前,让我们先了解下单片机上的时钟管脚:XTAL1(19脚):芯片内部振荡电路输入端。XTAL2(18脚):芯片内部振荡电路输出端。XTAL1和XTAL2是独立输入和输出反相放大器,它可以被配置为使用石英晶振的片内振荡器。内部方式的时钟电路如图3-3(a)所示,在XTAL1、XTAL2的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡9。经过综合考虑,本设计中采用了11.0592M的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。一般情况下选取33pF的陶瓷电容就可以了。8外部方式的时钟电路如图3-3(b
11、)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。15(a)内部方式时钟电路(b)外部方式时钟电路图3-3时钟电路另外值得一提的是检测晶振是否能够起振的方法可使用示波器能看到XTAL2输出的非常好看的正弦波,也可以使用万用表测量(把挡位打到直流挡,这个时候测得的是有效值)XTAL2和地之间的电压时,可以看到2V左右一点的电压。133.2.2P0口外接上拉电阻STC12C5A60S2单片机的P0端口为开漏输出,内部无上拉电阻(图3-6)。所以在当做普通I/O输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号正常
12、输出,一定要外接上拉电阻。16图3-6P0端口的1位结构3.3驱动模块的设计本设计采用的是ULN2803达林顿管驱动器进行驱动。ULN2803,采用AP=DIP18,AFW=SOL18封装方式。ULN2803是八重达林顿,1至8脚为8路输入,18到11脚为8路输出。驱动能力500MA50V。应用时9脚接地,如果驱动感性负载,10脚接负载电源V+。输入的电平信号为0,或5V。8输入0时,输出达林顿管截止。输入为5V电平时,输出达林顿饱和。输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作。5八路NPN达林顿连接晶体管阵系列特别适用于低逻辑电平数字电路如图3-7(诸如TTL,CMOS或
13、PMOS/NMOS)和较高的电流/电压要求之间的接口,广泛应用于计算机工业中。3所拥有的器件具有集电极开路输出和续流箱位二极管,用于抑制跃变。ULN2803的设计与标准TTL系列兼容,而ULN2804最适于6至15伏高电平CMOS或PMOS。3(a)ULN2803引脚图(b)ULN2803逻辑图图3-7ULN2803芯片3.4光立方整体设计思路3.4.1LED灯排序方式设计将每层的LED排序如图3-8,D0,D1,D2,D3D62,D63分别为64个LED阵列实际排序方式,也就是光立方的俯视图,对应下图分别是其数据信号O(_)U(_)T(_)0,O(_)U(_)T(_)1,O(_)U(_)T(
14、_)2,O(_)U(_)T(_)3O(_)U(_)T(_)62,O(_)U(_)T(_)63;图3-83D8光立方效果图3.4.2LED灯接法方式设计1.“光立方”是由8层这样布局的LED组成,每层位置排列全部一致,如图3-9。每层LED的所有正极全部接到一起,然后连接74hc573的行扫描驱动电路,通过74hc573译码确定使能哪一层3.各层同一位置LED的负极连接都一起,例如第一层的D0和第二、三、四等层的D0的负极都连接一起,然后再把它们接到O(_)U(_)T(_)0上面,如图3-10。图3-9LED层与层的连接方式图3-10LED负极与输出端连接方式3.5光立方搭建方法3.5.1将LE
15、D从点到线的搭建首先制作一块搭建用的木板如图3-11,木板孔与孔直接的距离为22.86mm,必须与电路板上的两空距离一致。将LED灯逐个安在板上,并对LED的脚进行折弯使正极引脚与负极的夹角为直角。最后将8个LED的阴极焊接在一起,如图3-12。注意:弯折阴极脚时弯曲处尽量靠近灯体不要留太长,这样焊接阳极时不容易造成短路。图3-11搭建木板图3-12已搭好的8个LED灯3.5.2将LED从线到面的搭建进行八次上诉焊接后接下来就是将8束的LED焊接起来。在从点到线时是将所有LED的阴极连在一起,而这次则是将所有LED阳极弯折并依次连接,如图3-13。注意:由于焊接过程中将产生静电容易将LED烧坏
16、,因此本项工作完成后请认真检查每个灯的好坏,可以用万用笔等工具检测。同时检测灯与灯之间有没虚焊情况。图3-13已搭好的8排LED灯3.5.3将LED从面到体的搭建最后一个步骤是将已焊好的8个面进行焊接,其方法是将之前8个面上的阴极对应位置依次焊接,最后留出的8个阴极与ULN2803的输出端进行连接,LED的64阳极则与74hc573的数据输出端依次连接,如图3-14。图3-14已搭好的8层LED灯4系统软件设计4.1主程序设计程序主函数运行流程框图如图4-1。图4-1主程序框图首先,将系统所需要的文件的宏定义文件包含进来。定义:74hc573控制输入模块P0口;uln2803驱动模块P1;74
17、hc573控制输出模块P2口。初始化定时器0,延时5us,开中断,使其处于等待中断状态。接着,初始化光立方体,驱动光立方,利用扫描形式使光立方体的LED灯逐个点亮形成动画。5系统调试及结果分析5.1系统调试5.1.1.硬件测试本系统由于用到较多的LED灯,对于焊接和调试造成一定的难度,512个灯中只要有一个出问题替换工作将是非常的麻烦,必须把八层的LED拆开再取出坏的LED重新焊接。在对电路检查时由于本设计电路版面较大,检查起来并非易事。在设计过程中发现了一些问题。以下为主要的问题及解决方案:1、本系统由于程序量要求大,512个LED灯需要较高的驱动电流和较大工作量的编程,传统的8K89C51
18、单片机将导致程序溢出无法编译。解决方法:采用单片机STC12C5A60S2单片机,STC12C5A60S2单片机内部就自带高达60KFLASHROM,并具有自带的AD功能,对光立方功能拓展提供了更宽广的平台。2、本系统在硬件测试时发现光立方体的LED灯普遍偏暗,电流较低,无法达到预期的效果。解决方法:首先先进行电路的检测,测试是否存在短路、短路情况。发现没有问题,接着在io口上接了上拉电阻,问题得以解决。3、调试过程中烧入全亮程序发现有一束八个灯同时不亮。解决方法:由于74hc573控制着光立方体XY灯的亮灭,一个引脚控制八个LED,由此原理可以猜测可能是其中一个控制其亮灭的74hc573引脚
19、出问题。通过与其他引脚的电压对比,发现控制这八个灯的引脚电压明显偏低,经仔细检查果真由于线路断路造成,问题得以解决。64、在调试过程中发现插上已烧入程序的单片机后对光立方主体起不到控制的作用。解决方法:根据经验猜测是单片机引脚没起作用造成的。后来换了块单片机发现动画出来了,由此判断是单片机烧坏造成。5、调试过程中发现uln2803不起作用,将其输入端口直接接VCC却不能逐层点亮。解决方法:根据经验判断为驱动芯片烧坏,换了块芯片问题还是还是没有得以解决4。于是开始检测与之相连的最小系统,通过测试最小系统上的电容等元器件后发现问题依然存在。但由于整体布局中线路较多遂放弃一个个器件进行检查而是单独外
20、接一块最小系统来对比论证,通过实践得知问题确实出现在原先的最小系统上。6、由于电烙铁工作时会有较小的静电产生,很容易烧坏LED灯。解决问题:问题可能处在电烙铁在工作过程中产生的静电上,以下为减少静电影响的方法:1.将烙铁头跟接地线相连,以泄放产生的静电。2.如果烙铁没有接地线那就光脚才在地上也会降低静电的影响。把八个灯归为一组,焊完组个检查,焊完64个整排再进行检查,把LED坏的概率降到最低。5.1.2.软件测试3D8光立方主要是通过程序来控制光立方体从而达到多种动画变化的效果。由于要形成多样的3D动画,在变成过程中也出现了不少的问题。最后经过多次的细心修改,顺利的完成了编程工作。主要问题有:
21、1、烧入程序后,不能显示完整的动画。解决方法:重新检查程序,检查对应的引脚定义有没错。再者检查延时是否过快导致动画不明显。2、第一次烧入程序时用作为头文件名,发现程序溢出编译不通过并且检查程序无错误。解决方法:该问题可能是52单片机为8K内存,而本光立方设计程序达到35K远远超出52单片机的内存,于是将头文件名改为,并配合keil4进行编译,编译通过。5.2结果分析本设计通过硬件设备和软件完美配合,总共呈现十一个连续的动画效果。经过多次的反复测试与分析,所呈现的动画与程序中预期的效果吻合,符合设计要求。在软硬件测试过程中让我们对原先设计的电路的原理及功能进一步熟悉,并对各电路模块和相关的芯片联
22、合工作更加了解。在这个调试的过程中虽然挺枯燥无味,但锻炼我们发现问题并解决问题的能力,对我们的专业知识起到了温故知新的作用。6结论经过一周的选题,最后和我的导师商讨后定下了毕业设计的题目:基于单片机的光立方设计。本设计采用60KSTC12C5A60S2单片机作为主控芯片,通过程序来实现立体动画。本设计的亮点是将原先平面的流水灯延伸到立体空间,使实现的动画更能冲击视觉效果,拥有更广阔的市场价值。刚确定这个课题时欣喜与茫然同在,对于网上各种各样的光立方成品让人赞叹不已,也想能通过亲自来制作一个属于自己的光立方。与此同时,光立方毕竟是个新鲜产物,网上较多的是成品材料并没有太多的经验可以引以为鉴。在制
23、作过程中遇到许多的困难,就比如说怎么把那512个LED从点到线、从线到面、从面到体就是必须要克服的难题。但是功夫不负有心人,经过指导老师的精心指导以及同学们的热心帮助,终于完成了硬件和软件的测试。通过这次的毕业设计,过程中很多我不懂的问题都会主动查阅资料来寻找答案,在此将大学所学的专业知识进行了重温并付付诸实践,从而使我的专业涵养得到了提高。由于此设计需要较高的焊接技巧,制作过程中也无形锻炼了自己的动手能力。这将对于毕业后在社会工作中将是一笔宝贵的财富。当然,通过本次的设计也发现自身的不足以及知识漏洞。比如对于51单片机升级版的单片机的功能不能熟练应用,和相应芯片的结合应用不熟练。在绘制PCB
24、的过程中也遇到了问题,虽然之前有学过该门课程但是应用起来还是挺吃力的。对模电、数电的知识还有带提高,而且编写程序的能力还有较大的提升空间。我希望在今后的工作中能够逐渐得以改善,不要把知识面局限在书本上应多付诸实践。整个毕业设计过程有苦有甜,也将为大学的学生生涯画上浓厚的一笔。当然,我仍然要不断地充实自己,争取在所学领域有所作为,使自己的知识和技能会更上一层楼。参考文献1阎石.数字电子技术基础第四版M北京:高等教育出版社,1998.12:77-1742张瑞玲.单片机原理与应用西北工业大学出版社2010年12月3刘守义主编.数字电子技术(第二版)M.西安电子科技大学出版社,2007,74陈堂敏.刘
25、焕平主编.单片机原理与应用.北京:北京理工大学出版社,20075余孟尝数字电子技术基础简明教程高等教育出版社6邓元庆数字电路与逻辑设计M北京:电子工业出版社,1995:49-195.7肖洪兵.跟我学用单片机M.北京航空航天大学出版社,20028杨元挺电子技术技能训练电子工业出版社9王东峰等.单片机C语言应用100例M.电子工业出版社,200910潘永雄.新编单片机原理与应用,西安:西安电子科技大学出版社,200311童诗白,华成英,模拟电子技术基础,北京:高等教育出版社,200012马忠梅等,单片机的C语言应用程序设计,北京航空航天大学出版社,13冯建华,赵亮单片机应用系统设计与产品开发M北京
26、:人民邮电出版社,200414付晓光.单片机原理与使用技术M.清华大学出版社,ISBN7-81082-169-5TP15胡汉才单片机原理及其接口技术(第2版)北京:清华大学出版社16李中发数字电子技术基础中国水利水电出版社Microcontroller-basedlightcubedesignLiuRongSanmingCollege09ElectronicandInformationEngineering,FujianSanming365004AbstractThispaperpresentsabasedlightcubedesignSTC12C5A60S2microcontrolleran
27、delaboratedtheoveralldesignofthesystemhardwareisdescribedindetail,thespecificimplementationprocessofsoftwaredesign.Thesystemuses8*8*8mode,adistanceof14cm*14cm*20cm(longwidehigh)opticalthecubicdrivecircuitdesignedusinguln2803offtime,andultimatelymakestheentirethree-dimensionalshowadifferentshapeandpa
28、tternitpresentsabeautiful,colorfuleffects!KeywordsLightCube;74HC573;microcontroller致谢语转眼间,我已在三明学院度度过了四个年头。四年,一段不短的时间,四年的光阴让我成长,让我从青涩走向成熟。特别是,在读大四的这年,让我的人生有了新的起航。大学四年的学习以今天的毕业论文画了一个句号。本研究及学位论文是在我的导师伍坪老师的亲切关怀和悉心指导下完成的。在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了伍坪老师很多的宝贵时间和精力。每次遇到难题
29、,我最先做的就是向伍老师寻求帮助,而伍老师每次不管忙或闲,总会抽空来找我面谈,然后一起商量解决的办法。伍老师平日里工作繁多,但我做毕业设计的每个阶段,从选题到查阅资料,论文提纲的确定,中期论文的修改,后期论文格式调整等各个环节中都给予了我悉心的指导。在此谨向伍老师致以诚挚的谢意和崇高的敬意。同时,本篇毕业论文的写作也得到了班级同学的热情帮助。感谢在整个毕业设计期间给予过我帮助的伙伴们。在此,我再一次真诚地向帮助过我的老师和同学表示感谢!附录实物图:系统原理图:3、系统PCB图:程序清单#include#include#defineucharunsignedchar#defineuintunsi
30、gnedintsbitp30=P10;sbitp31=P11;sbitp32=P12;sbitp33=P13;sbitp34=P14;sbitp35=P15;sbitp36=P16;sbitp37=P17;uchardisplay88;/*rank:A,1,2,3,4,I,心,U*/ucharcodetable_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,0x3c,0x66,0x60,0x38
31、,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;/*theideasoft*/ucharcodetable_id40=0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x00,0xf8,0x27,0x27,0xf8
32、,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,0x01,0x0,0x01,0x01,0xff,0x01,0x01,0x00;/*railway*/ucharcodedat128=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,0x25,0x45,0x65,0x85,0x
33、a5,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,0xd1,0xd5,0xd9,0xb9,0x
34、99,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;/*railway2*/ucharcodedat228=0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c
35、,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4;/*railway3*/ucharcodedat324=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x50,0x40,0x30,0x20,0x10;/*3pchar*/ucharcodetable_3p38=0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0e,0x18
36、,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18;/*initializtionThatistoinitializetheprogram.Itiswritetosetthetimerinc52mcu.Sotheprogramcanrenovatetheled_3d_cubeinfixedtimeusetheinterruptfunction.*/voidsinter()IE=0x82;TCON=0x01;TH0=0xc0;TL0=0;TR0=1;voiddelay5us(void)误差-0.026765046296usSTC1T22.1184Mhzunsignedchar
37、a,b;for(b=7;b0;b-)for(a=2;a0;a-);voiddelay(uinti)while(i-)delay5us();12t的mcu注释这个延时即可/*Tojudgethenumbit*/ucharjudgebit(ucharnum,ucharb)charn;num=num&(1=5)b+;returnb;/*Tofigureouttheabsolutevalue*/ucharabss(chara)if(a(*b)t=(*a);(*a)=(*b);(*b)=t;/*Thefunctionistofigureoutthemaxnumberandreturnit.*/uchar
38、maxt(uchara,ucharb,ucharc)if(ab)a=b;if(ac)a=c;returna;voidclear(charle)uchari,j;for(j=0;j8;j+)for(i=0;i=-3;i-)if(i=0)for(j=0;j8;j+)displayji=displayji+1;if(i4)for(j=0;j8;j+)displayji+4=0;delay(speed);voidpoint(ucharx,uchary,ucharz,ucharle)ucharch1,ch0;ch1=1x;ch0=ch1;if(le)displayzy=displayzy|ch1;els
39、edisplayzy=displayzy&ch0;voidtype(ucharcha,uchary)ucharxx;for(xx=0;xx8;xx+)displayxxy=table_chachaxx;/*Thefirstvariableisthedistancefromthemidpoint.Thesecondisthelayer.thethirdistheflashspeedofthetimebetweeneachtwopoint.Theforthistheenableio,itcontrolsweatherdraworclaen.*/voidcirp(charcpp,uchardir,u
40、charle)uchara,b,c,cp;if(cpp=0)if(dir)cp=127-cpp;elsecp=cpp;a=(datcp5)&0x07;b=(datcp2)&0x07;c=datcp&0x03;if(cpp63)c=7-c;point(a,b,c,le);voidline(ucharx1,uchary1,ucharz1,ucharx2,uchary2,ucharz2,ucharle)chart,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;
41、c=z1*10;a1=a1*10/t;b1=b1*10/t;c1=c1*10/t;for(i=0;it;i+)point(abs(a),abs(b),abs(c),le);a+=a1;b+=b1;c+=c1;point(x2,y2,z2,le);voidbox(ucharx1,uchary1,ucharz1,ucharx2,uchary2,ucharz2,ucharfill,ucharle)uchari,j,t=0;max(&x1,&x2);max(&y1,&y2);max(&z1,&z2);for(i=x1;i=x2;i+)t|=1i;if(!le)t=t;if(fill)if(le)for
42、(i=z1;i=z2;i+)for(j=y1;j=y2;j+)displayji|=t;elsefor(i=z1;i=z2;i+)for(j=y1;j=y2;j+)displayji&=t;elseif(le)displayy1z1|=t;displayy2z1|=t;displayy1z2|=t;displayy2z2|=t;elsedisplayy1z1&=t;displayy2z1&=t;displayy1z2&=t;displayy2z2&=t;t=(0x01x1)|(0x01x2);if(!le)t=t;if(le)for(j=z1;j=z2;j+=(z2-z1)for(i=y1;i
43、=y2;i+)displayij|=t;for(j=y1;j=y2;j+=(y2-y1)for(i=z1;i=z2;i+)displayji|=t;elsefor(j=z1;j=z2;j+=(z2-z1)for(i=y1;i=y2;i+)displayij&=t;for(j=y1;j=y2;j+=(y2-y1)for(i=z1;i=z2;i+)displayji&=t;voidbox_apeak_xy(ucharx1,uchary1,ucharz1,ucharx2,uchary2,ucharz2,ucharfill,ucharle)uchari;max(&z1,&z2);if(fill)for(i=z1;i=z2;i+)line(x1,y1,i,x2,y2,i,le);elseline(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);voidpoke(ucharn,ucharx,uchary)uchari;for(i=0;i=0)&(i=8)&(i=16)&(i24)poke(n,7,i-16);
限制150内