基于单片机的光立方设计Word下载.docx

上传人:b****6 文档编号:18666680 上传时间:2022-12-31 格式:DOCX 页数:27 大小:566.07KB
下载 相关 举报
基于单片机的光立方设计Word下载.docx_第1页
第1页 / 共27页
基于单片机的光立方设计Word下载.docx_第2页
第2页 / 共27页
基于单片机的光立方设计Word下载.docx_第3页
第3页 / 共27页
基于单片机的光立方设计Word下载.docx_第4页
第4页 / 共27页
基于单片机的光立方设计Word下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于单片机的光立方设计Word下载.docx

《基于单片机的光立方设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的光立方设计Word下载.docx(27页珍藏版)》请在冰豆网上搜索。

基于单片机的光立方设计Word下载.docx

2、系统框图

本系统主要由时钟电路、复位电路、LED光立方电路组成;

时钟电路和复位电路作为单片机输入,LED光立方电路作为单片机输出,显示出控制结果如图2-1所示。

时钟电路:

单片机的各个功能部件的运行都是以时钟控制信号为基准,一拍一拍的工作。

因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的可靠性和稳定性。

常用的时钟电路设计为内部时钟方式,单片机内部有一个由反向放大器构成的振荡电路,芯片上的XTAL1和XTAL2分别为振荡电路的输入和输出端。

只要在这两个引脚上接一个石英晶体振荡器和两个微调电容就构成内部方式的振荡器电路,由振荡器产生自激振荡,便构成一个完整的振荡信号发生器。

复位电路:

通过某种方式,使单片机内部各类寄存器的值变为初始状态的操作称为复位,复位主要通过外部电路实现。

常见的复位电路包括上电复位、手动按键复位和看门狗复位三种方式,本次设计综合采用上电复位方式和按键复位方式。

图2-2系统框图

3、程序流程

本项目的程序设计主要包括延时程序、显示程序两个子程序。

显示程序:

主要是在得到当前控制灯的位置后,通过控制与它相连的阴阳两端的引脚电平,从而实现对灯的亮灭进行控制。

延时程序:

由于显示程序不能控制灯持续点亮,达不到显示效果,我们需要增加延时程序来延长显示时间从而达到显示效果。

如图2-2所示单片机复位以后,程序开始运行,获取到要显示的LED所在的层和列然后调用显示子程序点亮LED灯,通过延时程序进行短暂延时后继续获取下一个要显示的LED灯的所在的层和列。

图2-3程序流程图

三、工作原理

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

即通过编写程序控制不同LED的亮灭,来显示不同的内容。

由于人眼的具有视觉暂留的特性,设置每幅画面的延迟时间可以使连续的一系列画面呈现动态。

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

每个灯都是由层控制端(共阳极)和列控制端决定亮或灭。

如图3-1a所示,将光立方分成四层,每一层有一个单片机引脚作为层控制端与之相连,设计成共阳极。

如图3-1b所示每层光立方有16盏灯,而这16盏灯又分别与单片机的P0、P1两个IO口组共16个IO口相连,这样就能很好地控制每一盏灯的亮灭。

图3-1光立方结构示意图:

a四层光立方分布结构,b光立方每层的LED分布

在三维光立方中采用动态扫描显示,这种显示方式巧妙地利用了人眼的视觉暂留特性。

将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。

最典型的例子就是电影放映机。

在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。

图3-2描述了将光立方某个侧面对角线点亮的过程

图3-2光立方某个侧面对角线点亮的过程

四、结果分析

本次设计完成了对光立方的系统框架和基本电路的设计,最终通过编写代码使光立方产生了不错的显示效果,基本完成了设计任务中的不同要求,但是仍然存在单独点亮一盏灯亮度不够等等问题。

经过与老师和同学针对这些问题的探讨我们得出了与这些问题相关的一些分析:

1)实际做成的光立方单独一盏灯点亮时,亮度很高,而点亮一个面时亮度明显不够

分析:

这主要是因为这次设计对于LED灯采取的是共阳极的方式,所以用单片机一个引脚的电压带动一个面进行显示肯定是远远不够的,经过思考,我觉得将设计改为共阴极的可能会显示效果更好。

2)光立方有一盏灯总是与设计程序不符合(该亮的时候是灭的,而该灭的时候又是亮的)

这可能是由于在焊接过程中,将这个LED灯的阴极和阳极刚好接反了,于是显示结果刚好相反。

3)点亮侧面的灯时,出现的是该面的灯按层轮换

这可能是由于延时程序设计的不合理,导致画面显示不流畅,修改延时程序,再进行调试后正常显示。

五、实物照片

如图5-1所示是光立方设计底座,其中蓝色方框中为单片机的最小系统,包括单片机和晶振电路以及复位电路,红色方框中为LED列控制端,灯座的引脚分别与单片机的P0、P1的16个IO口相连。

