资源描述
摘要本文阐明用单片机控制单色显示屏的方法,对LED显示模块单元如何进行行列信号控制及信号传输中的驱动问题进行了研究。讨论了单片机控制系统中关键的数据处理以及发送问题,结果表明采用并行数据输入、串行数据及同步时钟输出的专用电路可大大减少CPU的辅助时间,提高数据的发送速度。关键词 LED;单片机;显示屏;驱动;扫描A LED Display System Control Base On MCUStudent: ZHANG Tao Teacher: CHEN Xiao-qinAbstract:This text clarifies to use a singlechip control monochrome manifestation to hold of method, show the mold piece how the unit carry on the row or column signal control and signal to deliver to the LED medium of drove a problem to research. Discussing a problem of singlechip in a control system how dose it processing the key data and sending out, result indicate adoption parallel communication, string data in line and synchronous the clock outputs appropriation electric circuit can reduce CPU assistant time consumedly, the exaltation data sends out speed.Keywords:LED;Surface Mount Assemblies;Display;Driver;Scan目次摘要IAbstractII1引言11.1 广告屏的现状11.2 设计任务11.3 数学模型21.4 方案论证32 系统硬件设计62.1 电源电路62.2 单片机系统及外围电路72.3 列驱动电路92.4 行驱动电路112.5 小结143 系统软件设计153.1 显示驱动程序153.2 系统主程序153.3 部分源程序164 结论20致谢21参考文献22附录123附录224千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。311引言1.1 广告屏的现状随着社会文化的不断发展,人们的消费标准不断改变,户外灯箱广告更是扮演着越来越重要的宣传角色,不论是汽车站,火车站,股市交易市场,还是学校都离不开它,然而传统的霓虹灯广告牌不论是在显示效果、耗电量还是可修改性上都无法满足当前社会的需求,传统的霓虹灯广告亟待改进。由于单片机技术的不断发展和高亮度LED发光管的出现使得大屏幕高亮度LED电子广告屏成为可能,与传统的霓虹灯广告在显示效果以及可修改性上都有着无法比拟的优势,而且单片机的日益平民化以及LED技术的不断创新,使得高亮度高清晰的LED点阵广告牌与传统霓虹灯广告牌的成本日益接近。另外,SMT技术的飞速发展,开关电源的大规模使用,使其无论在体积上还是在可靠性上都比传统的霓虹灯广告有明显的优势,为其在特殊领域的应用奠定了基础。这种新兴的大屏幕显示技术成为众人目光的焦点。与传统的显示设备相比,首先,LED 显示屏色彩丰富,3基色的发光管的可以显示全彩色,显示显示方式变化多样(文字、图形、动画、视频、电视画面等)、亮度高,是集光电子技术、微电子技术、计算机技术、信息处理技术于一体的高技术产品,可用来显示文字、计算机屏幕同步的图形。其次,LED 显示屏的象素采用LED发光二极管,将多个发光二极管以序列的形式构成LED显示阵列,这种显示屏具有耗电省、成本低、亮度清晰度高、寿命长等优点,而且 LED 显示屏以其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,是信息传播设施划时代的产品。再次,LED 显示屏应用广泛,金融证券、银行利率、商业广告、文化娱乐等方面,显示效果清晰稳定,越来越多的地方开始使用LED电子显示屏,有巨大的社会效益和经济效益。它以其超大画面、超宽视觉、灵活多变的显示方式等独居一格的优势,是目前国际上使用广泛的显示系统。1.2 设计任务设计一个室内用32*64点阵LED单色图文显示屏,要求在目测条件下LED显示屏各点亮度均匀,充足,可显示图形和文字,显示图形或文字稳定、清晰无串扰。图形或文字显示有静止和移入移出等显示方式。本文重点介绍了基于单片机系统的单色LED显示屏的控制电路、驱动电路的设计方法,并针对一个32x64屏的显示特点,对其软件实现的算法给出了具体的分析。1.3 数学模型对于点阵型LED显示可以采用共阴极或共阳极,本系统采用共阳极,其硬件电路如图1.1所示。当行上有一正选通信号时,列选端四位数据为0的发光二极管便导通点亮。这样只需要将图形或文字的显示编码作为列信号跟对应的行信号进行逐次扫描,就可以逐行点亮点阵。只要扫描速度大于24Hz,由于扫描时间很快,人眼的视觉有暂留效应,就可以看到显示的是完整的图形或文字。图1.1 4*4共阳极LED点阵例如,若要图中所示16个LED显示一个“口”字的方框,则首先在列1上写入列编码信号,接着应将对应的行上加选通信号,即在行、列的信号端分别加上如表1.1所示数据:列1列2列3列4行10000行20110行30110行40000表1.1 在点阵上所加的行信号以及列选择信号这样,当第一行选通时列信号为0000;第二行选通时列信号为0110;第三行选通时列信号为0110;第四行选通时列信号为0000;再选通第一行送列信号0000如此循环下去,当刷新频率足够高时(大于24Hz),由于人眼的视觉暂留特性,便可观察到稳定的方框。1.4 方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。32*64的点阵共有2048个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,32*64的点阵需要256个锁存器。这个数字很庞大,而且成本很昂贵,我们仅仅是32*64的8个汉字点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如8行)的同名列共用一套列驱动器。具体就32*64的点阵来说,把所有同一列的发光管的阴极连在一起,再去驱动这一列LED (共阳接法),每一列先送出对应第1行发光管对应的数据并锁存,再选通第1行使其点亮一定的时间,然后熄灭;再送出第2行的数据并锁存,再选通第2行使其点亮相同的时间,然后熄灭第8行之后,又重新点亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形了。采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。显示数据通常存储在单片机的程序存储器中,按8位一个字节的形式顺序排放。显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。从控制电路到列驱动器的数据传输可以采用并行方式或串行方式。采用并行方式时,32*64的LED点阵有8列8*8的点阵,需要8*8=64个列数据输入口,而一个89C51只有32个I/O接口,还要同时驱动行数据,根本不够用;并且从控制电路到列驱动器的线路数量大,相应的硬件数目多,由此可以得出,当列数很多时,并行传输的方案是不可取的。采用串行传输的方法,控制电路可以只用2根线:数据线、时钟线。将行数据一位一位传往行驱动器,在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给行驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给显示的时间就太少了,以致影响到LED的亮度。解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。即在显示本行数据的同时,传送下一行的数据。为了达到重叠处理的目的,列数据的显示驱动电路就需要具有锁存功能。经过上述分析,可以归纳出列驱动器电路应具备的主要功能:对数据准备来说,它应能实现串入并出的移位功能;对数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据打人并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示。同时为了LED显示的亮度,采用8行扫描,每个汉字上面有2个16列驱动器驱动,列驱动器的位置应该是在第1行跟第9行,即每个16*16的汉字点阵是有4个8*8的点阵组成的阵列,扫描的时候同时扫描显示第1行跟第9行,第二次扫描的时候显示第2行跟第10行,以此类推,最后显示第8行跟第16行,如图1.2所示:第1行全亮 | 第2行不亮 | 第3行不亮 | 第4行不亮 | 第5行不亮 | 第6行不亮 | 第7行不亮 | 第8行不亮 | 第9行全亮 | 第10行不亮 | 第11行不亮 | 第12行不亮 | 第13行不亮 | 第14行不亮 | 第15行不亮 | 第16行不亮 | 图1.2综合上述可以看出整个点阵显示的实现电路结构应该如图1.3所示: 图1.3 显示屏电路框图硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路以及LED点阵阵列三大部分。在实际应用中的大屏幕LED点阵显示屏,都是采用很多的显示模块组成,每个模块一般是有32*64个点阵组成,每个模块负责自己那部分LED的显示;有电脑通过统一的协议发送数据到每个控制单片机,行选是统一的;而且控制模块也是分开的,一个控制模块上面有很多的RAM芯片,控制芯片接收从主控电脑发送过来的数据,并将其保存在RAM中,之后不需要电脑控制即可自己循环控制显示。而且一个模块控制几个至几十个32*64的点阵模块。2 系统硬件设计2.1 电源电路本设计采用的是电脑开关电源,它的主控芯片是TL494。TL494是一种固定频率脉宽调制电路,它包含了开关电源控制所需的全部功能,广泛应用于单端正激双管式、半桥式、全桥式开关电源。TL494的管脚以及内部电路框图如图2.1所示。其引脚功能如下:图2.1 TL494外部管脚以及内部电路框图1、2,16、15脚分别为2个误差比较放大器的同相输入端和反相输入端。3脚为控制比较放大器和误差比较放大器的公共输出端,输出时表现为或输出控制特性,也就是就在两个放大器中,输出幅度大者起作用;当3脚的电平变高时,TL494送出的驱动脉冲宽度变窄,当3脚电平低时,驱动脉冲宽度变宽。4脚为死区电平控制端,从4脚加入死区控制电压可对驱动脉冲的最大宽度进行控制,使其不超过180度,这样可以保护开关电源电路中的三极管。5、6脚分别用于外接振荡电阻和电容。7脚为接地端。8、9脚和11、12脚分别为TL494内容末级两个输出三极管的集电极和发射极。12脚为电源供电端。13脚为功能控制端。14脚为内部5V基准电压输出端。我们的设计使用电脑开关电源提供的12V,5V,3.3V 3路电压。2.2 单片机系统及外围电路由于LED点阵显示屏由单片机控制部分和显示驱动部分组成,单片机我选择最常见的ATMEL公司的AT89C51单片机。此单片机与MCS-51产品指令系统完全兼容,由4K字节可重擦写Flash闪速存储器,128*8字节内部RAM,32个可编程I/O口线,2个16位定时/计数器和6个中断源。并且该单片机经济实用,使用广泛。我们使用的是AT89C51的最小系统电路,包括:电源、时钟脉冲、复位电路和程序存储器设定电路,暂时只是显示很少的几十个汉字,不用外接存储扩展。2.2.1 时钟脉冲电路AT89C51单片机的最高时钟脉冲频率已经达到了24MHz ,它内部已经具备了振荡电路,只要在AT89C51的两个引脚(即19、18脚)连接到简单的石英振荡晶体的2个管脚即可,同时晶体的2个管脚也要用30pF的电容耦合到地。2.2.2 复位电路89C51的复位引脚(RESET)是第9脚,当此引脚连接高电平超过2个机器周期,即可产生复位的动作。以24MHz的时钟脉冲为例,每个时钟脉冲为0.5S,两个机器周期为1S,因此,在第9脚上连接一个2S的高电平脉冲,即可产生复位动作。最简单的就是只有一个电阻跟一个电容就可可靠复位的电路,电阻一般选择10K,电容一般选择10F,如图2.2所示。图2.2 通电瞬间复位电路2.2.3 程序及数据存储器设定因为单片机内部数据存储器只有128 Byte,非常有限,运行大一点的程序就显得捉襟见肘;而且程序存储器空间也只有4K,大一点的程序就存储不下,尤其是在存储汉字点阵信息的时候,每个汉字32Byte,100个汉字就到了3.1KB,程序也只有不到1KB的容量了。 在这时候必须外接存储器来扩展,那单片机怎么知道我们当前使用的是内部程序存储器还是外部程序存储器呢?所以就需要设定单片机是使用外部程序存储器还是内部程序存储器,89C51把31脚设定为此功能,如果把31脚接地,则采用外部程序存储器,如果把31脚接VCC,则默认采用内部程序存储器。我们暂时只是显示几十个汉字研究原理,所以仅仅用内部存储器就足够了,所以把31脚接高电位,就仅仅使用内部的4K程序存储空间。如图2.3所示。但是在现实大屏幕显示应用中,一般要扩展RAM,比如HY62256A(32K*8bit RAM),因为大量的数据是有电脑传送过来的,每个单片机只是负责自己控制的一行字符,这些数据是要随时更新的,采用RAM可以随时更新内容;而且一般的显示程序优化以后的代码4K也够用了。图2.3 89C51的基本外部电路2.3 列驱动电路2.3.1 总体规划及实现电路每个汉字需要4个8*8的LED点阵,要想实现8行扫描驱动,上下2行必须都有1个74HC595接到LED点阵模块上,而每个汉字是按照16*16取模,所以需要4个74HC595来驱动一个汉字,我的电路设计的是8个汉字,所以需要8*4=32个74HC595来实现8行扫描显示。设计好的列驱动电路的部分如下图2.6所示: 图2.4列驱动部分电路图2.3.2 串入并出移位寄存器74HC595列驱动电路由集成电路74HC595构成。它具有一个8位串入并出的移位寄存器和一个8位输出锁存器,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。图2.5 74HC595外形及内部逻辑结构图74HC595的外形及内部结构如图2.5所示。它的输入端有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。引脚SI是串行数据的输入端。引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入到输出锁存器。引脚G是输出三态门的开放信号,只有当其为低时锁存器的输出才开放,否则输出端为高阻状态。SCLR信号是移位寄存器的清0输入端,当其为低时移位寄存器的输出全部为0。由于SCK和RCK两个信号是互相独立的,所以能够做到输入串行移位与输出锁存互不干扰。芯片的输出端为QAQH,最高位QH可作为多片74HC595级联应用时向上一级的级联输出。但因QH受输出锁存器打人控制,所以还从输出锁存器前引出了QH,作为与移位寄存器完全同步的级联输出。图2.6 74HC595在不同的工作电压下的时钟频率由74HC595在4.5V供电的情况下(25),可以达到21MHz以上的时钟频率,而我们采用的89C51的时钟频率只有24MHz,串口方式0的时钟频率只有fosc/12=2MHz,所以74HC595完全胜任;由于74HC595输出高电平时每个管脚的驱动电流只有20mA,而每个LED发光管的驱动电流也是20mA,要是8个发光管同时轮流点亮的时候瞬间电流必定大于20mA,所以我们采用是采用吸收电流的方式直驱LED发光管。2.4 行驱动电路2.4.1 电路的设计单片机P2口低4位输出的行选信号经74LS244八位数据缓冲器将数据缓冲后送往3/8译码器74LS138译码的输入端,生成8条行选通信号线,再经过SN7406六路高电压输出反相器将信号取反后使IRF540导通再去驱动对应的行LED显示。其硬件电路如图2.7所示:图2.7 点阵显示屏行驱动硬件原理图2.4.2 38线译码器74LS138我们前面的列驱动电路里面只是用了单片机的串口跟P1口,还剩下P0以及P2口可以直接接到8个LED的行选端,但是为了整个大屏幕方便以后扩展控制,防止直接驱动损坏单片机以及隔离外界干扰信号,使用了74LS138这个38译码器作为行选芯片。74LS138译码器的引脚图,逻辑图及真值表如下图2.8、图2.9所示:图2.8 74LS138的外部引脚图以及内部原理图图2.9 3线-8线译码器74LS138的真值表由上看以看出,只要在信号输入端A,B,C输入特定组合的1、0的组合序列,就可以在输出端轮只有一个流输出低电压0,这样我们就可以有选择的控制行电路。2.4.3 六路高电压输出反相器SN7406由于我们的74LS138输出的行选信号是低电平,而驱动IRF540N时必须在G端接比D端高3V以上的电压才能导通,所以我们加了SN7406这个六路高电压输出反相器,图2.10是它的外部管脚图,图2.11 SN7406则是它一路输入输出的内部原理图:当输入端A输入低电压时,在对应的输出端Y就会输出高电压。2.4.4 大电流MOSFET管IRF540IRF540是一个28A 100V的N沟道的MOSFET管,Rds(on )=0.077,Vgd=100V,它的原理图如下图2.12所示,当G端有高电平时,DS之间就导通,电流从D端流向S端。因为一条行线上要带动128列的LED进行显示,按每一LED器件20mA电流计算,128个LED同时点亮时,需要2560mA即2.5A电流,所以选用IRF540作为驱动管,它的最大工作电流可达28A,所以不需要加散热既可稳定工作。图2.12 IRF540内部原理及管脚图2.4.5 八位数据缓冲器74LS244我们为了隔离外界的干扰信号,使用了74LS244八位数据缓冲器。因为任何时候74HC595里面的数据是不确定的,只要显示屏只要稍微有一点外界干扰,导致74LS138使能端E变低, 74LS138就是会有输出信号的(通过它的真值表可以看到全0全1都有一行是被选中输出低电位的),SN7406就输出高电位,IRF540被电阻拉到高电平这样显示屏就显示一些不确定的图案,就不符合我们的设计要求了。74LS244是一个常用的八缓冲器,它的管脚图以及控制表如图2.14所示:2.5 小结本章介绍了硬件的连接方法以及原理,并且包含了部分电路图,此电路已经试验证明可以显示汉字信息,并且可动态显示,其中运用了74HC595以及74LS244芯片,74HC595的功能是串入并出,并且带有锁存和移位的功能;而74LS244的作用就是完全屏蔽掉外界的干扰,只有单片机发出的正确的信号才被它选择通过,一般的电路干扰,电磁干扰不会对显示屏造成乱码。而行驱动则是使用了38线译码器74LS138驱动六路高电压输出反相器SN7406,用SN7406再驱动IRF540大电流低电阻的N沟道场效应管,因为如果用单片机直接连接LED点阵,引脚不够,同时驱动能力也不行,而用了这个译码器,可以节省引脚,并且方便以后扩展。3 系统软件设计显示屏软件的主要功能是向显示屏提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。根据软件分层次设计的原理,可把显示屏的软件系统分成两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向点阵屏传送特定组合的显示数据,并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。显示驱动程序由显示子程序实现;系统环境设置(初始化)由系统初始化程序完成;显示效果处理等工作,则由主程序通过调用子程序来实现。3.1 显示驱动程序然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等数据发送完毕后输出74HC595的锁存信号,将显示数据打入输出锁存器并锁存,然后再输出新的行号,并打开显示。图3.1为显示驱动程序(显示屏扫描函数)流程图。图3.1 显示驱动程序流程图3.2 系统主程序系统主程序开始以后,首先是对系统环境初始化,包括设置串口,端口以及一些参数;然后以分屏效果显示“勤奋求实开拓创新桂林工学院电子与计算机系毕业设计电子信息工程02-3班张涛制作。谢谢各位老师!”;关闭屏3秒钟,再静止显示“勤奋求实开拓创新”停留约3秒,接着开始左跑马滚动显示“勤奋求实开拓创新桂林工学院电子与计算机系毕业设计电子信息工程02-3班张涛制作。谢谢各位老师!”。设置系统程序不断地循环执行上述显示效果。图3.2是系统主程序的流程图。开始系统初始化分屏显示左移显示图3.2 系统主程序流程图3.3 部分源程序3.3.1 分屏显示子程序以下是32x64点阵LED电子显示屏的源程序,采用C语言编写,在Keil VisionV2.38a(C51.Exe V7.06)以及MedWin 3.0版环境下均测试通过。/*分屏显示*/void fen(void)doxianshi();while(xx+0;kk-)/每屏显示500次for(ii=1;ii16;ii+=2)/每个汉字分8行扫描for (jj=0;jj8;jj+)/每次要发送8个汉字的2个字节,发送8次aa=(xx*8+jj)*32+ii;out_rxd(&hanziaa);/从串口输出第1个字的第1字节。 out_rxd(&hanziaa-1);/从串口输出第1个字的第1字节。for (jj=0;jj8;jj+)/每次要发送8个汉字的2个字节,发送8次aa=(xx*8+jj)*32+ii; out_rxd(&hanziaa+16);/从串口输出第1个字的第17字节。out_rxd(&hanziaa+15);/从串口输出第1个字的第18字节P2=0x0ff;P1=0xff; P1=0;/锁存为高,74HC595锁存信号P2=swh; /输出行信号h+; /行加一if(h=8)h=0;/*分屏显示的数据发送*/void out_rxd(unsigned char *d) /*从串口发送数据*/SBUF=*d; while(!TI); /等待发送完毕 TI=0; 3.3.2 左移显示子程序void zuo(void)unsigned char i,d=5;while(zimo=1200)while(yid16)/数据移位。for(i=0;id;i+)/移动速度for(h=0;h=0;s-)w=s+s;qqq=zimo+h+h+s*32;BUFFw+1=hanziqqq;BUFFw=hanziqqq+1;BUFF2w+1=hanziqqq+16;BUFF2w=hanziqqq+17;/*调整数据并发送*/void rxd_data(void) /串行发送数据char s;unsigned char inc,tempyid,temp;if(yid8)inc=0;else inc=1;for(s=0+inc;s16+inc;s+) /发送数据 if(yidtempyid)|(BUFFs+1(8-tempyid);SBUF=temp;/把BUFF中的字节从大到小移位相或后发送输出。while(!TI);TI=0; /等待发送中断for(s=0+inc;s16+inc;s+) /发送8字节数据 if(yidtempyid)|(BUFF2s+1(8-tempyid);SBUF=temp;/把BUFF中的字节从大到小移位相或后发送输出。while(!TI);TI=0; /等待发送中断 4 结论本文通过设计单片机控制单色LED显示屏的方法,对LED显示模块单元如何进行行列信号控制及信号传输中的驱动问题进行了研究。介绍了硬件的原理以及连接的方法,软件的设计流程以及部分代码,并在附录1给出了完整的电路图,经焊接并调试后可以正常显示汉字、图片信息,并且可动态显示。硬件部分的设计保证了点阵的正常工作。列驱动电路中的74HC595实现了串入并出,并且带有锁存和移位的功能;而74LS244则是防止外界的干扰会对显示屏造成乱码,只有单片机发出的正确的信号才被它选择通过;行驱动电路使用了38线译码器74LS138驱动SN7406加IRF540大电流低电阻的N沟道场效应管,因为如果用单片机直接连接LED点阵,引脚不够,同时驱动能力也不行,而用了这个译码器,可以节省引脚,并且方便做大屏幕的时候扩展。软件部分的设计跟硬件完美配合实现汉字、图形的显示。通过LED点阵显示原理,我们知道只要合理的安排行选信号以及列信号同时导通的组合顺序就可以显示任何的图形、文字。软件的设计就是完成将汉字点阵数据通过一些特殊的算法调整,得到跟LED点阵相对应的数据,并将这些数据以及控制信号传送到LED点阵屏,来实现分屏扫描显示以及左移扫描显示的效果。整个设计的功耗计算:LED需要的电压是3.3V,整个屏幕显示8个汉字的时候的平均电流是1.85A;各芯片需要电压为5V,工作的时候平均电流0.5A;还有IRF540的驱动电压12V,工作电流0.02A;即:P=3.3V*1.85A+5V*0.5A+12V*0.02A=8.854W。做好的LED点阵显示屏的实物图片如图4.1所示:图4.1 做好的LED点阵显示汉字时的效果致谢致谢首先我感谢我的导师*老师。本论文是在*老师的直接引导下完成的,整个论文的编写无一不是凝聚着老师的心血与汗水。*老师严谨治学、认真负责、不怕困难的科研态度对我影响至深,这些影响将使我终身受益。我在此对*老师表示最真挚的谢意!最后,真诚的感谢在学习和生活中给予我关心和帮助的所有老师、同学和朋友!参考文献1 李华等编著MCS-51系列单片机实用接口技术北京:北京航空航天大学出版社,19932 张立科单片机通信技术与工程实践北京:人民邮电出版社,20053 张凯等编著MCS-51单片机综合系统及其设计开发北京:科学出版社,19964 朱宇光编著单片机应用新技术教程北京:电子工业出版社,20005 诸昌钤LED显示屏系统原理与工程技术成都:电子科技大学出版社,20006 余永权89系列FLASH单片机原理与应用北京:电子工业出版社,20007 楼然苗,李光飞51系列单片机设计实例北京:北京航空航天大学出版社,20038 李东生PROTEL 99SE电路设计技术入门与应用北京:电子工业出版社,20029 张有顺编著MCS-51/96系列单片机简明教程北京:中国脊梁出版社,199810 谢宋和单片机在 LED 显示屏中的应用电子与自动化98年第4期附录1整体电路图:附录2整个设计全部源程序:/*以下是32x64点阵LED电子显示屏的源程序,采用C语言编写,在Keil VisionV2.38a(C51.Exe V7.06)以及MedWin3.0版环境下均测试通过。*/#include unsigned int zimo,xx=0;/zimo是字模计数器,xx为分屏显示的时候的字数。unsigned char yid,h;/yid为移动计数器,h为行段计数器unsigned char code hanzi;/汉字字模unsigned char BUFF18,BUFF218;/左移显示的缓存void qing(void);void xianshi(void);void fen(void);void zuo(void);void in_data(void);/调整数据void rxd_data(void);/左移发送数据void out_rxd(unsigned char *d);/分屏、上移发送数据char code sw=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00; /*8行段码*/*主程序*/void main(void)unsigned char ee;SCON=0;P1=0;yid=0;zimo=0;while(1)fen();/分屏显示for(ee=30;ee0;ee-)/清屏幕3秒qing();zuo();/左移显示for(ee=30;ee0;ee-)qing(); /*清屏幕*/void qing (void) unsigned char zz,xx=0x0ff;for (zz=33;zz0;zz-)out_rxd(&xx);P1=0xff; P1=0;/锁存为高,74HC595锁存信号P2=0;/清74LS138的使能端 /*分屏显示*/void fen(void)doxianshi();while(xx+0;kk-)/每屏显示500次for(ii=1;ii16;ii+=2)/每个汉字分8行扫描for (jj=0;jj8;jj+)/每次要发送8个汉字的2个字节,发送8次aa=(xx*8+jj)*32+ii;out_rxd(&hanziaa);/从串口输出第1个字的第1字节。 out_rxd(&hanziaa-1);/从串口输出第1个字的第1字节。for (jj=0;jj8;jj+)/每次要发送8个汉字的2个字节,发送8次aa=(xx*8+jj)*32+ii; out_rxd(&hanziaa+16);/从串口输出第1个字的第17字节。out_rxd(&hanziaa+15);/从串口输出第1个字的第18字节P2=0x0ff;P1=0xff; P1=0;/锁存为高,74HC595锁存信号P2=swh; /输出行信号h+; /行加一if(h=8)h=0;/*左移显示*/void zuo(void)unsigned char i,d=5;/d为移动的时候一个汉字的扫描显示次数xianshi();/调用单屏显示while(zimo=1450)while(yid16)/数据移位。for(i=0;id;i+)/移动速度for(h=0;h=0;s-)w=s+s;qqq=zimo+h+h+s*32;BUFFw+1=hanziqqq;BUFFw=hanziqqq+1;BUFF2w+1=hanziqqq+16;BUFF2w=hanziqqq+17;/*左移显示的数据调整发送*/void rxd_data(void) /串行发送数据unsigned char inc,s,tempyid,temp;if(yid8)inc=0;elseinc=1;for(s=0+inc;s16+inc;s+) /发送数据 if(yidtempyid)|(BUFFs+1(8-tempyid);SBUF=temp;/把BUFF中的字节从大到小移位相或后发送输出。while(!TI);TI=0;/等待发送中断for(s=0+inc;s16+inc;s+) /发送8字节数据 if(yidtempyid)|(BUFF2s+1(8-tempyid);SBUF=temp;/把BUFF中的字节从大到小移位相或后发送输出。while(!TI);TI=0;/等待发送中断/*汉字编码信息*/ unsigned char code hanzi=/*- 文字: 勤 -*/0xFB,0xBB,0xFA,0x00,0xFB,0xBB,0xFB,0x83,0xC0,0xEF,0xDB,0x01,0xDB,0x6D,0xDB,0x01,0xDB,0xEF,0xDB,0x01,0xDB,0xEF,0xDB,0x83,0xDD,0xEF,0xDD,0x0F,0xD6,0xE0,0xEF,0x7D,/*- 文字: 奋 -*/0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0x80,0x00,0xFE,0xBF,0xFD,0xDF,0xF3,0xEF,0x8F,0xF3,0xD0,0x04,0xF7,0x77,0xF7,0x77,0xF0,0x07,0xF7,0x77,0xF7,0x77,0xF0,0x07,0xF7,0xF7,/*- 文字: 求 -*/0xFB,0x7F,0xF7,0x7F,0xF7,0x7F,0xC0,0x01,0xFF,0x7F,0xEF,0x7B,0xF7,0x77,0xFA,0x6F,0xFD,0x7F,0xFB,0x5F,0xF7,0x6F,0x8F,0x77,0xDF,0x79,0xFF,0x7F,0xFF,0x5F,0xFF,0xBF,/*- 文字: 实 -*/0xFF,0x7F,0xFE,0xFF,0x80,0x01,0xDF,0xFD,0xEE,0xEE,0xFE,0xDF,0xFE,0xDF,0xFE,0xF7,0xFE,0xEF,0xFE,0xEF,0xC0,0x01,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xCF,0xE7,0xDF,0xF9,/*- 文字: 献 -*/0xF7,0xEF,0xF7,0xEF,0xE7,0xEF,0xD6,0x00,0xD7,0xEF,0xF7,0xEF,0x81,0x01,0xF7,0x55,0xF7,0x6D,0xF7,0x01,0xEB,0x6D,0xEB,0x01,0xEB,0x6D,0xDD,0x6D,0xDD,0x4D,0xBE,0xBD,/*- 文字: 身 -*/0xFF,0x7F,0xFF,0xBF,0xF0,0x0F,0xF7,0xEF,0xF0,0x0F,0xF7,0xEF,0xB0,0x0F,0xD7,0xEF,0xE7,0xEF,0xF0,0x01,0xF5,0xFF,0xF6,0xFF,0xF7,0x3F,0xF7,0xC7,0xF5,0xF8,0xFB,0xFF,/*- 文字: 开 -*/0xFF,0xFF,0xC0,0x03,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0x80,0x01,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xEF,0xFB,0xEF,0xFB,0xF7,0xFB,0xFB,/*- 文字: 拓 -*/0xFF,0xF7,0xFF,0xF7,0x80,0x37,0xFD,0xF7,0xFD,0xC0,0xFE,0xF7,0xFE,0xD7,0xC0,0x67,0xDE,0xB3,0xDE,0xD4,0xDE,0xF7,0xDE,0xF7,0xDE,0xF7,0xC0,0xF7,0xDE,0xF5,0xFF,0xFB,/*- 文字: 桂 -*/0xFB,0xF7,0xFB,0xF7,0xC0,0x77,0xFB,0xF7,0xFB,0xC0,0xFB,0xF7,0x80,0x33,0xFB,0xE3,0xFB,0xD5,0xFB,0xD5,0xC0,0x76,0xFB,0xF7,0xFB,0xF7,0xFB,0xF7,0x80,0x37,0xFF,0xF7,/*- 文字: 林 -*/0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xC0,0x81,0xFB,0xEF,0xF9,0xE7,0xF1,0xC7,0xEA,0xAB,0xEA,0xAB,0xDB,0x6D,0xBB,0xAE,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,/*- 文字: 工 -*/0xFF,0xFF,0xFF,0xFF,0xC0,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0x80,0x00,0xFF,0xFF,0xFF,0xFF,/*- 文字: 学 -*/0xF7,0xBB,0xF7,0x77,0xFB,0x77,0xFD,0xFF,0x80,0x01,0xDF,0xFD,0xEF,0xFE,0xF8,0x07,0xFD,0xFF,0xFE,0x7F,0x80,0x00,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x5F,0xFF,0xBF,/*- 文字: 院 -*/0xFD,0xFF,0xFB,0xC1,0x80,0x1D,0xBF,0xAD,0xFF,0xED,0xC0,0x75,0xFF,0xED,0xFF,0xED,0x80,0x1D,0xF6,0xDD,0xF6,0xDD,0xF6,0xE9,0xB6,0xF5,0xB7,0x7D,0x8F,0x7D,0xFF,0xBD,/*- 文字: 电 -*/0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xF0,0x01,0xF7,0xBD,0xF7,0xBD,0xF0,0x01,0xF7,0xBD,0xF7,0xBD,0xF0,0x01,0xF7,0xBD,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xC0,0x7F,/*- 文字: 计 -*/0xFB,0xFF,0xFB,0xF7,0xFB,0xEF,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0x80,0x21,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0x6F,0xFB,0xAF,0xFB,0xCF,0xFB,0xEF,0xFB,0xFF,/*- 文字: 系 -*/0xE1,0xFF,0xFE,0x01,0xFF,0xBF,0xFB,0xDF,0xFD,0xEF,0xFE,0x03,0xFF,0x7F,0xFB,0x9F,0xF7,0xEF,0xE0,0x03,0xEF,0x77,0xFF,0x7F,0xF7,0x77,0xEF,0x7B,0xEF,0x5D,0xFF,0xBF, /*- 文字: 电 -*/0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xF0,0x01,0xF7,0xBD,0xF7,0xBD,0xF0,0x01,0xF7,0xBD,0xF7,0xBD,0xF0,0x01,0xF7,0xBD,0xDF,0xBF,0xDF,0xBF,0xDF,0xBF,0xC0,0x7F,/*- 文字: 信 -*/0xFE,0xEF,0xFD,0xEF,0xFD,0xEF,0xC0,0x17,0xFF,0xF7,0xFF,0xF3,0xE0,0x35,0xFF,0x
展开阅读全文