光立方单片机课程设计报告资料Word文档下载推荐.docx

上传人:b****4 文档编号:15880912 上传时间:2022-11-16 格式:DOCX 页数:29 大小:755.25KB
下载 相关 举报
光立方单片机课程设计报告资料Word文档下载推荐.docx_第1页
第1页 / 共29页
光立方单片机课程设计报告资料Word文档下载推荐.docx_第2页
第2页 / 共29页
光立方单片机课程设计报告资料Word文档下载推荐.docx_第3页
第3页 / 共29页
光立方单片机课程设计报告资料Word文档下载推荐.docx_第4页
第4页 / 共29页
光立方单片机课程设计报告资料Word文档下载推荐.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

光立方单片机课程设计报告资料Word文档下载推荐.docx

《光立方单片机课程设计报告资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《光立方单片机课程设计报告资料Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。

光立方单片机课程设计报告资料Word文档下载推荐.docx

为追求舒适、逼真、清晰的3D视频显示,为此制作出一个三维立体显示图案的LED光立方。

该设计方案将打破了传统的平面显示视频的方法,该方案设计的LED显示屏显示画面色彩鲜艳,立体感强,静如油画,可以广泛应用于广告公司、交通运输、车站、商场、医院、宾馆、证券市场、工业企业管理等公共场所。

1.2设计要求

一、基本要求

(1)设计制作一个8*8*8的三维的发光二极管显示方阵,能够通过编写程序来实现对每一个发光二极管的控制。

(2)能够实现图像,符号或者文字的静态显示。

(3)能够实现图像,符号,或者文字的立体图像的简单的动态显示。

二、扩展要求

(1)可实现图形、符号和文字的旋转、缩放等多种显示模式。

(2)可以利用无线传输的方式来遥控光立方的显示模式。

2系统方案设计

2.1系统方案框图

图2.1系统方案框图

利用单片控制LED点阵显示的原理和控制技术,来制作控制光立方显示。

通过编写程序控制不同LED的显示,显示所要显示的内容。

根据人眼的视觉暂留效应,设置每幅画面的延迟时间使连续的一系列画面呈现动态。

最终达到所要显示的内容。

每个灯都是由层控制端和列控制端共同决定亮或灭。

3系统硬件电路设计

3.1单片机最小系统

图3.1复位电路及晶振电路

复位电路,就是利用它把电路恢复到起始状态。

就像计算器的清零按钮的作用一样,以便回到原始状态,重新进行计算。

和计算器清零按钮有所不同的是,复位电路启动的手段有所不同。

一是在给电路通电时马上进行复位操作;

二是在必要时可以由手动操作;

三是根据程序或者电路运行的需要自动地进行。

复位电路都是比较简单的大都是只有电阻和电容组合就可以办到了,再复杂点就有三极管等配合程序来进行了。

晶振电路是给单片机提供时钟信号。

图3.2电源电路

图3.3下载电路

3.2uln2803电路设计

图3.4uln2803电路

采用的是ULN2803达林顿管驱动器与进行驱动。

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

驱动能力500MA\50V。

应用时9脚接地,如果驱动感性负载,10脚接负载电源V+。

输入的电平信号为0,或5V。

[8]输入0时,输出达林顿管截止。

输入为5V电平时,输出达林顿饱和。

输出负载加在电源V+和输出口上,当输入为高电平时,输出负载工作。

八路NPN达林顿连接晶体管阵系列特别适用于低逻辑电平数字电路和较高的电流/电压要求之间的接口,广泛应用于计算机工业中。

所拥有的器件具有集电极开路输出和续流箱位二极管,用于抑制跃变。

ULN2803的设计与标准TTL系列兼容,而ULN2804最适于6至15伏高电平CMOS或PMOS。

3.374hc573电路设计

图3.574hc573电路

74HC573包含八路3态输出的非反转透明锁存器,是一种高性能硅栅CMOS器件。

74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。

当使能为低时,输出将锁存在已建立的数据电平上。

输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。

这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。

特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。

一个2803与八个573结合使用,可以精准的控制到每一个灯上,进而控制整个光立方的花型。

3.4显示电路设计

层共阴,每一竖列共阳。

在实际焊接的过程中,先将灯的阴阳极分别折出90度,中间留出一定的空间避免焊接时阴阳极挨在一起造成短路。

将阳极焊在一起,每八个形成一列,将八列的阴极逐个焊在一起形成一层,如此焊出八层。

在与PCB板相连时,阳极与板上的孔焊接,每层的阴极焊接在一起,将2803的八个输出分别从板上跳线接至每层的阴极。

这样基本完成了光立方的焊接。

在绘制PCB板的过程中,我们确定了孔间距为两厘米,在焊接的过程中严格执行两厘米的间距,否则会造成某一列或某一行不平,影响最终效果。

我们制作了光立方LED的焊接模板,从而可以精准的确定焊接距离。

在焊接的过程中,先用电压表检查灯泡是否完好,否则焊完之后再用电压表检测发现损坏的小灯很难从光立方上拆除。

而且也要注意阴阳极,不要焊反而误以为灯泡损坏。

4系统软件设计

4.1定义

74hc573控制输入模块P0口;

uln2803驱动模块P1;

