找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18607|回复: 6
打印 上一主题 下一主题
收起左侧

基于51单片机的LED点阵屏的设计与实现

[复制链接]
跳转到指定楼层
楼主
ID:332193 发表于 2018-5-17 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机的LED点阵屏的设计与实现
摘 要
本文主要阐述了用51单片机控制单色32*64的LED点阵屏显示的方法,对LED点阵屏如何进行行列信号控制及信号传输中的驱动问题进行了研究,并讨论了单片机控制系统中关键的数据处理以及发送问题。结果表明采用并行数据输入、串行数据及同步时钟传输的专用电路可大大减少CPU的辅助时间,提高了数据的发送速度。并给出了通过软件控制点阵屏显示的几种方式,如静态显示,分屏显示以及左移显示,对其软件的算法给出了具体分析。基于各种算法我们就可以灵活的运用软件实现各种显示,并将其用于商业用途。

前言
    随着社会文化的不断发展,人们的消费标准不断提高,户外灯箱广告更是扮演着越来越重要的宣传角色,不论是汽车站,火车站,股票交易市场,还是学校都离不开它,然而传统的霓虹灯广告牌不论是在显示效果、耗电量还是可修改性上都无法满足当前社会的需求,传统的霓虹灯广告亟待改进。
由于单片机技术的不断发展和高亮度LED发光管的出现使得大屏幕高亮度LED电子广告屏成为可能,与传统的霓虹灯广告在显示效果以及可修改性上都有着无法比拟的优势,而且单片机的日益平民化以及LED技术的不断创新,使得高亮度高清晰的LED点阵广告牌与传统霓虹灯广告牌的成本日益接近。另外,SMT技术的飞速发展,开关电源的大规模使用,使其无论在体积上还是在可靠性上都比传统的霓虹灯广告有明显的改进,为其在特殊领域的应用奠定了基础。
这种新兴的大屏幕显示技术成为众人目光的焦点。与传统的显示设备相比,首先,LED 显示屏色彩丰富,3基色的发光管可以显示全彩色,显示方式变化多样(文字、图形、动画、视频、电视画面等),是集光电子技术、微电子技术、计算机技术、信息处理技术于一体的高技术产品,可用来显示文字、计算机屏幕同步的图形。其次,LED显示屏的像素采用LED发光二极管,将多个发光二极管以序列的形式构成LED显示阵列,这种显示屏具有耗电低、成本低、亮度和清晰度高、寿命长等优点,而且 LED 显示屏其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,是信息传播设施划时代的产品。再次,LED 显示屏应用广泛,金融证券、银行利率、商业广告、文化娱乐等方面,显示效果清晰稳定,越来越多的地方开始使用LED电子显示屏,有巨大的社会效益和经济效益。它以其超大画面、超宽视觉、灵活多变的显示方式等独居一格的优势,成为目前国际上使用广泛的显示系统。
1 概述
1.1 设计任务
本设计主要任务是设计一个实用的32*64 LED点阵屏的图文显示,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字稳定、清晰无串扰。图形或文字显示有静止和移入移出等显示方式。本文还重点介绍了单片机对LED点阵屏的控制电路,驱动电路的设计方法,并根据LED点阵屏的硬件特点, 对其软件实现的算法给出了具体的分析。从而实现了显示的字体能够进行向左移动。
1.2 点阵屏的内部结构及扫描原理
    LED点阵屏的内部结构可以分为共阴型和共阳型[5]两种类型,本系统设计采用的是共阳型的LED点阵屏。 其硬件电路如(图1.1)所示,我们只选取了一个8*8的LED矩阵做模型,当行上有一正选通信号时,列选端四位数据为0的发光二极管便导通点亮。根据这个原理,当我们需要某图形或文字时,只需要将要显示的文字或图形的编码作为列信号跟对应的行信号进行逐次扫描[1],就可以逐行点亮点阵。当扫描速度大于24Hz,由于扫描时间很快,人眼的视觉有暂留效应[3],就可以看到显示的是完整的图形或文字,这样就达到了显示的效果。
           
                  图1.1  8*8共阳极LED点阵
    例如,若要图中所示64个LED显示一个“0”字的方框,则首先在列1~8上写入列编码的信号,接着应将对应的行上加选通信号,即在行、列的信号端分别加上如(图1.2)所示数据,这样,假设显示数字为“0”时:
1   2  3    4   5   6    7   8
















































