基于单片机的光立方设计课程设计.docx
- 文档编号:25457154
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:28
- 大小:1.11MB
基于单片机的光立方设计课程设计.docx
《基于单片机的光立方设计课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的光立方设计课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
基于单片机的光立方设计课程设计
综合实践
项目名称基于单片机的光立方设计
专业班级
学生姓名
指导教师
年月日
摘要
本课程设计制作出一个三维立体显示图案的LED光立方。
主要采用8*8*8led组成的模式。
距离是14cm*14cm*20cm(长.宽.高),主要分为三个模块:
主控模块、驱动模块、显示模块;我们所做的光立方驱动电路,主控电路等都是纯手工焊接。
采用的主控芯片32KSTC89C58芯片,驱动电路是采用我们常用的74HC574数字芯片。
光立方工作过程中,通过程序对电路的控制,可以在LED组成的立方体上显示出各种图形。
软件采用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
关键词:
LED光立方;74HC574;51单片机
ABSTRACT
Thisdesignproducedathree-dimensionalpatternoftheLEDlightcube.Thisproductcannotonlylikealight-emittingdiodedotmatrixdisplayplanestaticordynamicscreencanalsodisplaythree-dimensionalstaticordynamicimages,andtobreakthetraditionalprogram.Whileincreasingthedisplaypatternsandthree-dimensionaleffectcanbewidelyusedtodisplayanddecorativedisplayforfutureprogressanddevelopmenttoguidethedirection,lightcubedisplaymorevisualeffectsthanthelight-emittingdiodedotmatrix,andthepictureismorerichcolorful.Withacombinationofgraphicsandcharactersmoreperfectdisplaycharacteristics.
ThedesignisSTC89C58MCUcorecontroller,eightDedgeflip-flop74HC574(tri-state)expansionI/Oportcompletionofthehardwarecircuitdesign.ProgrammedbysoftwaretocontrolthedataisdownloadedtotheMCUtocompletethedesignsoftheshow.Thisdesignsoftwareisatop-downmodulardesign,thesystemmovinginthedirectionofdistributed,smalldevelopment,enhancethestabilityofthesystem'sscalabilityandrunning.
Keywords:
52single-chip;74HC573latch;8*8*8LED;
第1章绪论
1.1目的与要求
(1)目的:
转眼间我们学习单片机已经有大半学期了,也是到了期末的考试时间了,感到安慰的是不用考试,但是要做一个实物,做这个实物的目的是主要回顾我们学习的单片机知识和提高我们的焊接和其他的动手实操能力(包括了数字电路和模拟电路的知识)。
(2)要求:
要有自主创新,其中我们的开关是采用触摸型开关,只要由一个I/O口和VCC组成。
1.2电路的设计与元件的选择
1.2.1电路设计
主要分为三个模块分别是主控模块,驱动模块,显示模块。
其中P1位一个触摸型的开关,C3为去耦电容防止高频干扰。
驱动电路:
在驱动电路上,每个锁存芯片的电源端都加了一个瓷片电容,主要的作用是防止高频干扰
显示电路:
所有的灯的负端都是接在一起的,下面的每一组都是控制光立方的一个面,控制的是光立方的竖起来的面,而横着的面由图3的74LS138控制。
1.2.2元件的选择
(1)由于光立方的程序量比较大,而且要求相对比较高,因此经过考虑之后我们决定用51系列的增强型芯片STC89C58,选择的理由:
STC89C58RD+是单时钟/机器周期(IT)的单片机,采集速度较普通51单片机快8一12倍,此外,较宽的电压范围(5.5一3.3V)增强了系统的适应性。
(2)串行移位芯片采用74LS138,它还有亮度调整功能,通过调节R_EXT端的电阻大小或者PWM,就可轻松做到亮度可控。
层切换是通过3-8线译码器74HC138可代换芯片:
74138系列。
对控制器输出的层信号译码,然后通过P沟道MOS管放大后驱动LED光立方一层的二极管阳极,此时对应移位后的并行数据就被显示出来了。
然后通过协调层的数据和层的选通,动态显示后就能做到立体控制与显示。
(3)由于在刚刚接触锁存器的时候,就接触了74HC574,对它的使用也比较成熟,因此在驱动部分使用了熟悉的74HC574,其优点有:
1.高阻态;就是输出既不是高电平,也不是低电平,而是高阻抗的状态;在这种状态下,可以多个芯片并联输出
2.数据锁存;当输入的数据消失时,在芯片的输出端,数据仍然保持
3.数据缓冲;加强驱动能力
4.这8片74LM574构成了64位的静态显示,可显示一层的图像也就是一个二维画面。
(4)LED灯的选择,出于外观和整体的形状美观,我们放弃我们经常用的草帽型LED,采用的是方形高亮的LED灯
由于草帽的光发散比较厉害容易影响视角效果,从而使用方形的,同时方形的也比较聚光。
第2章电路工作原理
2.1设计原理
每层的LED排序如上图D0,D1,D2,D3…D62,D63分别为64个LED阵列实际排序方式,也就是光立方的俯视图,对应下图分别是其数据信号
0,
1,
2,
3…
62,
63;
“光立方”是由8层这样布局的LED组成,每层位置排列全部一致
每层LED的所有正极全部接到一起,然后连接138的行扫描驱动电路,通过138译码确定使能哪一层
数组OUT[0]代表光立方从第一层D0到第八层D0的数据,以此类推数组OUT[1]代表光立方从第一层D1到第八层D1的数据。
这样数组中就包含了光立方完整的一帧数据。
OUT[0]的位0表示光立方的D0的所在第一层数据(1为点亮0为熄灭),同样OUT[0]的位1也就是第2层的数据。
2.2模块与控制器接口
VCC:
电源5V可做处理器电源
GND:
电路地线公共地
EN:
当模块的层扫描信号完成后,使能该信号,低电平有效,必须在下次扫描信号切换前终止使能
C,B,A:
为层扫描切换,000为第1层,001为第2层,010为第3层,011为第4层,100为第5层,101为第6层,110为第7层,111为第8层。
CLK:
为串行移位总线的时钟时序
LE:
寄存器输出脉冲,将此时移位寄存器数据传输到输出寄存器
DS:
SDI为串行移位总线的数据时序时钟上升沿锁存数据
电源:
接5V电源。
第3章方案选择
3.1电源的选择
方案一:
采用普通干电池作为LED系统的电源,由于点阵系统耗电量较大,点阵系统一般悬挂在高处上,一直不停的工作。
使用干电池需经常换电池,不符合节约型社会的要求。
方案二:
采用一块LM7805三端集成稳压器。
把市电经变压器降压输入电路,而后整流送到LM7805三端稳压器稳压输出作为工作电压。
不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠。
方案三:
采用5V电源的移动充电宝。
基于以上分析,决定选取5V电源的移动充电宝供电电源。
3.23D显示核心控制器
控制部分是整个系统的核心部分,其功能可以实现与上位机通信接收上位机发送的数据和控制指令经处理过后控制显示屏显示内容。
其常用的电子设计方法有单片机、DSP、及EDA技术。
3.2.1单片机
单片机是集成了CPU,ROM,RAM和I/O口的微型计算机。
它有很强的接口性能,非常适合于工业控制,因此又叫微控制器(MCU)。
单片机品种齐全,型号多样CPU从8,16,32到64位,多采用RISC技术,片上I/O非常丰富,有的单片机集成有A/D,“看门狗”,PWM,显示驱动,函数发生器,键盘控制等。
它们的价格也高低不等,这样极大地满足了开发者的选择自由。
除此之外单片机还具有低电压和低功耗的特点。
随着超大规模集成电路的发展,单片机在便携式产品中大有用武之地。
3.2.2DSP芯片
DSP又叫数字信号处理器。
顾名思义,DSP主要用于数字信号处理领域,非常适合高密度,重复运算及大数据容量的信号处理。
现在已经广泛应用于通信、便携式计算机和便携式仪表、雷达、图像、航空、家用电器、医疗设备等领域。
DSP区别于一般微处理器的另一重要标志是硬件乘法器以及特殊指令,一般微处理器用软件实现乘法,逐条执行指令,速度慢。
DSP依靠硬件乘法器单周期完成乘法运算,而且还具有专门的信号处理指令。
它的强大数据处理能力和高运行速度,是最值得称道的两大特色。
芯片内置544字的高速SRAM。
外部可寻址64K字程序/数据及I/O,令周期在25ns~50ns之间,实时性处理比16位单片机快2倍以上,可取代一般的单片机。
3.2.3EDA
EDA(即ElectronicDesignAutomation)即电子设计自动化,它是以计算机为工具,在EDA软件平台上,对用硬件描述语言HDL完成的设计文件自动地逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片进行适配编译、逻辑影射和编程下载等。
而且MCU和DSP都是通过串行执行指令来实现特定功能,不可避免低速,而FPGA/CPLD则可实现硬件上的并行工作,在实时测控和高速应用领域前景广阔;另一方面,FPGA/CPLP器件在功能开发上是软件实现的,但物理机制却和纯硬件电路一样,十分可靠。
基于以上分析,三种设计方式相比较各有优点且都能够实现控制功能,但单片机的技术门槛较低开发成本也较低非常适合初学者进行学习和锻炼使用。
现在市场上常用的单片机主要有MCS-52、AVR、ARM、PIC等。
其中应用最广泛的单片机首推Intel的52系列,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势常作为单片机学习的教材。
所以决定选取52系列单片机作为控制部分的核心器件。
3.3I/O口扩展芯片的选择
方案一:
选取串口输入并口输出芯片74LS164,虽然I/O口使用较少,由于本次设计共需要72路I/O口,列驱动电路就需要8块74LS164。
显示数据是先后顺序给送去的,显示会有延迟,而LED动态显示的刷新的时间控制大约10ms,实时性差,效果不好。
方案二:
74HC573跟74LS573的管脚一样。
器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和HC/ALSTTL输出兼容。
当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
8块74HC573共用64个I/O口,数据可以并行写入芯片,延迟时间少,满足设计要求。
综合以上比较,决定选取74HC573作为列线驱动I\O口扩展芯片。
3.4LED发光显示二级管
LED是一种固体光源,当它两端加上正向电压时就可以发光。
采用不同的材料,可制成不同颜色的发光二极管。
作为一种新的光源,广受欢迎而得以快速发展。
从而在各种各样的传媒信息的宣传中得以体现。
简述其分类方法如下。
3.4.1按颜色分类
单基色显示屏:
单一颜色(红色、绿色、黄色、蓝色等等)。
双基色显示屏:
红和绿双基色,256级灰度、可以显示65536种颜色。
全彩色显示屏:
红、绿、蓝三基色,256级灰度的全彩色显示屏可以显示一千六百多万种颜色。
3.4.2按使用场合分类
室内显示屏:
发光点较小,一般Φ3mm--Φ8mm,显示面积一般零点几至十几平方米。
室外显示屏:
面积一般几十平方米至几百平方米,亮度高,可在阳光下工作,具有防风、防雨、防水功能。
3.4.3按发光点直径分类
室内屏:
Φ3mm、Φ3。
75mm、Φ5mm。
室外屏:
Φ10mm、Φ12mm、Φ16mm、Φ19mm、Φ21mm、Φ26mm。
基于以上分析结果,加上由于成本和控制的难易程度,决定选取单色Φ3mm绿光LED作为本次设计显示色彩,亮度高,显示效果很好。
第4章焊接
4.1焊接前准备工作
准备好烙铁、焊锡丝、钳子等工具,以及LED。
LED的正负极很好判别,长的引脚为+,短的为-。
LED最好选用直径3mm的LED,推荐选绿色。
长脚的LED可以省很多工作量。
实际测量长脚是29mm,短脚为27mm,由于LED光立方板子灯的间距决定了,每个LED的间距是20mm。
这样长短引脚都符合这个尺寸。
由于所有LED框架焊接好后,一旦有LED损坏更换难度很大,所以焊接前要测试所有LED,用一般数字显示万用表打到二极管量程,用万用表红表笔接长引脚,黑的接短引脚。
LED正常发光并且亮度基本一致,这样的LED就是好的,否则是坏灯。
如果为了确保可靠也可以焊接好一层后测试LED是否能点亮。
4.2焊接
将8个LED焊接为一组,可以通过2种方法完成。
方法一:
需要用钳子将LED的正极扭弯,这个弯,一定要小,正好露出LED外围打弯正合适,LED的正极折弯后留下的引脚长度必须大于LED的间距20mm,以确保有足够的重合位LED灯脚全部折好后,就可以焊接了,为了方便焊接可以在万能板上面钻几个2mm的孔,间距为8个洞洞置以便焊接。
焊接细节,将一个LED正极的引脚靠近到另一个LED正极的打弯处,然后上焊锡焊接,焊接要光亮可靠,有一定机械强度。
这样将全部LED焊接成8个一组的LED灯排待用。
焊接时避免用过多助焊剂,要不会粘到LED表面,影响外观。
焊机避免正负2极短路。
注意每一层的二极管都是共阴的。
方法二:
需要借助一个工艺设备,这个东西可以自己动手制作,用这个辅助焊接当然要容易些。
焊接方法也是一样的,将一个LED正极的引脚靠近到另一个LED正极的打弯处,然后上焊锡焊接,焊接要光亮可靠,有一定机械强度。
这样将全部LED焊接成8个一组的LED灯排待用。
焊接小经验,由于LED灯脚有一定弹性,一个LED的引脚靠近到另一个LED正极的打弯处时,一松手就又弹远了,所以建议焊接时多掰一点,掰过了之后利用弹性将两个要焊接的引脚靠进,这样焊接会容易许多。
第5章程序设计的选择与分析
作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,常常被优选作为单片机系统的编程语言。
但是基于单片机的C语言和标准C语言有很大区别,如何结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对用编程者来说具有十分重要的意义。
5.1单片机C语言主要特点
用C编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。
C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能[1],这样可使整个应用系统程序结构清晰,易于调试和维护。
不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。
在实际单片机程序设计中,程序结构一般均采用如下结构:
#include
unsignedcharx1,x2;/*全局变量声明部份*/
…Function1(…){/*功能函数定义部份*/
……}
main()
{inti,j;/* 整型变量声明部份*/
Function1(…);/* 功能函数说明部份*/
……}
5.2单片机C语言与标准C语言的区别
由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。
用C语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码甚至有可能比汇编语言生成的代码长几倍,因此对编程者来说,应该注意到单片机C语言和一般意义上的标准C语言的区别,对程序进行适当的优化。
5.3数据类型的选用
单片机C语言编程不同于一般的C语言编程的显著的一个特点,就是要和程序存储器资源结合起来,虽然其提供的数据据类型十分丰富,但是只有bit和char等数据类型是是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相对来说用该类数据类型的语句生成的代码要长。
有些C语言程序表面上看起来十分的简单,但在在实际编译时,生成的代码却相当长。
因此我们要按照实际需要,合理地选用数据,可以大大的减少所生成的代码长度。
例如在S52中每种数据类型变量所占用存储器字节数和经编译后生成的代码长度如表1所示:
通过表1我们知道,不同的数据类型所生成的机器代码长度相差很多,相同类型的数据类型有无符号对机器代码长度也有影响。
在程序编译时生成机器代码长的数据类型的优先级越高,不同的数据类型在进行程序运算时要转化为高优先级的的数据类型,相应的代码长度也会增长[2]。
因此我们应尽可能地使用bit,char等机器语言直接支持的数据类型,无符号数的变量应声明为无符号数,尽可能地减少程序中使用的数据类型的种类。
5.4算法设计问题
单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。
有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。
不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法[2]。
在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。
在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。
比如:
用逻辑AND/&取模比MOD/%操作更有效。
在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。
数学表达式表示为:
RT=RT0expB(1/T-1/T0)
如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用
考虑到系统资源问题可以用一种替代方法—查表法来实现算法。
只要给出一定温度范围内不同温度值对应热敏电阻的电阻值,然后建立表格,只要按照系统求出的阻值,进行查表,插值,就可以求出相应的温度值。
这种算法相比前面的的公式法的算法复杂高,C语言程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。
5.5数据存储器的分配
单片机内部数据存储器RAM只有几百字节,如果扩展外部存储器RAM来提高数据存储量话必将会增加了硬件成本,使系统更加的复杂,访问外部存储器比访问内部存储器所需的代码也要长得多。
有效地使用片内存储器、提高存储器空间的利用率对开发者来说十分关键。
内部处理器、内部堆栈、压缩栈、所有程序变量和所有包含进来的库函数都将使用数量有限的内部数据存储器RAM。
因为C语言采用了存储器的覆盖技术[2],可以在程序进行连接时,它将那些已经被其它程序段释放了的存储器空间重新定义给另一个程序段的变量使用,当这个程序运行结束时再将这些存储器释放以供其它程序段使用。
全局变量的作用范围是整个程序,因此不能被释放;静态变量由于在函数的调用中专用不变,也不能被释放;只有局部变量中的动态变量可以被释放。
因此在进行程序设计时应该尽量的使用局部变量,提高内部数据存储器的使用率。
在C语言中程序中间结果及参数传传递是通过内部的寄存器来完成的,要是内部的存储器不够,将会给你的程序带来许多莫名其妙的错误。
例如在进行程序设计时语句不应该太长,一个长语句可以分成多个语句,这样的话可以大的减少中间变量,当然太长时就会造成临时寄存器的不够用,导致计算出错。
5.6单片机C语言与汇编语言的混合编程
在绝大多数场合采用C语言编程即可完成预期的目的,但是对实时时钟系统、要求执行效率高的的系统就不适合采用C语言编程,对这些特殊情况进行编程时要结合汇编语言。
汇编语言具有直接和硬件打道、执行代码的效率高等特点,可以做到C语言所不能做到的一些事情,例如对时钟要求很严格时,使用汇编语言成了唯一的选择。
这种混合编程[2]的方法将C语言和汇编语言的优点结合起来,已经成为目前单片机开发最流行的编程方法。
目前大多数据单片机系统,在C语言中使用汇编语言有两种情况:
一种是汇编程序部分和C程序部分为不同的模块,或不同的文件,通常由C程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C语言程序中嵌入一段汇编语言程序。
当汇编程序和C程序为不同模块时程序一般可分为若于个C程序模块和汇编程序模块,C程序模块通常是程序的主体框架,而汇编程序模块通常由用C语言实现效率不高的函数组成,也可以是已经成熟的、没有必要再转化成C语言的汇编子程序。
在这种混合编程技术中,关键是参数的传递和函数的返回值。
它们必须有完整的约定,否则数据的交换就可能出错。
对于嵌入式汇编,可以在C程序中使用一些关键字嵌入下些汇编程序,这种方法主要用于实现数学运算或中断处理,以便生成精练的代码,减少运行时间。
当汇编函数不大,且内部没有复杂的跳转时,可以用嵌入式汇编实现。
AT89S52单片机内置模拟比较器,13脚即P1.1是比较器的负输入端,12脚即P1.0是比较器的正输入端,比较器的输出端做在了CPU内部即P3.6未被引出,CPU可以直接读取P3.6状态来判定两输入端比较的结果其和一个外部电阻及一个外部电容器就可以设计成一个A/D转换器,采用RC模拟转换的原理,来检测外部P1.1引脚的输入电压。
由于系统对时钟要求很严格,因此就采用了C语言和汇编语言混合编程技术,程序调用形式如下:
汇编子程序:
PUBLIC_AD;入口地址
conSEGMENTCODE;程序段
RSEGcon
_AD:
SETBP3.7;充电
Loop:
JBP3.6,AD_END;开始计数匹配
INCA
CJNEA,#100,Loop
AD_END:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 立方 设计 课程设计