74hc573控制输出模块P2口。

初始化定时器0,延时5us,开中断,使其处于等待中断状态。

接着,初始化光立方体,驱动光立方,利用扫描形式使光立方体的LED灯逐个点亮形成动画。

4.2软件设计

软件设计包括主程序、显示程序两大部分,软件功能结构框图如4.1所示。

主程序通过调用按键查询程序来判断待显示的图案及花样,主程序则调用相对应的显示程序送到控制端口

4.3主程序部分

主程序部分主要进行对不同花样的调用及选择。

4.4显示部分

动态扫描显示是把整个光立方分成若干部分,每一幅画面显示过程是显示完一部分后,又显示第二部分,直到显示完最后一部分又重新开始显示第一部分,重复循环进行。

在重复扫描速度足够快的情况下,我们看到的就是一幅稳定的静态画面。

也就是说采用动态扫描显示需要不断进行画面的刷新。

动态扫描分为行扫描和列扫描,两种方式区别在于选通端和数据输入端分别是行还是列。

先选通列然后再从行送入对应列的数据,这样从第1列到第8列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳定的画面,从而完成数据的传送。

5系统调试

在焊接完成后,我们分模块对单片机的电路进行了测试,如电源电路,下载电路等,在检查完毕后,让光立方全亮的程序,检查光立方是否有虚焊的地方,再对虚焊的部分进行焊接,最后以实现光立方全亮,再对光立方进行花样编程。

结论

一、已经完成的功能

(1)设计制作一个8*8*8的三维的发光二极管显示方阵,能够通过编写程序来实现对每一个发光二极管的控制。

(2)能够实现图像,符号或者文字的静态显示。

(3)能够实现图像,符号,或者文字的立体图像的简单的动态显示。

二、已经还有待于完善的功能:

(1)可实现图形、符号和文字的旋转、缩放等多种显示模式。

(2)可以利用无线传输的方式来遥控光立方的显示模式。

参考文献

[1]刘岩川,董玉华.刘忠富等著.MCS-51系列单片机原理及系统设计.北京:

电子工业出版社,2014.

[2]焉德军,刘明才著.计算机基础与C语言程序设计(第二版).北京:

清华大学出版社,2014.

[3]高歌,刘远贵,马聪.AltiumDesigner电子设计应用教程。

北京:

[4]刘明才,牟连泳,辛慧杰等.C语言程序设计.机械工业出版社,2011.

[5]郭天祥.新概念51单片机C语言教程[M].北京:

电子工业出版社,2009.

附录一系统硬件电路图

图1系统硬件电路图

附录二实物照片(有通电运行的照片)

图2实物图

图3通电实物图

附录三系统完整程序代码(加注释)

#include<

reg51.h>

//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#defineDataPortP1//定义数据端口,为层控制端口,即uln2803,程序中遇到DataPort则用P1替换

#defineshuchuP0

#defineLATCH=P2;

//定义锁存使能端口第一个573的使能控制端口

sbitDataPort1=P1^0;

sbitDataPort2=P1^1;

sbitDataPort3=P1^2;

sbitDataPort4=P1^3;

sbitDataPort5=P1^4;

sbitDataPort6=P1^5;

sbitDataPort7=P1^6;

sbitDataPort8=P1^7;

sbitLATCH1=P2^0;

sbitLATCH2=P2^1;

sbitLATCH3=P2^2;

sbitLATCH4=P2^3;

sbitLATCH5=P2^4;

sbitLATCH6=P2^5;

sbitLATCH7=P2^6;

sbitLATCH8=P2^7;

sbitkey1=P3^4;

sbitkey2=P3^5;

voidDelay(unsignedintt)

{

while(--t);

}

unsignedcharline[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//显示行值01234567

voiddisplay(unsignedchar*Data)//显示子程序,指针数组作为形参,直接指向传过来的实参数组的地址,这样就可直接操纵数组传过来的数组了

unsignedchari;

for(i=0;

i<

8;

i++)

{

DataPort=line[i];

//先给层输入数据即uln2803

shuchu=Data[i];

LATCH1=1;

LATCH1=0;

shuchu=Data[8+i];

LATCH2=1;

LATCH2=0;

shuchu=Data[16+i];

LATCH3=1;

LATCH3=0;

shuchu=Data[24+i];

LATCH4=1;

LATCH4=0;

shuchu=Data[32+i];

LATCH5=1;

LATCH5=0;

shuchu=Data[40+i];

LATCH6=1;

LATCH6=0;

shuchu=Data[48+i];

LATCH7=1;

LATCH7=0;

shuchu=Data[56+i];

LATCH8=1;

LATCH8=0;

Delay(200);

//扫描间隙延时,时间太长会闪烁,太短会造成重影

}

voidliang()//点亮所有的灯

unsignedinti;

5000;

DataPort=0xff;

//先给每层都输入数据

shuchu=0xff;

//8个573输出端为高

//DataPort=0xff;

//把0xff送进锁存器1~8中,使它们的输出引脚都输出高电平,与行锁存器的0x00相对,点亮所有的灯

//打开锁存放数据关闭锁存防止干扰

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

当前位置:首页 > 医药卫生 > 基础医学

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

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