00  00  3E   41   41   41   3E  00
图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]只有128 Byte,非常有限,运行大一点的程序就显得捉襟见肘,而且程序存储器空间也只有4K,大一点的程序就存储不下,尤其是在存储汉字点阵信息的时候,每个汉字32Byte,100个汉字就到了3.2KB,程序也只有不到1KB的容量了。 在这时候必须外接存储器来扩展,那单片机怎么知道我们当前使用的是内部程序存储器还是外部程序存储器呢?所以就需要设定单片机是使用外部程序存储器还是内部程序存储器,89C51把31脚设定为此功能,如果把31脚接地,则采用外部程序存储器,如果把31脚接VCC,则默认采用内部程序存储器。我们暂时只是显示几十个汉字研究原理,所以仅仅用内部存储器就足够了,所以把31脚接高电位,就仅仅使用内部的4K程序存储空间。如(图2.3)所示。但是在现实大屏幕显示应用中,一般要扩展ROM,比如24C08(8K的E2PROM),因为大量的数据是有电脑传送过来的,每个单片机只是负责自己控制的一行字符,这些数据是要随时更新的,采用ROM可以随时更新内容,而且一般的显示程序优化以后的代码4K也够用了。
图2.3  89C51的基本外部电路
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.5  74HC595外形及内部逻辑结构
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.6  74LS138译码扩流电路
2.3.2 3—8线译码器74LS138
    我们前面的列驱动电路里面只是用了单片机的串口跟P3口,还剩下P0口以及P1口可以直接接到8个LED的行选端,但是为了整个大屏幕方便以后扩展控制,以及防止直接驱动损坏单片机以及隔离外界干扰信号,所以使用了74LS138这个3—8译码器作为行选通的芯片。
    74LS138译码器的引脚图,逻辑图及真值表如下(图2.7)、(表2.1)所示:
    图2.7  74LS138的外部引脚图以及内部原理图
表2.1  3线-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.8  TIP127的内部原理图
2.3.4 位数据缓冲器74LS244
    我们为了隔离外界的干扰信号,使用了74LS244八位数据缓冲器。因为任何时候74HC595里面的数据是不确定的,只要显示屏只要稍微有一点外界干扰,导致74LS138使能端E变低, 74LS138就是会有输出信号的(通过它的真值表可以看到全0全1都有一行是被选中输出低电位的),TIP127被电阻拉到高电平这样显示屏就显示一些不确定的图案,就不符合我们的设计要求了。74LS244是一个常用的八缓冲器,它的管脚图以及控制表如(图2.9)所示:
   
            图 2.9 74LS244的外部管脚图及门控制端的真值表