图5-2展示的是最终的显示效果。

图5-1光立方底座

图5-2最终显示效果

六、附:

1、元件清单

表1元件清单

名称

数量

LED灯

70个

AT89C52

1片

按键

1个

102排阻

100欧电阻

16个

20pF瓷片电容

2个

12MHz晶振

10uF电容

10K电阻

1K电阻

2、电路图

图7.2-1光立方整体电路

图7.2-2单片机

图7.2-3时钟电路

图7.2-4复位电路

3、软件清单

#include<

STC15.H>

#defineucharunsignedchar

#defineuintunsignedint

ucharnum,DELAY=100;

sbitH1=P3^4;

sbitH2=P3^5;

sbitH3=P3^6;

sbitH4=P3^7;

sbitL1=P2^0;

sbitL2=P2^1;

sbitL3=P2^2;

sbitL4=P2^3;

sbitL5=P2^4;

sbitL6=P2^5;

sbitL7=P2^6;

sbitL8=P2^7;

sbitL9=P1^0;

sbitL10=P1^1;

sbitL11=P1^2;

sbitL12=P1^3;

sbitL13=P1^4;

sbitL14=P1^5;

sbitL15=P1^6;

sbitL16=P1^7;

ucharcodetab[]=

{

0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,/*"

未命名文件"

0*/

/*(4X4)*/

};

ucharcodetab1[]=

0x0f,0x00,0x0f,0x00,0x0f,0x00,0x0f,0x00,

0xf0,0x00,0xf0,0x00,0xf0,0x00,0xf0,0x00,

0x00,0x0f,0x00,0x0f,0x00,0x0f,0x00,0x0f,

0x00,0xf0,0x00,0xf0,0x00,0xf0,0x00,0xf0,

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

延时函数

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

voiddelay(uinta)

{//用于点扫描的延时

unsignedinti;

while(--a!

=0)

{

for(i=0;

i<

1;

i++);

}

}

面1

voidmian1(uchard,uchare)

uchari;

H2=0;

H3=0;

H4=0;

i=d&

0x01;

if(i==0x01){H1=1;

L1=0;

delay(DELAY);

H1=0;

L1=1;

0x02;

if(i==0x02){H1=1;

L2=0;

L2=1;

0x04;

if(i==0x04){H1=1;

L3=0;

L3=1;

0x08;

if(i==0x08){H1=1;

L4=0;

L4=1;

0x10;

if(i==0x10){H1=1;

L5=0;

L5=1;

0x20;

if(i==0x20){H1=1;

L6=0;

L6=1;

0x40;

if(i==0x40){H1=1;

L7=0;

L7=1;

0x80;

if(i==0x80){H1=1;

L8=0;

L8=1;

i=e&

L9=0;

L9=1;

L10=0;

L10=1;

L11=0;

L11=1;

L12=0;

L12=1;

L13=0;

L13=1;

L14=0;

L14=1;

L15=0;

L15=1;

L16=0;

L16=1;

面2

voidmian2(uchard,uchare)

{

H1=0;

if(i==0x01){H2=1;

H2=0;

L1=1;

if(i==0x02){H2=1;

L2=1;

if(i==0x04){H2=1;

L3=1;

if(i==0x08){H2=1;

L4=1;

if(i==0x10){H2=1;

L5=1;

if(i==0x20){H2=1;

L6=1;

if(i==0x40){H2=1;

L7=1;

if(i==0x80){H2=1;

L8=1;

L9=1;

L10=1;

L11=1;

L12=1;

L13=1;

L14=1;

L15=1;

L16=1;

面3

voidmian3(uchard,uchare)

if(i==0x01){H3=1;

H3=0;

if(i==0x02){H3=1;

if(i==0x04){H3=1;

if(i==0x08){H3=1;

if(i==0x10){H3=1;

if(i==0x20){H3=1;

if(i==0x40){H3=1;

if(i==0x80){H3=1;

面4

voidmian4(uchard,uchare)

if(i==0x01){H4=1;

H4=0;

if(i==0x02){H4=1;

if(i==0x04){H4=1;

if(i==0x08){H4=1;

if(i==0x10){H4=1;

if(i==0x20){H4=1;

if(i==0x40){H4=1;

if(i==0x80){H4=1;

voidcube4(ucharj,uchark,ucharf)

switch(j)

case0:

mian1(k,f);

break;

case1:

mian2(k,f);

case2:

mian3(k,f);

case3:

mian4(k,f);

}

voidall()

uintp,m;

//从上往下

for(num=0;

num<

4;

num++)

for(p=0;

p<

50;

p++)

{

cube4(num,tab[2*num],tab[2*num+1]);

}

/*

16;

num++)//面选择

for(m=0;

m<

30;

m++)//一个面的停留时间

for(p=0;

10;

p++)//扫描一行的次

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

当前位置:首页 > 小学教育 > 语文

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

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