ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:566.07KB ,
资源ID:18666680      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18666680.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的光立方设计Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、2、系统框图本系统主要由时钟电路、复位电路、LED光立方电路组成;时钟电路和复位电路作为单片机输入,LED光立方电路作为单片机输出,显示出控制结果如图2- 1所示。时钟电路:单片机的各个功能部件的运行都是以时钟控制信号为基准,一拍一拍的工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的可靠性和稳定性。常用的时钟电路设计为内部时钟方式,单片机内部有一个由反向放大器构成的振荡电路,芯片上的XTAL1和XTAL2分别为振荡电路的输入和输出端。只要在这两个引脚上接一个石英晶体振荡器和两个微调电容就构成内部方式的振荡器电路,由振荡器产生自激振荡,便构成一个完整的振荡信号发生器。

2、复位电路:通过某种方式,使单片机内部各类寄存器的值变为初始状态的操作称为复位,复位主要通过外部电路实现。常见的复位电路包括上电复位、手动按键复位和看门狗复位三种方式,本次设计综合采用上电复位方式和按键复位方式。图2- 2系统框图3、程序流程本项目的程序设计主要包括延时程序、显示程序两个子程序。显示程序:主要是在得到当前控制灯的位置后,通过控制与它相连的阴阳两端的引脚电平,从而实现对灯的亮灭进行控制。延时程序:由于显示程序不能控制灯持续点亮,达不到显示效果,我们需要增加延时程序来延长显示时间从而达到显示效果。如图2-2所示单片机复位以后,程序开始运行,获取到要显示的LED所在的层和列然后调用显示

3、子程序点亮LED灯,通过延时程序进行短暂延时后继续获取下一个要显示的LED灯的所在的层和列。图2- 3程序流程图三、 工作原理利用单片控制LED点阵显示的原理和控制技术,来控制光立方显示。即通过编写程序控制不同LED的亮灭,来显示不同的内容。由于人眼的具有视觉暂留的特性,设置每幅画面的延迟时间可以使连续的一系列画面呈现动态。最终达到所要显示的内容。每个灯都是由层控制端(共阳极)和列控制端决定亮或灭。如图3-1 a所示,将光立方分成四层,每一层有一个单片机引脚作为层控制端与之相连,设计成共阳极。如图3-1 b所示每层光立方有16盏灯,而这16盏灯又分别与单片机的P0、P1两个IO口组共16个IO

4、口相连,这样就能很好地控制每一盏灯的亮灭。图3-1 光立方结构示意图:a 四层光立方分布结构,b 光立方每层的LED分布在三维光立方中采用动态扫描显示,这种显示方式巧妙地利用了人眼的视觉暂留特性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发光单元的信号线数量,因此在LED显示技术中被广泛使用。图3-2描述了将光立方某个侧面对角线点亮的过程图3-2光立方某个侧面对角线点亮的过程四、 结果分析本次设计完成了对光立方的系统框架和基本电路的设计,最终通过编写代码使光立

5、方产生了不错的显示效果,基本完成了设计任务中的不同要求,但是仍然存在单独点亮一盏灯亮度不够等等问题。经过与老师和同学针对这些问题的探讨我们得出了与这些问题相关的一些分析:1)实际做成的光立方单独一盏灯点亮时,亮度很高,而点亮一个面时亮度明显不够分析:这主要是因为这次设计对于LED灯采取的是共阳极的方式,所以用单片机一个引脚的电压带动一个面进行显示肯定是远远不够的,经过思考,我觉得将设计改为共阴极的可能会显示效果更好。2)光立方有一盏灯总是与设计程序不符合(该亮的时候是灭的,而该灭的时候又是亮的)这可能是由于在焊接过程中,将这个LED灯的阴极和阳极刚好接反了,于是显示结果刚好相反。3)点亮侧面的

6、灯时,出现的是该面的灯按层轮换这可能是由于延时程序设计的不合理,导致画面显示不流畅,修改延时程序,再进行调试后正常显示。五、 实物照片如图5-1所示是光立方设计底座,其中蓝色方框中为单片机的最小系统,包括单片机和晶振电路以及复位电路,红色方框中为LED列控制端,灯座的引脚分别与单片机的P0、P1的16个IO口相连。图5-2展示的是最终的显示效果。图5- 1光立方底座图5- 2最终显示效果六、 附:1、元件清单表 1元件清单名称数量LED灯70个AT89C521片按键1个102排阻100欧电阻16个20pF瓷片电容2个12MHz晶振10uF电容10K电阻1K电阻2、电路图图7.2- 1光立方整体

7、电路图7.2- 2单片机图7.2- 3时钟电路图7.2- 4复位电路3、软件清单#include#define uchar unsigned char#define uint unsigned intuchar num,DELAY=100;sbit H1=P34;sbit H2=P35;sbit H3=P36;sbit H4=P37;sbit L1=P20;sbit L2=P21;sbit L3=P22;sbit L4=P23;sbit L5=P24;sbit L6=P25;sbit L7=P26;sbit L8=P27;sbit L9=P10;sbit L10=P11;sbit L11=P1

8、2;sbit L12=P13;sbit L13=P14;sbit L14=P15;sbit L15=P16;sbit L16=P17;uchar code tab=0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,0xfF,/*未命名文件,0*/* (4 X 4 ) */;uchar code tab1=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,0x

9、f0,0x00,0xf0,0x00,0xf0,/* 延时函数/*/void delay (uint a) / 用于点扫描的延时 unsigned int i; while( -a != 0) for(i = 0; i 1; i+); 面1void mian1(uchar d,uchar e) uchar i;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 =

10、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;L

11、14 =1;L15 = 0;L15 =1;L16 = 0;L16 =1; 面2void mian2(uchar d,uchar e) 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 =

12、1;L10 = 1;L11 = 1;L12 = 1;L13 = 1;L14 = 1;L15 = 1;L16 = 1; 面3void mian3(uchar d,uchar e) 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; 面4void mian4(uchar d,uchar e) if(i = 0x01)H4

13、 = 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;void cube4(uchar j,uchar k,uchar f) switch(j) case 0:mian1(k,f);break; case 1:mian2(k,f); case 2:mian3(k,f); case 3:mian4(k,f); void all() uint p,m;/从上往下 for(num=0;num4;num+) for(p=0;p50;p+) cube4(num,tab2*num,tab2*num+1); /*16;num+)/面选择 for(m=0;m30;m+) /一个面的停留时间 for(p=0;10;p+) /扫描一行的次

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

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