3D8光立方制作之欧阳法创编.docx

上传人:b****8 文档编号:10773852 上传时间:2023-02-22 格式:DOCX 页数:52 大小:856.93KB
下载 相关 举报
3D8光立方制作之欧阳法创编.docx_第1页
第1页 / 共52页
3D8光立方制作之欧阳法创编.docx_第2页
第2页 / 共52页
3D8光立方制作之欧阳法创编.docx_第3页
第3页 / 共52页
3D8光立方制作之欧阳法创编.docx_第4页
第4页 / 共52页
3D8光立方制作之欧阳法创编.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

3D8光立方制作之欧阳法创编.docx

《3D8光立方制作之欧阳法创编.docx》由会员分享,可在线阅读,更多相关《3D8光立方制作之欧阳法创编.docx(52页珍藏版)》请在冰豆网上搜索。

3D8光立方制作之欧阳法创编.docx

3D8光立方制作之欧阳法创编

3D8光立方制作

时间:

2021.03.09

创作:

欧阳法

一、摘要............................................1

二、关键字..........................................1

三、引言............................................2

四、正文............................................2

(一)、主要元件介绍................................3

1、STC12C5A60S2.....................................3

2、74HC573..........................................3

3、ULN2803..........................................4

(二)、工作原理....................................5

1、驱动模块原理.....................................6

(三)、元器件选择...................................7

(四)、制作、调试...................................8

1、制作.............................................9

2、调试.............................................11

五、结束语..........................................13

六、参考文献........................................12

七、附录(程序)....................................13

光立方

一、摘要:

本设计采用8*8*8的模式,硬件主要分为三个模块:

主控模块、驱动模块、显示模块。

采用的主控芯片为STC12C5A60S2芯片,驱动电路是采用我们常用74HC573数字芯片。

数组OUT[0]代表光立方从第一层D0到第八层D0的数据,以此类推数组OUT[1]代表光立方从第一层D1到第八层D1的数据。

本设计采用C语言编程,利用单片机控制LED的亮灭,采用延时控制LED亮灭时间,最终使得整个立体展现不同的造型和图案,使其变得美轮美奂、绚丽多彩。

二、关键字:

LED光立方,74HC573,STC12C5A60S2,ULN2803

三、引言:

光立方是由四千多棵光艺高科技“发光树”组成的,在2009年10月1日天安门广场举行的国庆联欢晚会上面世,这是新中国成立六十周年国庆晚会最具创意的三大法宝之首,自从国庆60周年联欢晚会开始演练后,一个全新的名词“光立方”,吸引了全国人民的关注。

国庆联欢晚会三样法宝,光立方为最,“光立方”在气势和整体感觉上,融合了北京奥运会开幕式“击缶而歌”和“活字印刷”的风格,而各种图案则与贯穿奥运会开幕式的“画卷”有异曲同工之妙。

“光立方”可以根据爱国歌曲的不同内容,展示不同的造型和图案,具有丰富的视觉效果。

四、正文

(一)主要元件介绍:

1、STC12C5A60S2

STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。

1)增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051

2)工作电压:

STC12C5A60S2系列工作电压:

5.5V-3.3V(5V单片机)

3)工作频率范围:

0-35MHz,相当于普通8051的 0~420MHz

4)应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节

5)片上集成1280字节RAM

6)外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,PowerDown模式可由外部中断唤醒,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标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3)

10)工作温度范围:

-40-+85℃(工业级)/0-75℃(商业级)

2、74HC573

74HC573是八进制3态非反转透明锁存器。

器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。

当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。

当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出,当输入的数据消失时,在芯片的输出端,数据仍然保持

3、ULN2803

ULN2803是八重达林顿管,1至8脚为8路输入,18到11脚为8路输出。

驱动能力为500MA\50V。

应用时9脚接地,10脚接负载电源V+,输入的电平信号为0或5V。

输入0是输出达林顿管截止,输入为5V电平时,输出达林顿饱和。

输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作,该电路为反向输出型,即输入低电平电压,输出端才能导通工作。

(二)工作原理

有8个8*8点阵,再用8个引脚来当充当各个8*8点阵的“开关”。

只要将64个灯阳极连在一起,在连到这个引脚上。

采用了hc573暂存的方法,来分别把64个灯的亮灭信息存到这个上面,然后再一起输出到灯上,573的64个输出引脚控制前面所述每一个面的64个灯;而每层灯的阴极全连接在一起接入uln2803,由uln2803控制的每一个层灯。

通过单片机主控芯片STC12C5A60S2来控制所有灯的亮灭,从而控制P0、P1、P2实现控制X、Y、Z空间立体控制来显示我们所需要显示的现象。

