基于Keil C的小型LED广告屏设计与开发*
2018-07-26谢梅芬林其华
谢梅芬 林其华
(1福建林业职业技术学院;2南平技师学院 福建南平 353000)
随着计算机及相关的微电子、光电子技术的发展,以LED(发光二极管)为基础的LED电子显示屏作为视觉传播媒体的重要一支也有了突飞猛进的发展。LED显示屏有几个典型的特点:①全彩化和高亮度化。LED显示屏诞生之初以单色调为主,表现形式单一。随着科技进步LED显示屏已经实现了全彩化,并成为其发展的重要方向,其高亮节能特性使得全天候的信息展示也成为可能。②规范化和标准化。随着LED生产工艺的成熟和材料技术的提高,LED显示屏的生产和创新已经规范化和标准化。利用LED构成的点阵模块或像素单元可组成可变面积的显示屏幕,再加上微电子技术的发展,各种控制芯片内部的集成度越来越高,功能越来越强大,运行速度越来越快,而价格却越来越低,构成LED显示屏的硬件数量变得越来赿少,电路变得越来越简单,突出产品性价比。③产品结构多元化。传统LED显示屏的特点是大型,超大型,而为了较好的与现代服务业和信息领域相互适应,LED显示屏的生产将呈现小型化和专业化特点。政府机关、公共场所、医院、银行、学校、各类商场、公交车上随处可见LED显示屏作为各类信息的发布工具,针对LED显示屏进行研究有一定的现实意义。
文章研究分析了当前通用的LED显示屏设计思想和设计方法,拟定了几套设计方案进行分析比较,最终选定了4块市面上常见的共阳极8×8 LED点阵构成16×16点阵模块单元,基于Keil 开发环境,以C语言为编程语言,选择AT89S52单片机作为控制核心,外加行驱动电路和列驱动电路驱动点阵模块,实现16×16分辨率的小型广告屏的设计,并可通过级联的方法扩展成用户所需更高显示分辨率的显示屏。
1 LED显示屏显示原理
LED显示屏的显示接口从电路驱动原理上可分为静态显示接口和动态显示接口两种。以共阳极的LED点阵为例,静态显示接口LED点阵每行的公共端恒定接+5V电源,每行的各列连接各自独立的列驱动电路,显示屏中每一个LED发光点的亮灭由列驱动电路的输出驱动信号决定,低电平点亮LED,高电平熄灭LED,控制器根据显示所需内容控制列驱动器输出高低电平从而实现显示各种文字或图形的目的。静态显示LED的亮灭一直保持稳定不变,直到控制器输出显示数据改变。静态显示接口电路具有以较小的电流可获得较高的亮度,显示不闪烁,编程相对简单,占用单片机的时间少的优点,但这种接口电路每个LED需一个输出端口控制,16×16的点阵有256个LED需要256个输出端口,所需的端口较多,即使通过外接8位锁存器来扩展输出端口的数量,在控制器端口减少的同时会增加32个锁存器,造成硬件成本上升,电路排版布线难度加大,所以LED点阵不采用静态接口电路。
动态显示接口将LED点阵各行公共端接到各自的行驱动电路,并且将各行的同名列都并联起来,接到相应的列驱动电路。采用逐行扫描的工作方式。仍以共阳极的LED点阵为例,在某一时段,控制器只选中LED点阵的某一行,该行驱动器输出高电平,其余行驱动器输出低电平,这样只有选中行的LED可能被驱动点亮,而其它行因未被选中,整行LED均不可能点亮。根据选中行所需显示内容控制列驱动器输出高低电平点亮相应位置上的LED,从而实现该行显示所要求的文字或图形。这样按顺序从上到下逐行选中LED点阵的各行驱动器,循环向各列驱动器发送该行的显示数据,各行分别显示所需的文字或图形信息在本行呈现的部分。如果各行的扫描时间较长,扫描频率低,观测到的是一行一行断续的显示效果,无法完整显示文字或图形信息,若将行刷新扫描频率加快,达到40Hz以上,利用人眼的视觉残留特性,就好像各行相应LED是同时点亮一样,使文字或图形信息看起来是一个静止的画面。动态显示方式因各行相应的列进行了并联,大大的减少了控制器的输出控制端口,以16×16的点阵为例,行控制器需要16个输出端口,列控制器也需要16个输出端口,输出端口由256个减少到32个,驱动器也随之减少,便于印刷电路板的排版布线。文章以动态显示为基础进行了控制电路的设计和实现。
2 系统控制电路设计
采用动态显示接口进行逐行扫描时,每行有一个行驱动器,控制器逐行输出行控制信号,各行的同名列并联共用同一个列驱动器,控制器输出选中行所需的显示数据作为列控制信号。显示数据通常存储在单片机的数据存储器中,开辟一块数组空间有序排放。控制器输出列驱动信号到列驱动器的传输方式有并行通讯和串行通讯两种,考虑到点阵模块的级联及整体设计的紧凑性和易维护性,文章采用了串行通信的方法。串行通讯是一位一位的按顺序传送数据,相对于各位同时传送的并行通讯来说传送效率低,这样带来的影响是列驱动信号的传送的时间会比较长。在行扫描周期一定的情况下,留给行显示的时间就缩短了,会影响到LED的亮度。或为了保证显示亮度而增加行显示时间,又会降低显示行刷新扫描频率,显示画面闪动影响显示效果。文章设计把此过程分解成列数据准备(传送)和列数据显示(输出)两部分,对此两个过程采用时间重叠处理方式:显示本行各列数据的同时,准备下一行的列数据。综上分析,系统总体设计如图1所示,该控制系统设计的硬件主要包括电源模块及控制单元、行驱动电路、列驱动电路。
图1 控制系统总体设计示意图
2.1电源模块及控制单元
系统中的主要芯片都需要5V直流电源供电,需要把民用220V交流电降压整流为5V直流输出。先用220V转9V变压器进行降压,再通过桥式整流电路把交流电转换为直流电,最后用三端稳压模块LM7805输出稳压的5V电圧。
控制单元是整个显示系统的核心,主要由单片机和总线驱动器组成。单片机种类很多,因为只需要显示特定的图形或文字,无需庞大的字库,故选择美国ATMEL公司生产的单片机AT89S52,利用其8K字节 Flash ROM和256B字节的RAM即可满足字库储存的需求,不需要扩展外存储器。为了防止单片机的数据/地址/控制总线端口超负荷工作,设计中加入了TTL型三态双向缓冲门电路总线驱动器74HC245,其在控制单元中不承担任何逻辑控制的功能,起到电流缓冲保护功能。
2.2行驱动电路设计
行驱动电路由译码器和驱动管组成。由于16×16LED点阵屏有16行,为充分利用单片机的I/O接口,电路设计中加入了2个3-8线译码器74HC138,接受由单片机P1口输出的控制信号,提供16个互斥的低电平有效输出。74HC138的3个输入使能门电路用于芯片的使能和片选,在输出使能的情况下,保证每次只有一片74HC138工作,输出互斥的行电平信号,行驱动电路原理如图2所示。
图2 行驱动电路设计图
应用时,控制器输出的EN信号为两片74HC138共同的使能信号,低电平使能,允许行驱动信号输出,若EN为高电平,则禁止行驱动信号输出。D信号即为片选信号,低电平选中U1(74HC138)芯片,高电平选中U2(74HC138)芯片。C、B、A信号经选中的74HC138译码后从Y0-Y7端输出,且低电平有效,选中要扫描的行。当输出的行信号D、C、B、A按二进制递增的顺序变化,可实现循环选中16行。当输出0000时,D端为低电平,选中U1芯片,C、B、A为000,经译码U1的Y0将输出低电平,其余的输出端均输出高电平,选中LED显示模块的最上一行。当经0001、0010变化到0111时,仍是U1芯片工作,Y7将输出低电平,选中LED显示模块的第八行,再变化到1000时,D端为高电平,则选中U2芯片,C、B、A为000,U2的Y0将输出低电平,选中LED显示模块的第9行。当经1001、1010变化到1111时,仍是U2芯片工作,Y7将输出低电平,选中LED显示模块的最后一行。这样控制器输出的控制信号D、C、B、A从0000变化到1111,共16个状态,按顺序分别选通LED点阵模块的16行,不断重复上述过程,这就是行驱动电路的逐行扫描过程,其频率可由单片机定时器预设的定时时间来决定。
由于行驱动电路一条行线上要驱动16列的LED进行显示,仅靠74HC138译码器提供不了足够的电流来驱动16个LED同时点亮。因此,该设计在74HC138译码输出端后加上74HC4953芯片,内含双CMOS管,将电流信号放大,使得行驱动电路的安全性,可靠性更高,也保证了高扫描频率下LED的亮度。
2.3列驱动电路设计
列驱动电路由移位锁存器级联构成。该设计选用了业内常用的串行输入并行输出移位寄存器74HC595,并具有输出锁存功能。74HC595的一个重要特点是串行数据的移入和8位数据并行锁存输出分别由各自独立的时钟控制,在移位时钟作用下,串行数据不断移入移位寄存器,但输出锁存器仍保持原来的数据,输出并不改变,只有在输出锁存时钟作用下移位寄存器的数据才由输出锁存器输出,从而可以实现在前台显示本行各列显示数据的同时在后台串行传入下一行的显示数据,同一时刻同时进行两种操作,实现时间利用率最大化,列驱动电路原理如图3所示。
图3 列驱动电路设计图
列驱动电路由U3和U4两片串行输入并行输出移位寄存器74HC595级联组成:第一片U3的DS端作为控制器输出的串行数据入口(DIN),接收显示数据,Q7′端连接第二片U4的DS端,将第一片移出的数据传递到下一片的串行数据输入口,实现级联。当U3、U4的SHCP(11脚)同时接收到来自控制器(CLK)产生的上升沿信号时,控制器事先已由DIN输出显示数据的一位由U3的DS(14脚)引脚输入至U3移位寄存器Q0中,U3移位寄存器的其余各位依次移位,U3的Q7数据级联传入U4的Q0中,U4其余各位也依次移位,实现一位显示数据的移入。控制器产生连续16个脉冲,把下一行16列的显示数据依次输入到由U3、U4级联而成的16位移位寄存器中。移位过程完成后,当本行显示周期结束,控制器产生输出锁存信号(STB),U3、U4的HTCP(11脚)同时接收到一上升沿信号,16列显示数据由移位寄存器并行锁存到锁存器,由于OE(13脚)始终接地,使能锁存器输出,选通行的各列显示数据就LED模块上显示出来。
2.4 16×16显示模块的级联
16×16显示模块在硬件的设计上采用串行方式传递显示数据,因此可以比较容易实现各16×16显示模块之间的级联,组成16×64等更大显示分辨率的显示模块。在16×16显示模块中设有输入接线端口(DIN)和输出接线端口(DOUT),将由控制器输入的行信号A、B、C、D、 EN和列控制信号STB、CLK分别接到模块的输入接线端口和输出接线端口相对应的位置,将外部输入的串行显示数据输入信号接到模块输入接线端口的DINX(X为1或2,可分别对红色和绿色的数据)接线端,并将模块的串行输出信号接到输出接线端口的DOUTX(X为1或2)接线端。这样级联的下一个模块的行和列的控制信号与前一个模块的行列控制信号同步,而数据却级联起来了,上一模块移出的显示数据作为了下一模块的输入信号。只要速度足够快,可实现多个16×16显示模块的级联,组成更大分辨率的显示模块。
图4 模块输入输出接线端口图
3基于Keil C的软件设计
文章的控制程序基于Keil开发环境,采用C语言编程。C语言是高级语言,接近人类的思维习惯,程序的可读性较好,且C语言编写的程序采用模块化结构,结构清晰,可移植性好,可显著缩短软件的开发时间,提高开发效率。
LED显示屏控制软件的主要功能是向显示屏提供不同显示内容和显示效果的显示数据,并产生硬件电路工作时序所需的各种控制信号,使屏幕显示达到要求。根据模块化程序设计的思路,把显示屏的软件分为系统初始化模块、定时服务模块、列数据串行驱动模块、行扫描驱动模块、各种显示效果模块等,各个模块可进行独立设计和调试,将复杂的控制问题分解到各个模块中去解决,控制思路明晰,降低了设计难度。
3.1系统的主程序
在主程序中先对系统进行初始化操作,系统的初始化主要是对输入输出端口状态做好初始配置,实现控制器对显示屏的正常连接。对定时器寄存器进行初始化编程,设定其工作方式、定时时间等参数,设置好中断控制寄存器,开启相应中断。对显示屏进行清屏,预置扫描行为第1行,为显示屏进入工作状态做好前期准备。初始化后主程序根据显示要求不断调用相应的显示模块,实现显示效果,达到控制要求,系统主程序流程详见图5。
图5 系统主程序流程图
3.2发送新行显示数据程序
发送新行显示数据程序功能为控制列驱动器产生移位驱动信号,将新行显示数据依次移入串入并出移位寄存器,为新行的显示做好准备。LED显示屏能展示各种不同的显示效果,只是因为显示数据在组织顺序上发生了变化,按照不同的算法对显示数据进行处理,就能产生静态显示、左跑马、上卷帘等不同的显示效果。该函数在执行时显示器仍在显示上一行的显示内容,详见图6。
图6 发送新行显示数据程序流程图
3.3单行数据显示程序
单行数据显示程序功能为驱动选中行的行驱动器输出低电平,将新行的显示数据在显示屏上显示出来,并将行指针指向下一行,为避免拖尾,保证显示质量,采取了消隐措施。该函数在定时器中断处理程序中被不断调用,详见图7。
图7 单行数据显示流程图
3.4 定时中断处理程序
LED屏显示原理是依靠逐行扫描来实现的,只要扫描的速度快,由于人眼的视觉暂留现象,就能看到显示屏上稳定的显示内容。文章中各行的逐行扫描显示在定时器中断处理中执行,行扫描的速度由定时器的定时时间来决定,设定为1.25ms,每屏16行,刷新频率为50Hz,可保证稳定显示不闪烁,详见图8。
图8 定时器中断处理程序流程图
4结论
文章基于Keil C语言,确定以PC机为上位机,AT89S52单片机为核心控制器件,移位锁存器74HC595为列驱动器和译码器74HC138为译码电路器件, CMOS管为行驱动电路器件的设计方案成功制作了由16×16点阵模块组成的小型广告屏,能动态的显示汉字、英文、数字。文章给出了系统具体的硬件设计方案,硬件结构电路图,软件流程图。该系统具有硬件少、结构简单、容易实现、性能稳定可靠和成本低等特点。通过实现过程加强了对LED行业的认识,提升了对51系列单片机、74HC595、74HC138等关键芯片的综合应用能力。