2.4 LED点阵屏的输入输出端口
    对于整个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.11  LED屏的输出端口
                    图 2.12  LED屏的输入端口
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()
{
              uchar i,*k1,*k2,m=0;
              uint j=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 移送数据子程序
     void fachar(uchar i,uchar m)  // 送上下两行的8位数据
{
              uchar j;
              for(j=0;j<8;j++)            //移8次
              {
                            sclk=0;
                  datal=(bit)(0x80&i);     //8位数据依次与0X80相与
                            datah=(bit)(0x80&m);
                  sclk=1;
                            i=i<<1;   //一位一位的移送数据
                            m=m<<1;
              }
}
3.3.3 发字模数据子程序
void fachars(uchar *zima,uchar *zima1)
{
              uchar i;
              lclk=0;
              for(i=0;i<4;i++)       //每行送4个汉字
              {
                            fachar(*(zima+i*32),*(zima1+(i+4)*32));         //送上下两行的前16个数据
                            fachar(*(zima+1+i*32),*(zima1+1+(i+4)*32));     //送上下两行的后16个数据
              }                           
/*              for(i=0;i<8;i++)
              {
   fachar(*(zima++));
              }*/            
}
3.3.4 输出行号及138使能子程序
     void sring(uchar *zima,uchar *zima1)
{
              uchar i;
              end=0;             //打开138进行译码
              enh=0;
              for(i=0;i<8;i++)
              {                           
                            fachars(zima,zima1);        //发送列数据
                            end=1;
                            P3=((P3&0xf8)|i);          //进行行扫描
                            lclk=1;                 
                            end=0;
                            mDelay(1);
                            zima+=2;
                            zima1+=2;
              }
              enh=1;
              end=1;
              for(i=0;i<8;i++)
              {                           
                            fachars(zima,zima1);
                            end=1;
                            P3=((P3&0xf8)|i);
                            lclk=1;
                            end=0;
                            mDelay(1);
                            zima+=2;
                            zima1+=2;
              } }
3.3.5 汉字左移子程序
                   图3.3  汉字左移流程图
3.4 字模提取
    该软件中显示的字体都是通过专门的汉字提取软件来实现的。该软件名为字模提取V2.1CopyLeft By Horse 2000.其提取方法为在汉字输入区输入你所需要的汉字后(可输入多个字体),同时按下CTRL+ENTER,然后在“取模方式”菜单中选取“C51格式”,再在“修改图象”菜单下选取“黑白反显图象”。这时点阵生成区则会出现相应字体的汉字代码。起操作界面如下:
                       图3.4  字模提取软件界面
4 系统调试
系统调试是做电子产品设计的一个很重要的部分,一般调试分为硬件部分和软件部分。硬件的调试主要是分析自己所设计的电路是否是正确的,同时检查电路是否短路,开路以及元器件是否焊接正确,调试的时候可以分块检测。而软件调试主要通过编程看是否能够达到自己预期的想法,同时也要注意程序的简洁和优化,调试的时候可以通过先写个小程序一步一步去实现它。
4.1 硬件调试
本设计硬件部分的调试主要是根据实物(8位LED点阵屏)来弄清其具体结构和工作原理。在整个硬件调试中,我们主要以几个核心IC为突破点,从74HC595的特性可知其传送的是显示的数据,而74HC244则是将输入的数据进行缓冲处理防止干扰,对于74HC138及TIP127组成的扩流译码电路中则知是进行行扫描。在硬件调试过程中还遇到了屏幕闪动的问题,后来考虑到单片机的处理速度,原因可能是扫描的过慢了,故将12M晶振改为24M,其后的显示效果得到了明显的改善。
4.2 软件调试
    在软件的调试中,我首先是写了一个一行显示的小程序,可以后我接着写了两行显示的程序,但发现第二排的汉字前八个字节没问题,而后八个字节出现了乱码。因为移数据的地方是通过了的,所以从中可以分析是送汉字代码的地方出错了,后来查出果然是送汉字代码的指针搞错了。还有在分屏显示的时候我本来采用一个字库来做成分两个字库显示,用一个变量来改变字的显示,并建立了一个标志位,但出现了一个用什么改变作为标志位变化的问题,考虑至此我采用了最基本的方法是建立两个库,然后在主程序中分别调用的方式来解决的。
5 结论
    本文通过设计单片机控制单色LED显示屏的方法,对LED显示模块单元如何进行行列信号控制及信号传输中的驱动问题进行了研究。介绍了硬件的原理以及连接的方法,软件的设计流程,经焊接并调试后可以正常显示汉字、图片信息,并且可动态显示。
    硬件部分的设计保证了点阵的正常工作。列驱动电路中的74HC595实现了串入并出,并且带有锁存和移位的功能;而74LS244则是防止外界的干扰会对显示屏造成乱码。行驱动电路使用了3-8线译码器74LS138驱动TIP127大电流低电阻的N沟道场效应管,因为如果用单片机直接连接LED点阵,引脚不够,同时驱动能力也不行,而用了这个译码器,可以节省引脚,并且方便做大屏幕的时候扩展。
软件部分的设计跟硬件完美配合实现汉字、图形的显示。通过LED点阵显示原理,我们知道只要合理的安排行选信号以及列信号同时导通的组合顺序就可以显示任何的图形、文字。软件的设计就是完成将汉字点阵数据通过一些特殊的算法调整,得到跟LED点阵相对应的数据,并将这些数据以及控制信号传送到LED点阵屏,来实现预期的显示效果。
但本设计同时也存在着一些问题。在硬件方面,整个屏幕上会存在一些LED不是很亮,还有信号容易受到外界的干扰,屏幕会有些跳动,所以很应该加强硬件抗干扰的能力。在软件方面,显示的方式比较单一,还可以考虑其他种显示方式,如上下移动,向右移动,以及从中间向四周扩散的移动方式。
参考文献
  • 李华等编著·MCS-51系列单片机实用接口技术·北京:北京航空航天大学出版社,1993234~236
  • 张立科·单片机通信技术与工程实践·北京:人民邮电出版社,2005156~161
  • 张凯等编著·MCS-51单片机综合系统及其设计开发·北京:科学出版社,1996

187~189.

  • 朱宇光编著·单片机应用新技术教程·北京:电子工业出版社,2000301~303
  • 诸昌钤·LED显示屏系统原理与工程技术·成都:电子科技大学出版社,2000

245~250.

  • 余永权·89系列FLASH单片机原理与应用·北京:电子工业出版社,2000

112~114.  

  • 楼然苗,李光飞·51系列单片机设计实例·北京:北京航空航天大学出版

2003:330~332.

  • 李东生·PROTEL 99SE电路设计技术入门与应用·北京:电子工业出版社

2002:387~390.

  • 张有顺编著·MCS-51/96系列单片机简明教程·北京:中国脊梁出版社,1998

124~125.

  • 谢宋和·单片机在 LED 显示屏中的应用·电子与自动化·98年第4

[11] Keil software Company.Cx51 Compiler User’s Guide.2001



附录A
实物显示效果图:
             图A  单片机主控制部分
              图B  点阵屏显示部分


完整的Word格式文档51黑下载地址:
基于51单片机的LED点阵屏的设计与实现.doc (3.28 MB, 下载次数: 67)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:143914 发表于 2018-8-25 07:12 来自手机 | 只看该作者
刚得了几块32*64的双色屏,正好学习下,感谢楼主
回复

使用道具 举报

板凳
ID:393255 发表于 2018-9-8 20:48 | 只看该作者
最近一直在研究LED点阵屏,进展很慢,学习内容比较少,感谢楼主的教程。
回复

使用道具 举报

地板
ID:450904 发表于 2018-12-20 17:20 | 只看该作者
谢谢楼主分享,爱你呦
回复

使用道具 举报

5#
ID:465401 发表于 2019-1-9 20:48 | 只看该作者
楼主,能否加好友,有问题想请假下
回复

使用道具 举报

6#
ID:74933 发表于 2019-4-22 19:12 | 只看该作者
最近一直在研究LED点阵屏,进展很慢,学习内容比较少,感谢楼主的教程。
回复

使用道具 举报

7#
ID:734102 发表于 2020-4-21 09:08 | 只看该作者
感谢楼主的整理,最近学习正好用到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表