基于51单片机的LED点阵屏的设计与实现毕业论文设计.docx
- 文档编号:10824373
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:35
- 大小:318.39KB
基于51单片机的LED点阵屏的设计与实现毕业论文设计.docx
《基于51单片机的LED点阵屏的设计与实现毕业论文设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的LED点阵屏的设计与实现毕业论文设计.docx(35页珍藏版)》请在冰豆网上搜索。
基于51单片机的LED点阵屏的设计与实现毕业论文设计
基于51单片机的LED点阵屏的设计与实现
摘要
本文主要阐述了用51单片机控制单色32*64的LED点阵屏显示的方法,对LED点阵屏如何进行行列信号控制及信号传输中的驱动问题进行了研究,并讨论了单片机控制系统中关键的数据处理以及发送问题。
结果表明采用并行数据输入、串行数据及同步时钟传输的专用电路可大大减少CPU的辅助时间,提高了数据的发送速度。
并给出了通过软件控制点阵屏显示的几种方式,如静态显示,分屏显示以及左移显示,对其软件的算法给出了具体分析。
基于各种算法我们就可以灵活的运用软件实现各种显示,并将其用于商业用途。
关键词
LED点阵屏;单片机;驱动;扫描
TheDesignandRealizationofLEDLatticeScreen
BasedOnMCU-51
Abstract
ThisarticlemainlyelaboratesthemethodofusingMCU-51tocontrolsinglecolor32*64LEDlatticescreendisplay,andresearchinghowtocarryontherankssignalcontrolandthequestionofsignalactuationwiththeLEDlatticescreen,anddiscussestheessentialdataprocessingandthetransmissionquestioninthemonolithicintegratedcircuitcontrolsystem.TheresultindicatesthatCPUnon-cuttingtimecanbereducedgreatlybyusingtheallocated-usecircuitwithparalleldatainput,serialdataandsynchronismclocktransmission,whichhasraisedthedatatransmittingspeed.Thissystemhasgivenseveralwaystocontrollatticescreendisplayviasoftwaresuchasthestaticstatedisplay,dividedscreendisplayandleftshiftdisplay,whichhasgiventheconcreteanalysisofsoftware'salgorithm.Wecanrealizeallkindsofdisplaynimblybyusingsoftwarebasedoneachalgorithm,anduseitinthecommercialtrade.
Keywords
LEDlatticescreen;One-chipcomputer;Drive;Scan
前言
随着社会文化的不断发展,人们的消费标准不断提高,户外灯箱广告更是扮演着越来越重要的宣传角色,不论是汽车站,火车站,股票交易市场,还是学校都离不开它,然而传统的霓虹灯广告牌不论是在显示效果、耗电量还是可修改性上都无法满足当前社会的需求,传统的霓虹灯广告亟待改进。
由于单片机技术的不断发展和高亮度LED发光管的出现使得大屏幕高亮度LED电子广告屏成为可能,与传统的霓虹灯广告在显示效果以及可修改性上都有着无法比拟的优势,而且单片机的日益平民化以及LED技术的不断创新,使得高亮度高清晰的LED点阵广告牌与传统霓虹灯广告牌的成本日益接近。
另外,SMT技术的飞速发展,开关电源的大规模使用,使其无论在体积上还是在可靠性上都比传统的霓虹灯广告有明显的改进,为其在特殊领域的应用奠定了基础。
这种新兴的大屏幕显示技术成为众人目光的焦点。
与传统的显示设备相比,首先,LED显示屏色彩丰富,3基色的发光管可以显示全彩色,显示方式变化多样(文字、图形、动画、视频、电视画面等),是集光电子技术、微电子技术、计算机技术、信息处理技术于一体的高技术产品,可用来显示文字、计算机屏幕同步的图形。
其次,LED显示屏的像素采用LED发光二极管,将多个发光二极管以序列的形式构成LED显示阵列,这种显示屏具有耗电低、成本低、亮度和清晰度高、寿命长等优点,而且LED显示屏其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,是信息传播设施划时代的产品。
再次,LED显示屏应用广泛,金融证券、银行利率、商业广告、文化娱乐等方面,显示效果清晰稳定,越来越多的地方开始使用LED电子显示屏,有巨大的社会效益和经济效益。
它以其超大画面、超宽视觉、灵活多变的显示方式等独居一格的优势,成为目前国际上使用广泛的显示系统。
1概述
1.1设计任务
本设计主要任务是设计一个实用的32*64LED点阵屏的图文显示,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字稳定、清晰无串扰。
图形或文字显示有静止和移入移出等显示方式。
本文还重点介绍了单片机对LED点阵屏的控制电路,驱动电路的设计方法,并根据LED点阵屏的硬件特点,对其软件实现的算法给出了具体的分析。
从而实现了显示的字体能够进行向左移动。
1.2点阵屏的内部结构及扫描原理
LED点阵屏的内部结构可以分为共阴型和共阳型[5]两种类型,本系统设计采用的是共阳型的LED点阵屏。
其硬件电路如(图1.1)所示,我们只选取了一个8*8的LED矩阵做模型,当行上有一正选通信号时,列选端四位数据为0的发光二极管便导通点亮。
根据这个原理,当我们需要某图形或文字时,只需要将要显示的文字或图形的编码作为列信号跟对应的行信号进行逐次扫描[1],就可以逐行点亮点阵。
当扫描速度大于24Hz,由于扫描时间很快,人眼的视觉有暂留效应[3],就可以看到显示的是完整的图形或文字,这样就达到了显示的效果。
图1.18*8共阳极LED点阵
例如,若要图中所示64个LED显示一个“0”字的方框,则首先在列1~8上写入列编码的信号,接着应将对应的行上加选通信号,即在行、列的信号端分别加上如(图1.2)所示数据,这样,假设显示数字为“0”时:
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00003E4141413E00
图1.2在点阵上所加的行信号以及列选择信号
因此,形成的列代码为00H,00H,3EH,41H,41H,41H,3EH,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程如下所示:
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右;
送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右;
如此下去,直到送完最后一列代码,又从头开始送。
如此循环下去,当刷新频率足够高时(大于24Hz),由于人眼的视觉暂留特性,便可得到一个稳定的“0”字。
这就简单的描叙了一下的点亮LED的扫描原理。
1.3方案论证
1.3.1显示方法的论证
方案一:
从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种控制各个发光点同时亮灭的方法称为静态驱动显示方法[2]。
但从实际考虑可以知道,32*64的点阵共有2048个发光二极管,如果采用这种方法,显然单片机没有这么多端口。
但如果我们采用锁存器来扩展端口,按8位的锁存器来计算,32*64的点阵需要256个锁存器。
这个数字仍然很庞大,而且成本很昂贵,而我们仅仅是32*64的8个汉字点阵,但在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。
显然这样做不能达到我们的要求,因此在实际应用中的显示屏几乎都不采用这种设计方法。
方案二:
而这里我们采用的是另外的一种叫做动态扫描[10]的方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如8行)的同名列共用一套列驱动器。
具体就32*64的点阵来说,把所有同一列的发光管的阴极连在一起,再去驱动这一列LED(共阳接法),每一列先送出对应第1行发光管对应的数据并锁存,再选通第1行使其点亮一定的时间,然后熄灭;再送出第2行的数据并锁存,再选通第2行使其点亮相同的时间,然后熄灭……第8行之后,又重新点亮第1行,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形了。
1.3.2数据传送的方法论证
方案一:
采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。
显示数据通常存储在单片机的程序存储器中,按8位一个字节的形式顺序排放。
显示时只要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。
采用并行方式时,32*64的LED点阵有8列8*8的点阵,需要8*8=64个列数据输入口,而一个89S51只有32个I/O接口,还要同时驱动行数据,根本不够用,并且从控制电路到列驱动器的线路数量大,相应的硬件数目多,由此可以得出,当列数很多时,并行传输的方案是不可取的。
方案二:
采用串行传输[10]的方法,控制电路可以只用2根线:
数据线、时钟线。
将行数据一位一位传往行驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给行驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备传输和列数据显示两个部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给显示的时间就太少了,以致影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用准备数据锁存的方法。
即在显示本行数据的同时,传送下一行的数据。
所以列数据的显示驱动电路就需要具有锁存功能。
经过上述分析,可以归纳出列驱动器电路应具备的主要功能:
对数据准备来说,它应能实现串入并出[7]的移位功能;对数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据输人并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。
同时为了LED显示的亮度,采用8行扫描,每个汉字上面有2个8列驱动器驱动,列驱动器的位置应该是在第1行跟第9行,即每个16*16的汉字点阵是有4个8*8的点阵组成的阵列,扫描的时候同时扫描显示第1行跟第9行,第二次扫描的时候显示第2行跟第10行,以此类推,最后显示第8行跟第16行。
2系统硬件设计
硬件电路[4]大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路以及LED点阵阵列三大部分。
框图(图2.1)如下:
图2.1硬件的总体框图
在实际应用中的大屏幕LED点阵显示屏,都是采用很多的显示模块组成,每个模块一般是有32*64个点阵组成,每个模块负责自己那部分LED的显示;有电脑通过统一的协议发送数据到每个控制单片机,行选是统一的;而且控制模块也是分开的,一个控制模块上面有很多的RAM芯片,控制芯片接收从主控电脑发送过来的数据,并将其保存在RAM中,之后不需要电脑控制即可自己循环控制显示。
而且一个模块控制几个至几十个32*64的点阵模块。
2.1单片机系统及外围电路
由于LED点阵显示屏由单片机控制部分和显示驱动部分组成,单片机我选择最常见的ATMEL公司的AT89C51单片机。
此单片机与MCS-51产品指令系统[9]完全兼容,由4K字节可重擦写Flash闪速存储器,128*8字节内部RAM,32个可编程I/O口线,2个16位定时/计数器和6个中断源。
同时支持在线下载,并且该单片机经济实用,使用广泛。
我们使用的是AT89C51的最小系统电路,包括:
电源、时钟脉冲、复位电路和程序存储器设定电路,暂时只是显示很少的几十个汉字,不用外扩存储器。
2.1.1时钟脉冲电路
AT89C51单片机芯片内部设有一个反向放大器所构成的振荡器,其最高时钟脉冲频率已经达到了24MHz,AT89C51的两个引脚XTAL1和XTAL2(即19、18脚)分别为振荡电路的输入端和输出端,只要连接到简单的石英振荡晶体的2个管脚即可,同时晶体的2个管脚也要用30pF的电容耦合到地。
2.1.2复位电路
89C51的复位引脚(RESET)是第9脚,当此引脚连接高电平超过2个机器周期,即可产生复位的动作。
以24MHz的时钟脉冲为例,每个时钟脉冲为0.5μS,两个机器周期为1µS,因此,在第9脚上连接一个2μS的高电平脉冲,即可产生复位动作。
最简单的硬件电路接法就是用一个电阻,一个电容和一个开关就构成可靠的复位电路[8],电阻一般选择10K,电容一般选择10µF,具体电路如(图2.2)所示:
图2.2通电瞬间复位电路
2.1.3程序及数据存储器设定
因为单片机内部数据存储器[6]只有128Byte,非常有限,运行大一点的程序就显得捉襟见肘,而且程序存储器空间也只有4K,大一点的程序就存储不下,尤其是在存储汉字点阵信息的时候,每个汉字32Byte,100个汉字就到了3.2KB,程序也只有不到1KB的容量了。
在这时候必须外接存储器来扩展,那单片机怎么知道我们当前使用的是内部程序存储器还是外部程序存储器呢?
所以就需要设定单片机是使用外部程序存储器还是内部程序存储器,89C51把31脚设定为此功能,如果把31脚接地,则采用外部程序存储器,如果把31脚接VCC,则默认采用内部程序存储器。
我们暂时只是显示几十个汉字研究原理,所以仅仅用内部存储器就足够了,所以把31脚接高电位,就仅仅使用内部的4K程序存储空间。
如(图2.3)所示。
但是在现实大屏幕显示应用中,一般要扩展ROM,比如24C08(8K的E2PROM),因为大量的数据是有电脑传送过来的,每个单片机只是负责自己控制的一行字符,这些数据是要随时更新的,采用ROM可以随时更新内容,而且一般的显示程序优化以后的代码4K也够用了。
图2.389C51的基本外部电路
2.2列驱动电路
每个汉字需要4个8*8的LED点阵,要想实现8行扫描驱动,上下2行只使用了1个74HC595接到LED点阵模块上,而每个汉字是按照16*16取模,所以需要2个74HC595来驱动一个汉字,我的电路设计的是8个汉字,所以需要8*2=16个74HC595来实现8行扫描显示。
设计好的列驱动电路的部分如下(图2.4)所示:
图2.4列驱动部分电路图
2.2.1串入并出移位寄存器74HC595
列驱动电路由集成电路74HC595构成。
它具有一个8位串入并出的移位寄存器和一个8位输出锁存器,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到数据准备的目的。
图2.574HC595外形及内部逻辑结构
74HC595的外形及内部结构如(图2.5)所示。
它的输入端有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。
引脚SI是串行数据的输入端。
引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据输入最低位。
移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。
RCK是输出锁存器的输入信号,其上升沿将移位寄存器的输出输入到输出锁存器。
引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则输出端为高阻状态。
SCLR信号是移位寄存器的清0输入端,当其为低时移位寄存器的输出全部为0。
由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时向上一级的级联输出。
但因QH受输出锁存器输入控制,所以还从输出锁存器前引出了QH’,作为与移位寄存器完全同步的级联输出。
由74HC595在4.5V供电的情况下(25℃),可以达到21MHz以上的时钟频率,而我们采用的89S51的时钟频率只有24MHz,串口方式0的时钟频率只有fosc/12=2MHz,所以74HC595完全胜任;由于74HC595输出高电平时每个管脚的驱动电流只有20mA,而每个LED发光管的驱动电流也是20mA,要是8个发光管同时轮流点亮的时候瞬间电流必定大于20mA,所以我们采用是采用吸收电流的方式直驱LED发光管。
2.3行驱动电路
本设计采用的是行驱动电路,主要是将输入的信号通过3/8译码器译码后,再通过TIP127扩流以驱动LED点亮,然后再进行行扫描来达到动态显示的目的。
2.3.1电路的设计
89S51单片机P2口低4位输出的3条行选信号和2条使能信号,通过74LS244八位数据缓冲器,经缓冲调整后,再将数据送往3/8译码器74LS138译码的输入端,生成8条行选通信号线,接入一10K的电阻,再接入TIP127的基极,当TIP127导通后再去驱动对应的行LED显示。
其硬件电路如(图2.6)所示:
图2.674LS138译码扩流电路
2.3.23—8线译码器74LS138
我们前面的列驱动电路里面只是用了单片机的串口跟P3口,还剩下P0口以及P1口可以直接接到8个LED的行选端,但是为了整个大屏幕方便以后扩展控制,以及防止直接驱动损坏单片机以及隔离外界干扰信号,所以使用了74LS138这个3—8译码器作为行选通的芯片。
74LS138译码器的引脚图,逻辑图及真值表如下(图2.7)、(表2.1)所示:
图2.774LS138的外部引脚图以及内部原理图
表2.13线-8线译码器74LS138的真值表
由上看以看出,只要在信号输入端A,B,C输入特定组合的1、0的组合序列,就可以在输出端轮只有一个流输出低电压0,这样我们就可以有选择的控制行电路。
2.3.3大电流达林顿管TIP127
TIP127是一种大功率的PNP型达林顿管,其主要目的在于LED的列驱动电路做扩流作用。
我们知道按每一LED器件20mA电流计算,64(8*8)个LED同时点亮时,需要1280mA即1.28A电流,所以选用TIP127作为驱动管,它的最大工作电流可达10A,所以不需要加散热既可稳定工作。
它的原理图如下(图2.8)所示:
图2.8TIP127的内部原理图
2.3.4位数据缓冲器74LS244
我们为了隔离外界的干扰信号,使用了74LS244八位数据缓冲器。
因为任何时候74HC595里面的数据是不确定的,只要显示屏只要稍微有一点外界干扰,导致74LS138使能端E变低,74LS138就是会有输出信号的(通过它的真值表可以看到全0全1都有一行是被选中输出低电位的),TIP127被电阻拉到高电平这样显示屏就显示一些不确定的图案,就不符合我们的设计要求了。
74LS244是一个常用的八缓冲器,它的管脚图以及控制表如(图2.9)所示:
图2.974LS244的外部管脚图及门控制端的真值表
2.4LED点阵屏的输入输出端口
对于整个LED点阵屏,从单片机的I/O口输入时,是先接入到74HC244的,为的是让数据起到缓冲的作用。
因为考虑到当需要多个这样的显示8位汉字的LED点阵屏显示时,必须将几个这样的LED点阵屏级连。
所以每个LED点阵屏都留有输出端。
其电路如(图2.10):
图2.10级联端口
U1:
5代表高低位138的G2B,U2:
4-5代表低位138的G2A和G2B,
U1:
4代表高低位138的G2A,高位138的G1已接高电平,而低位138的G1用U2:
6来表示。
图2.11LED屏的输出端口
图2.12LED屏的输入端口
2.5小结
本章介绍了硬件的连接方法以及原理,并且包含了部分电路图,此电路已经试验证明可以显示汉字信息,并且可动态显示,其中运用了74HC595以及74LS244芯片,74HC595的功能是串入并出,并且带有锁存和移位的功能;而74LS244的作用就是完全屏蔽掉外界的干扰,只有单片机发出的正确的信号才被它选择通过,一般的电路干扰,电磁干扰不会对显示屏造成乱码。
而行驱动则是使用了3-8线译码器74LS138驱动TIP127大功率达林顿管。
如果用单片机直接连接LED点阵,引脚不够,同时驱动能力也不行,而用了这个译码器,可以节省引脚,并且方便以后扩展。
3系统软件设计
显示屏软件的主要功能是向显示屏提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:
第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向点阵屏传送特定组合的显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动程序由显示子程序实现,系统环境设置(初始化)由系统初始化程序完成,显示效果处理等工作,则由主程序通过调用子程序来实现。
3.1显示驱动程序
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等数据发送完毕后输出74HC595的锁存信号,将显示数据打入输出锁存器并锁存,然后再输出新的行号,并打开显示。
图3.1为显示驱动程序(显示屏扫描函数)流程图。
图3.1显示驱动程序流程图
3.2系统主程序
系统主程序开始以后,首先是对系统环境初始化,包括设置串口,端口以及一些参数;然后分屏显示“怀化学院物电系!
,刘小敏的毕业设计”;关闭屏3秒钟,再静止显示“怀化学院物电系!
”停留约3秒,接着开始左跑马滚动显示“怀化学院物电系!
,刘小敏的毕业设计”。
设置系统程序不断地循环执行上述显示效果。
图3.2是系统主程序的流程图。
图3.2系统主程序流程图
3.3部分源程序
3.3.1主程序
以下是32x64点阵LED电子显示屏的源程序,采用C语言编写,在KeilμVisionV3[11]的编译环境下测试通过,并通过了硬件的测试。
main()
{
uchari,*k1,*k2,m=0;
uintj=0;
end=0;
enh=0;
a=0;
b=0;
c=0;
k1=shu;
k2=shu;
while
(1)
{
sring(k1,k2);
mDelay
(1);
enh=0;
}
}
3.3.2分屏显示
该分屏方法是,将我做的字体库分成两个部分,然后在主程序中先调用第一个字体库,通过一段时间的延时后,再调用第二个字体库,然后循环调用即可实现分屏显示。
3.3.2移送数据子程序
voidfachar(uchari,ucharm)//送上下两行的8位数据
{
ucharj;
for(j=0;j<8;j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 LED 点阵 设计 实现 毕业论文
![提示](https://static.bdocx.com/images/bang_tan.gif)