基于单片机的16×16点阵LED电子显示屏的设计报告Word文件下载.doc
《基于单片机的16×16点阵LED电子显示屏的设计报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《基于单片机的16×16点阵LED电子显示屏的设计报告Word文件下载.doc(37页珍藏版)》请在冰点文库上搜索。
本文详细介绍了一种低廉的16x64阵LED显示屏的设计过程。
1.1.设计意义
1、实现LED点阵屏核心功能即汉字及字母的多样化显示。
2、通过本次课程设计加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解。
3、掌握SPI串口进行数据传输的应用,并学会使用外部芯片辅助项目设计。
4、锻炼通过自学与自己探索的方式解决问题的能力。
5、通过此次课程设计将单片机软硬件结合起来对程序进行编辑,校验,锻炼实践能力和理论联系实际的能力。
1.2.系统功能要求
设计一个室内用16×
16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
2.方案设计
从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。
16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×
16的点阵需要256/8=32个锁存器。
这个数字很庞大,因为我们仅仅是16×
16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。
因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。
具体就16×
16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;
再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;
……第十六行之后又重新燃亮第一行,这样反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。
显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。
当列数很多时,并行传输的方案是不可取的。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。
即在显示本行各列数据的同时,传送下一行的列数据。
为了达到重叠处理的目的,列数据的显示就需要具有锁存功能。
经过上述分析,可以归纳出列驱动器电路应具备的主要功能。
对于列数据准备来说,它应能实现串入并出的移位功能;
对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据而不影响本行的显示。
3硬件系统设计
本系统采用AT89C52单片机作控制器,整个电路主要由单片机控制及其接口电路、驱动显示电路、电源电路等部分组成。
为了简化显示屏电路,降低成本,本系统在单片机部分不加字库存储器。
而在PC机上编辑汉字和字符显示信息,并将其转换为相应的点阵显示数据,然后通过串口(采用RS-232通信标准)送给单片机存储并进行显示处理。
图1所示为其硬件系统原理图。
3.1单片机控制电路
本系统由AT89C52构成单片机最小应用系统.同时配有11.0592MHz晶振和按键复位电路等。
系统外扩的一片Flash存储器29F040为数据存储器,可用来存储由PC机串口送来的点阵信息(通过软件将图像或文字转换成与LED显示屏的像素相对应的点阵信息)。
该Flash存储器是一种非易失性存储器,它在供电电源关闭后仍能保持片内信息。
由于29F040的容量为512KB(该芯片内部由8个64Kbyte的读写块组成,可分块进行读、写和擦除等操作),而AT89C52只能管理64KB的数据空间,所以,需将29F040分成8页,每页64KB。
其页码可由单片机的P3.2~P3.4来选择。
另外,采用MAX232可完成RS232与TTL电平的转换,以便使PC机与单片机交换信息。
3.216x16点阵显示器的设计
(a)图2是一种8x8的LED点阵单色行共阳模块的内部结构图,其单点工作电压Uf为1.8V,正向电流IF为8~10mA。
当某一行线为高电平而某一列线为低时,其行列交叉的点就被点亮;
而当其某一列线为高时,其行列交叉的点为暗;
当某一行线为低电平时,无论列线如何,对应这一行的点全部为暗。
用四个8x8点阵显示可构成16x16点阵显示器,其连接方法如图3所示。
图中,将(A)和(B)的8列、(C)和(D)的8列分别对应相连,同时将(A)和(C)的8行、(B)和(D)的8行分别对应相连。
即可形成一个16行(每一行有16个LED)、16列(每一列也有16个LED)的16x16点阵显示器,可将这256个点称为一页,这样,显示字符时。
只要对一页中对应的亮灭进行控制即可。
(b)LED点阵显示器的扫描驱动
LED显示屏驱动电路的设计应与所用控制系统相配合。
驱动通常分为动态扫描型及静态锁存型驱动二大类。
本文以动态扫描型驱动电路的设计为例来进行分析。
动态扫描型驱动方式是指显示屏上的16行发光二极管共用一组列驱动寄存器,然后通过行驱动管的分时工作,来使每行LED的点亮时间占总时间的1/16。
只要每行的刷新速率大于50Hz,利用人眼的视觉暂留效应,人们就可以看到一幅完整的文字或画面。
AT89S52单片机有四个I/O口(P0、P1、P2、P3),每个I/O口有8位,如果都采用并行输出,显然不能满足要求,因此,本设计中的行扫描驱动采用并口输出,而场扫描驱动采用串口输出。
(1)行扫描驱动
由于16x64点阵显示器有16行,为充分利用单片机的接口,本电路中加入了一个4-16线译码器74LS154,其输入是一个16进制码,解码输出为低态扫描信号,它们的管脚示意图如图4所示。
把74LS154的G1和G2引脚接地,然后以A、B、C、D四脚为输入端。
就会形成16种不同的输入状态,分别为0000~1111,然后使每种状态只控制一路输出,即会有16路输出。
如果一行64点全部点亮,则通过74LS154的电流将达640mA,而实际上,74LS154译码器提供不了足够的吸收电流来同时驱动64个LED同时点亮,因此,应在74LS154每一路输出端与16x64点阵显示器对应的每一行之间用一个三极管来将电流信号放大,本文选用的是达林顿三极管TIP127。
这样,74LS154某一输出脚为低电平时,对应的三极管发射极为高电平,从而使点阵显示器的对应行也为高电平。
(b)场扫描驱动
本系统场扫描驱动电路的设计可用串入并出的通用集成电路74HC595来作为数据锁存。
74HC595是一个八位串行输入三态并行输出的移位寄存器,其管脚见图4所示,其中SI是串行数据的输入端,RCK是存储寄存器的输入时钟,SCK是移位寄存器的输入时钟,Q'
H是串人数据的输出,G是对输人数据的输出使能控制,QA~QH为串入数据的并行输出。
从SI口输入的数据可在移位寄存器的SCK脚上升沿的作用下输入到74HC595中。
并在RCK脚的上升沿作用下将输入的数据锁存在74HC595中,这样,当G为低电平时,数据便可并行输出。
为了避免与PC机串口输入的数据相互干扰,也可使用模拟串口P1.4~P1.7来分别输出串行数据、移位时钟SCK、存储信号RCK和并行输出的使能信号G。
为了消除电源电压的波动及行扫描管压降(第一行点亮的点数不同,将引起管压降的变化,从而影响通过LED管的电流)的变化对LED显示屏亮度的影响,设计时可采用列恒流驱动电路,可选用三极管8550和外围元件构成列恒流驱动电路,并通过调整100kΩ可调电阻使三极管处于放大状态,同时将集电极电流调整为10mA,从而使点亮对应点阵时通过LED的电流不变。
(c)扫描显示工作过程
将8片74HC595进行级连,可共用一个移位时钟SCK及数据锁存信号RCK。
这样,当第一行需要显示的数据经过8x8=64个SCK时钟后便可将其全部移入74HC595中,此时还将产生一个数据锁存信号RCK将数据锁存在74HC595中,并在使能信号G的作用下,使串入数据并行输出,从而使与各输出位对应的场驱动管处于放大或截止状态;
同时由行扫描控制电路产生信号使第一行扫描管导通,相当于第一行LED的正端都接高,显然,第一行LED管的亮灭就取决于74HC595中的锁存信号;
此外,在第一行LED管点亮的同时,再在74HC595中移入第二行需要显示的数据,随后将其锁存,同时由行扫描控制电路将第一行扫描管关闭而接通第二行,使第二行LED管点亮,以此类推,当第十六行扫描过后再回到第一行,这样,只要扫描速度足够高,就可形成一幅完整的文字或图像。
4软件设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,我们可把显示屏的软件系统分成两大层:
第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适宜采用C语言编写。
(1).显示驱动程序
显示驱动程序在进入中断后首先要对定时器T0重新赋初值以保证显示屏刷新率的稳定,1/16扫描的显示屏的刷新率(帧频)的计算公式如下:
式1
其中fosc为晶振频率,t0为定时器T0初值(工作在16位定时器模式)。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。
图5为显示程序流程图。
(2).系统主程序
系统主程序开始以后首先是对系统环境初始化,包括设置串口、定时器、中断和端口。
先是显示屏中所有的灯全亮用以验证实验线路的正确,然后以“卷帘出”效果向上滚动显示“咸宁学院电子与信息工程学院零八级电气工程及其自动化一班周俊龙!
徐武雄”的字样,由于单片机没有停机指令,所以我们可以设置系统程序不断地循环执行上述显示效果。
5系统调试
介绍所设计的系统调试过程、在调试中遇到的问题及解决的办法。
LED显示屏硬件电路只要器件质量可靠,管脚焊接正确,一般无需调试即可正常工作。
软件部分需要调试的主要有显示屏刷新频率及显示效果两部分。
显示屏刷新率由定时器T0的溢出率和单片机的晶振频率决定,
1.测试仪器:
AVRStudio软件、仿真器、万用表
2.测试与分析:
(1)测试点阵:
系统上电后,全屏点亮时无暗点,表明点阵正常,可使用。
(2)测试键盘:
直接连接键盘到单个可用LED发光二极管(这里采用实验板上发光二极管),按下每个按键看LED是否可亮,若亮,说明键盘可用。
(3)程序调试:
通过AVRStudio下载程序到单片机上,逐步运行程序,并Watch相关变量的值的改变,以确定各部分程序是否正常运行并可用,直到检测完毕。
(4)实时操作:
运行已通过调试的程序,这时点阵屏自左往右滚动显示“我爱学习零八级电气一班蔡臣:
学号083521041,指导老师:
徐武雄”
至此,调试彻底通过!
整个课程大体操作如上所述,但实际在细节上遇到较多问题,因为所做为点阵,相关实验数据没有,遇到的问题主要有因存在虚焊点而导致有灰点;
因程序问题而导致的重影;
还有一个问题是因单片机端口输出的低电平不够低,使得我们不能用使能端控制74HC154。
详细实验遇到的问题及解决将在总结报告中指出。
显示效果处理程序的内容及方法非常广泛,其调试过程在此不作具体讨论,读者可对照源程序自行分析。
这个方案设计的16×
16点阵LED图文显示屏,电路简单,成本较低,且较容易扩展成更大的显示屏;
显示屏各点亮度均匀、充足;
显示图形或文字稳定、清晰无串扰;
可用静止、移入移出等多种显示方式显示图形或文字。
6设计总结
本文所讨论的点阵显示屏的设计采用了单片机AT89S52作为系统的中央控制单元,并结合软件编程,实现的点阵显示屏静态显示、动态显示,简化了系统操作,丰富了系统功能,符合未来交通智能化、网络化的发展方向。
经过实际应用证明,本显示屏可以作为信息显示装置。
用于公共场所来进行信息显示,而且具有工作稳定、字符清晰、亮度适中等特点。
若所显示的信息较为简单,也可直接将信息代码拷入单片机中,还可以通过外扩储存器的方式来增加显示的信息量。
在本次课程设计过程当中,指导老师徐武雄老师和其他老师以及同学们都给予了很大的帮助支持,徐老师严谨的治学态度和务实的求知精神给我留下了很深的印象,他鼓励我孜孜不倦,锐意进取,特别是在困难的时候,他有意识地培养我独立思考和解决问题的能力。
徐老师的严格要求,令我以后的工作和生活当中受益匪浅。
在此,对他们所给予的指导和帮助表示最衷心的感谢。
7附录A;
源程序
源程序代码(主要语句要有注释)。
;
;
***********************************
* *
*咸宁学院单片机课程设计 *
*单个16*16点阵电子屏字符显示器*
*AT89S5212MHz晶振*
*2011.5.8*
*************************************
显示字用查字法,不占内存,字符用16*16共阳极LED点阵,
效果:
向上滚动显示19个字,再重复循环。
R1:
查表偏址寄存器,B:
查表首址,R2:
扫描地址(从00H~0FH)。
R3:
滚动显示时控制移动速度,单字显示可控制静止显示时间。
*****************
中断入口程序;
ORG0000H
LJMPSTART
ORG0003H
RETI
ORG000BH
LJMPINTT0
ORG0013H
ORG001BH
ORG0023H
ORG002BH
RETI;
**********
初始化程序
主程序
**********;
START:
MOV20H,#00H;
清标志,00H为第16行开始扫描标志,
;
01为一帧扫描结束标志
MOVA,#0FFH;
端口初始化
MOVP1,A
MOVP2,A
MOVP3,A
MOVP0,A
CLRP1.6;
串行寄存器输入打入输出控制位
MOVTMOD,#01H;
使用T0作16位定时器,行扫描用
MOVTH0,#0FCH;
1ms初值(12MHz)
MOVTL0,#18H
MOVSCON,#00H;
串口0方式传送显示字节
MOVIE,#82H;
T0中断允许,总中断允许
MOVSP,#70H
MAIN:
LCALLDIS1;
显示准备,黑屏,1.5s
MOVDPTR,#TAB
LCALLMOVDISP;
向上滚动显示一页(8个字)
INCDPH
AJMPMAI;
******************
多字滚动显示子程序
每次8个字,入口时定义好DPTR;
MOVDISP:
MOVB,#00H;
向上移动显示,查表偏址暂存(从00开始)
DISLOOP:
MOVR3,#07H;
移动速度
DISMOV:
MOVR2,#00H;
从第0行开始
MOVR1,B
SETBTR0;
开扫描(每次一帧)
WAITMOV:
JBC01H,DISMOV1;
标志为1扫描一帧结束(16ms为一帧,每行1ms)
AJMPWAITMOV
DISMOV1:
DJNZR3,DISMOV;
一帧重复显示(控制移动速度)
INCB;
显示下一行(每行2字)
INCB
MOVA,R1;
R1为0,8个字显示完
JZMOVOUT
AJMPDISLOOP
MOVOUT:
RET;
移动显示结束;
**************
单字显示子程序
显示表中的某个字
DIS1:
MOVR3,#5AH;
静止显示时间控制(16ms*#=1.6s)
DIS11:
MOVR2,#00H;
一帧扫描初始值(行地址从00~0Fh)
MOVDPTR,#TAB;
取表首地址
MOVR1,#00H;
查表偏址(显示第一个字)
SETBTR0;
WAIT11:
JBC01H,DIS111;
为1,扫描一帧结束
AJMPWAIT11
DIS111:
DJNZR3,DIS11
RET;
*************
扫描程序
1ms刷新一次,每行显示1ms
INTT0:
PUSHACC
MOVTH0,#0FCH;
1ms初值重装
MOVTL0,#18H
JBC00H,GOEND;
16行扫描标志为1,结束
INCR1;
取行右边字节偏址
MOVA,R1
MOVCA,@A+DPTR;
查表
CLRTI
MOVSBUF,A