图18层面图264个灯孔

整个设计主要分为三个模块分别是主控模块、驱动模块、显示模块

1、驱动模块原理

图374HC573驱动

图4原理图

uln2803的1~8脚接主控芯片的P1口(1~8脚),数据由主控芯片P2口输入经过uln2803从11~18脚输出,实现通过uln2803来驱动每一层。

每个573的2~9脚(数据输入)都连接在一起连接到主控芯片的P0口(32~39脚),数据从主控芯片P0口输送到573,573的1脚是3态输出使能输入(低电平)一般都与地相接,573的11脚(锁存使能输入)都连接在一起连接到主控芯片的P2口(21~28脚)作为锁存控制。

当573的11脚为高电平和2~9脚为高电平时,573的12~19脚(3态锁存输出)为高电平,驱动一竖面的灯亮,当11脚为高低平、2~9脚为低电平时,573的12~19脚则就为低电平,从而灯灭,当11脚为低电平时,2~9脚不管高低电平,12~19脚的输出不变。

主控芯片通过573+uln2803来驱动控制哪竖面的哪一层的哪个灯的亮灭。

R1~R16是限流电阻。

(三)元器件选择

1)由于光立方的程序量比较大,而且要求相对比较高,因此用51系列的增强型芯片STC12C5A60S2,选择的理由:

1.无法解密,采用第六代加密技术;2.超强抗干扰;3.内部集成高可靠复位电路,外部复位可用可不用;4.速度快,比8051快8-12倍。

2)由于灯的个数比较多,因此所需要的电流相对也比较大,所以选择ULN2803。

3)驱动部分使用了熟悉的74HC573,其优点有1.高阻态,就是输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出;2.数据锁存;当输入的数据消失时,在芯片的输出端,数据仍然保持;3.数据缓冲、加强驱动能力。

4)LED灯的选择,出于外观和整体的形状美观,采用的是雾状蓝光的LED灯,由于高亮灯比雾状灯刺眼,所以选择雾状灯。

图5雾状LED灯

(四)制作、调试

1)制作:

1、我们首先完成的是驱动电路

驱动电路由于线比较多电路比较复杂,所以我们有比较多的跳线,由八个74HC573组成的,如下图:

图6573驱动连接反面

图7573驱动连接正面

2、主控电路

主控电路是最简单的电路,主要是最小系统,其中还有一个控制层的驱动芯片焊接在主控板上,如图所示:

图8最小系统

3、显示模块

首先我们用一块比较大万能板,在上面做了8*8个点的标志,间距为2mm然后把灯按统一形状掰好管脚。

然后固定在在万能板上进行焊接,焊接完如下图:

图9灯的焊接

焊好的如图:

每次焊完以后都要去检查测试每个灯是否会亮,很重要的步骤

图10

把八个面做好以后就是把八个面一层一层的叠起来,在这里要注意的是必须用尺子量好各个角度的高度(我们做的间距为2厘米),必须使每一个面在同一水平面上,如下图所示:

同样的每次焊完以后都要去检查测试每个灯是否会亮

图118层灯

显示部分反面,如下图:

图12

2)调试:

主要是检查全部的灯是否正常工作:

(1)程序烧写进单片机之后,发现有两列没有点亮,还好两列的都在边上,进而如果换灯也相对容易,我们用排除法来检查电路,首先是检查灯的线路是否虚焊,断路,果真有一列的是断路了,把它接上后这一列也亮了。

(2)还剩下另外一列,我们用同样的方法来做,从驱动电路到显示的都没有问题,而且在输入那一列的电压也正常,我们就想不通了,是什么原因呢?

我们怀疑是不是有灯坏了,我们又一个一个的检查了这一列灯,但是全部都会亮,经过很细心的检查,发现有一个灯的亮度和其他的灯亮度完全不同,相对比较暗,于是我们把它换了下来,接上另外一个,果然是哪个灯的问题,原来是由于这灯的阻抗很大,把那一列的电平都拉低了,使灯无法亮起来。

(3)在调试过程中,有一竖面的灯完全不亮,第一个想法是灯没有供电,检测供电电路法发现没有问题,于是我找到573这一部分,因为这一部分跳线较多且线路密集,逐一测量发现线头间短路了,从新焊接后测试,故障顺利排除。

(4)在调试过程中有几个灯一直不亮,用万用表欧姆档测量发现灯已经烧坏,拆下坏掉,但是有2个灯是存在虚焊问题,从新焊接后正常工作。

五、结束语

经过这次的设计,让我们更明确了团队合作的要领和精神,更明白了焊接技术的重要性,也让我们对单片机编程的进一步了解,为了这次设计我们找了查找了很多资料,包括一些对该设计元件的作用、工作电压等资料的了解,感谢XX和Google公司。

