江苏师范大学物电学院课程设计报告课程名称:光学课程设计题目:LED光立方设计专业班级:光电信息科学与工程 13物81学生姓名:郭程程学生学号: 130228004日期: 2015年12月16号指导教师:蔡廷栋物电学院教务部印制基于STC12C5A60S2单片机的LED光立方设计摘要本文详细的介绍了光立方的搭建过程,以51系列的单片机STC12C5A60S2为主要的控制芯片,由512个LED通过共阴的形式连接起来,由74HC573为扩展单片机的I/O口,用ULN2803为驱动电路,形成一个规格为8*8*8(长,宽,高)14cm*14cm*20cm立方体,还介绍了这款芯片的特点和使用方法及在调试过程中遇到的软件和硬件方面的问题及解决方法,详细的阐述了光立方的设计原理和架构方法,对光立方目前存在的意义也进行了详细的介绍。
关键词:光立方;74HC573;单片机;ULN2803;LEDThe LED light cube design based onSTC12C5A60S2 microcontrollerAbstractThis PaPer introduCes the ProCess of Building Light CuBe, with 51 Series MCUSTC12C5A60S2 as the main Control ChiP, ConneCted By 512 LED By CO Yin form, By74HC573 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; 74HC573; STC12C5A60S2; ULN2803; LED目录1 概述 (7)1.1光立方原理 (7)1.2 3DLED光立体的优越性以及主要应用 (8)2设计课题硬件系统的设计 (3)2.1 LED管脚搭接方法: (3)2.2设计课题电路原理图 (4)2.3设计课题电路PCB图 (6)2.4 设计课题电路元器件布局图 (7)2.5 设计课题元器件清单 (8)3 设计课题软件系统的设计 (9)3.1 3dLED光立方代码图形 (9)3.2 设计课题软件系统程序清单 (12)4 设计结论 (17)4.1 设计总结与使用说明 (18)4.2 电路的调试和调试出现的问题 (18)4.3设计体会 (18)结束语 (19)参考文献 (20)1 概述1.1光立方原理光立方也就是LED的立体阵列,一般的LED是平面的,比如一个字,而光立方则是在多个等间距的平面再组合成一个立体。
这样就可以显示真3D图形。
8*8*8光立方我们把它拆成8个面,如下图,每个面64个灯,或说成64束。
我们要控制这64个灯使其自由变换,然后控制每个层依次点亮即可。
图1学过点阵的都知道,如果要控制8*8点阵,需要16个引脚,那么8*8*8点阵我们再用8个引脚充当8*8点阵的总开关即可,我们只要把64个LED灯的阴极连接在一起就可以了。
图21.2 3DLED光立体的优越性以及主要应用1. 3DLED以其功耗低,寿命长,亮度高,视角大,可视距离远等优点而具有极为广阔的发展前景。
随着人们生活水平的提高,3DLED逐渐应用于各行各业。
人们对其的要求也越来越高,已经不再满足于二维平面,进而转向三维平面。
3DLED的出现是一个很好的契机。
2.3DLED光立体极具观赏性,人们可以根据自己的要求,设计不同的图案,展现不同的立体效果。
可以说它是变幻无穷的。
因其极大地观赏性,使人们在接受信息,数据的同时更加印象深刻,使信息的传输更有效率。
3. 随着3D技术的逐步发展,3DLED被广泛应用于现实生活中,比如LED显示屏,LED图像,LED立体摄影。
这些技术在我们的生活中随处可见,电影院,会议场合,舞台设计,以及各种娱乐场所。
2设计课题硬件系统的设计2.1 LED管脚搭接方法:为了保持整体的通透性,立体感,3dLED光立方没有设计额外的支架,所有的搭接直接用LED的管脚。
1.水平折弯:基本徒手可以完成,将512个LED灯的阴极都弯曲成90度,为了焊接的统一性,折弯时尽量保持角度的统一,还要注意区分阴极与阳极,由于我们做的是共阴,所以将阴极折弯。
如图3图3 LED灯弯曲成90度2.垂直折弯:为了让阴极摆出发光体一部分,使其与上下的LED搭接,可利用尖嘴钳对LED进行垂直折弯。
3.由点到线:自备一块木板,在上面打8*8的64个孔,每个孔的间距大约为2cm,将折好的LED插入一排后,其阴极正好搭接在一起,进行焊接,图4,实现LED共阴。
因为LED很脆弱,很容易因为焊接时温度过高而烧坏LED,所以每次焊接完后都要去检查每个灯是否会亮,这是很重要的一步。
图44.由线到面:将焊接好的一条一条的LED平躺在平面上,将露出的LED的阴极折成直角,使其可以与前后同一层LED的阴极进行焊接,实现8*8平面的层共阴。
如图5,当你插好64个灯珠后,还要在做些准备工作,只要弯折的长度适合,管脚的末端会多出几毫米搭接到临近的弯折点上,,给所有的焊点先上锡,时间不要过久,免得烧坏了灯珠。
管脚上锡搞好后,再焊接时只需一手用镊子夹稳管脚,在用烙铁烫一下就好了,镊子夹的时候就先矫正了灯珠位置,确定无误后,再那烙铁补上这最后一下,第一个平面焊接好后就是这个样子:图55.又面到体:将焊接好的一个一个LED面叠起来,进行焊接,如图6,实现8*8*8光立方。
一个平面搞定后,不要觉得这样就完成了,把灯取下来之前,先用万用表检查,电子表有专门检查二极管的档,比机械的要方便些。
确保你焊接好的灯珠都是会亮的,焊接的时候,难免有的灯珠被烫坏或者有正负短接的地方;把灯珠在模板上取下的时候,要比较温柔,这个想必大家都会,取下之后呢,在仔细检查正面和背面有没有焊锡不够的地方(因为在模板上你只焊接到了一面,另一面肯定有焊锡不够、不均匀之处),小心的补上焊锡,这样以后就不会开焊了!要不然组装后,你再想补修开焊点,那想都不要想,所以,现在不要怕麻烦,有耐心,慢慢来需要说明的是,从第二层开始,就得注意层面的摆放了,上一层的管脚向下弯折90度后,慢慢的向下放,保证管脚不能和下一层的短接。
第一二层没什么问题,第三次开始,就开始有难度了,越往后越难,因为管脚越来越密集,上层的管脚往下插的时候,要需要长时间的镊子矫正,才能完全放稳。
图66.8*8*8光立方大功告成。
如图7。
LED的焊接,把2个LED的负极焊接在一起。
注意焊接时候速度要快,要不然温度会损害LED.还有就是LED的负极不要碰到正极。
图77.焊接完毕通电后效果图,图8。
图8LED通电后效果图2.2设计课题电路原理图2.5 设计课题元器件清单3 设计课题软件系统的设计3.1 3dLED光立方代码图形显示正方体6x6x6翻转正方体拼图3.2 设计课题软件系统程序清单#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code f2[8][8]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x00,0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,0x00, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //显示正方体6x6x6 uchar code f7[8][8]={0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00,0x00, 0x1E, 0x21, 0xC1, 0xC1, 0x21, 0x1E, 0x00, }; //花瓶1uchar code f9[8][8]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //旋转1uchar code f21[8][8]={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00,0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00,0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };//翻转1uchar code f26[8][8]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00,0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,0x00, 0x00, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };//爆炸1uchar code f36[8][8]={0xE7, 0xA5, 0xE7, 0x00, 0x00, 0xE7, 0xA5, 0xE7,0xA5, 0x00, 0xA5, 0x00, 0x00, 0xA5, 0x00, 0xA5,0xE7, 0xA5, 0xE7, 0x00, 0x00, 0xE7, 0xA5, 0xE7,0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,0xE7, 0xA5, 0xE7, 0x00, 0x00, 0xE7, 0xA5, 0xE7,0xA5, 0x00, 0xA5, 0x00, 0x00, 0xA5, 0x00, 0xA5,0xE7, 0xA5, 0xE7, 0x00, 0x00, 0xE7, 0xA5, 0xE7,};//正方体拼图1 *//********************************函数名:毫秒延时函数函数功能:产生毫秒级延时函数入口:cout 需延时的毫秒数函数出后:无*********************************/void Delay_1ms(uint count){uint j;while(count--!=0){for(j=0;j<80;j++);}}/********************************函数名:send_num函数功能:将一个面的数据送入74ls573函数入口:*p 需要送入数据的起始地址函数出后:无*********************************/void send_num(uchar *p){uchar i,j=0xFE;for(i=0;i<8;i++){P0=j;P1=*(p+i);j=_crol_(j,1);}P0=0XFF;}/********************************函数名:send_dis函数功能:将8各面的数据给别送入573并动态显示出来函数入口:无函数出后:无*********************************/void send_dis1(){uchar i,k,j=0x01;for(k=0;k<5;k++){for(i=0;i<8;i++){P2=j;send_num(f1[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=5;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f1[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis2(){uchar i,k,j=0x01;for(k=0;k<2;k++){for(i=0;i<8;i++){P2=j;send_num(f5[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=2;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f5[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis3(){uchar i,k,j=0x01;for(k=0;k<2;k++){for(i=0;i<8;i++){P2=j;send_num(f7[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=2;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f7[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis4(){uchar i,k,j=0x01;for(k=0;k<12;k++){for(i=0;i<8;i++){P2=j;send_num(f9[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=5;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f9[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis5(){uchar i,k,j=0x01;for(k=0;k<5;k++){for(i=0;i<5;i++){P2=j;send_num(f21[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=5;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f21[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis6(){uchar i,k,j=0x01;for(k=0;k<4;k++){for(i=0;i<8;i++){P2=j;send_num(f26[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=4;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f26[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis7(){uchar i,k,j=0x01;for(k=0;k<7;k++){for(i=0;i<8;i++){P2=j;send_num(f29[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=7;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f29[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis8(){uchar i,k,j=0x01;for(k=0;k<2;k++){for(i=0;i<8;i++){P2=j;send_num(f36[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=2;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f36[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis9(){uchar i,k,j=0x01;for(k=0;k<3;k++){for(i=0;i<8;i++){P2=j;send_num(f38[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=3;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f38[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void send_dis10(){uchar i,k,j=0x01;for(k=0;k<8;k++){for(i=0;i<8;i++){P2=j;send_num(f41[i]+k);Delay_1ms(2);j=_crol_(j,1) ;}}Delay_1ms(1);for(k=8;k<0;k--){for(i=0;i<8;i++){P2=j;send_num(f41[i]+k);Delay_1ms(1);j=_crol_(j,1) ;}}}void main(){while(1){send_dis1();Delay_1ms(1);send_dis2();Delay_1ms(1);send_dis3();Delay_1ms(1);send_dis4();Delay_1ms(1);send_dis5();Delay_1ms(1);Delay_1ms(1);send_dis6();Delay_1ms(1);send_dis7();Delay_1ms(1);send_dis8();Delay_1ms(1);send_dis9();Delay_1ms(1);send_dis2();Delay_1ms(1);send_dis4();Delay_1ms(1);send_dis7();Delay_1ms(1);send_dis4();Delay_1ms(1);send_dis1();Delay_1ms(1);send_dis8();Delay_1ms(1);}}4 设计结论4.1 设计总结与使用说明通过这次3dLED光立方的设计,加强了我们动手、思考和解决问题的能力。