他们的搜索功能庞大、快捷又免费,让我们很方便地搜索到了我们所需要的设计资料和丰富的知识。

此次毕业设计,是我大学学习中遇到过的时段最长、涉及内容最广、工作量最大的一次设计。

用老师的一句话概括就是这次毕业设计相当如是把以前的小课程设计综合在一起的过程,只要把握住每个小课设的精华、环环紧扣、增强逻辑,那么这次的任务也就不难了。

同时感谢老师对我们的指导和为我们理清思路从而使我们更快我完成设计。

六、参考文献

【1】祈伟杨亭.单片机C51程序设计教程与实验北京航空航天大学出版社2006年1月

【2】张瑞玲.单片机原理与应用西北工业大学出版社2010年12月

【3】赵亮,侯国锐.单片机C语言编程与实例[M].北京:

人民邮电出版社,2003.

七、附录(源程序)

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchardisplay[8][8];

/*rank:

A,1,2,3,4,I,心,U*/

ucharcodetable_cha[8][8]={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,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"*/

ucharcodetable_id[40]={0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x00,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*/

ucharcodedat[128]={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,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,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};

/*railway2*/

ucharcodedat2[28]={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};

/*railway3*/

ucharcodedat3[24]={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_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};

/*initializtion

Thatistoinitializetheprogram.

Itiswritetosetthetimerinc52mcu.

Sotheprogramcanrenovatetheled_3d_cubeinfixedtimeusetheinterruptfunction.*/

voidsinter()

{

IE=0x82;

TCON=0x01;

TH0=0xc0;

TL0=0;

TR0=1;

}

voiddelay5us(void)//误差-0.026765046296usSTC1T22.1184Mhz

{

unsignedchara,b;

for(b=7;b>0;b--)

for(a=2;a>0;a--);

}

voiddelay(uinti)

{

while(i--)delay5us();//12t的mcu注释这个延时即可

}

/*Tojudgethenumbit判断数字点*/

ucharjudgebit(ucharnum,ucharb)

{

charn;

num=num&(1<

if(num)

n=1;

else

n=0;

returnn;

}

/*Tofigureouttheroundnumber计算出的轮数*/

ucharabs(uchara)

{

ucharb;

b=a/10;

a=a-b*10;

if(a>=5)

b++;

returnb;

}

/*Tofigureouttheabsolutevalue找出绝对值*/

ucharabss(chara)

{

if(a<0)

a=-a;

returna;

}

/*Thefunctioncancomparatthecharacter.

Andremovethebigonetotheback.*/

voidmax(uchar*a,uchar*b)

{

uchart;

if((*a)>(*b))

{

t=(*a);

(*a)=(*b);

(*b)=t;

}

}

/*Thefunctionistofigureoutthemaxnumberandreturnit.*/

ucharmaxt(uchara,ucharb,ucharc)

{

if(a

a=b;

if(a

a=c;

returna;

}

voidclear(charle)

{

uchari,j;

for(j=0;j<8;j++)

{

for(i=0;i<8;i++)

display[j][i]=le;

}

}

voidtrailler(uintspeed)

{

chari,j;

for(i=6;i>=-3;i--)

{

if(i>=0)

{

for(j=0;j<8;j++)

display[j][i]=display[j][i+1];

}

if(i<4)

{

for(j=0;j<8;j++)

display[j][i+4]=0;

}

delay(speed);

}

}

voidpoint(ucharx,uchary,ucharz,ucharle)

{

ucharch1,ch0;

ch1=1<

ch0=~ch1;

if(le)

display[z][y]=display[z][y]|ch1;

else

display[z][y]=display[z][y]&ch0;

}

voidtype(ucharcha,uchary)

{

ucharxx;

for(xx=0;xx<8;xx++)

{

display[xx][y]=table_cha[cha][xx];

}

}

/*Thefirstvariableisthedistancefromthemidpoint.

Thesecondisthelayer.

thethirdistheflashspeedofthetimebetweeneachtwopoint.

Theforthistheenableio,itcontrolsweatherdraworclaen.*/

voidcirp(charcpp,uchardir,ucharle)

{

uchara,b,c,cp;

if((cpp<128)&(cpp>=0))

{

if(dir)

cp=127-cpp;

else

cp=cpp;

a=(dat[cp]>>5)&0x07;

b=(dat[cp]>>2)&0x07;

c=dat[cp]&0x03;

if(cpp>63)

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;

c=z1*10;

a1=a1*10/t;

b1=b1*10/t;

c1=c1*10/t;

for(i=0;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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1