摘要:文中详细介绍了由STC89C52RC单片机、74HC154芯片、晶振电路、复位电路、驱动电路、16×16 LED点阵构成的LED汉字显示屏系统。设计采用STC89C52RC单片机为微控制器,74HC154为译码器、PNP型三极管8550构成行驱动电路,NPN型三极管8050构成列驱动电路,采用4个8x8LED显示器级联构成16×16的点阵汉字显示屏。软、硬件设计结果表明所设计的LED汉字显示屏可以实现汉字的滚动显示,且汉字清晰,无串扰,无重影。
关键词:STC89C52RC;LED点阵;汉字显示屏;动态扫描
LED点阵是一种简单的汉字显示器件,具有价廉、易于控制实现、使用寿命长的特点。本次LED汉字显示屏的设计使用STC89C52单片机对4片8x8LED点阵进行控制,采用上移显示方式,可以连续显示多个汉字。
1 硬件设计
1.1 系统的硬件组成框图
系统硬件组成框图如图1所示。
1)选用STC89C52单片机作为微控制器。
2)由74HC154构成译码器,该译码器是4线-16线译码器,输入端有4条数据线,共有6种输出,分别对应控制LED点阵显示器的0-15行。译码器输入端接单片机P0口。
3)驱动电路:由PNP型三极管8550和NPN型三极管8050构成,分别控制行和列。为显示器提供足够的驱动电流。列驱动高八位接单片机P2口,低八位接单片机P1口。行驱动接译码器芯片输出端。
4)显示模块:由4个8x8LED显示器级联而成作为输出终端;4块显示器的连接方法为;上下排列对应列引脚相连,左右排列对应行引脚相连。
1.2 硬件模块设计
1.2.1 STC89C52RC单片机
STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,STC89C52单片机在电子行业中有广泛的应用,管脚分布如图2所示。
1)主电源引脚(2根):VCC(Pin40)电源输入,接+5V电源;GND(Pin20)接地线。
2)外接晶振引脚(2根):XTAL1(Pin19)片内振荡电路的输入端;XTAL2(Pin20)片内振荡电路的输出端。
3)控制引脚(4根):RST/VPP(Pin9)复位引脚,引脚上出现2个机器周期的高电平将使单片机复位;ALE/PROG(Pin30)地址锁存允许信号;PSEN(Pin29)外部存储器读选通信号EA/VPP(Pin31)程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高则从内部程序存储器读指令。
4)可编程输入/输出引脚(32根):AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。每一根引脚都可以编程。
1.2.2 74HC154芯片
74HC154是一款高速CMOS器件,74HC154引脚兼容低功耗肖特基TTL(LSTTL)系列,管脚分布如图3所示。
74HC154译码器可接受4位高有效二进制地址输入,并提供16个互斥的低有效输出。74HC154的两个输入能门门电路用于译码器选通,以消除输出端上的通常译码“假信号”,也可用于译码器扩展。门电路包含两个“逻辑与”输入,必须置为低以便使能输出端。任选一个使能输入端作为数据输入,74HC154可充当一个1-16的多路分配器。当其余的使能输入端置低时,地址输出将会跟随应用的状态。
在本设计中,需要定时对16x16LED的行进行动态扫描,共有16种状态,故选择了4线-16线译码器,该译码器只用输出4位有效数据,就可控制16种状态,大大简化了软件的编写,同时节省了单片机的硬件资源。
1.2.3 复位电路设计
复位电路如图4所示,其基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。采用简易的上电复位电路,主要由电阻R1,R2,电容C1,开关K1组成,分别接至AT89C51的RST复位输入端。
1.2.4 晶振电路设计
晶振电路如图5所示,其基本功能是:为单片机提供一个稳定的参考时钟,使单片机能够可靠的工作。晶振的频率常用的有6MHz、11.0 592 MHz、12 MHz等。晶振电路的接法比较同定,本设计采用的11.059 2 MHz晶振电路为晶振两端接2个20~30 pF的起振电容后接地,然后两端接单片机XTAL引脚即可,各单片机说明手册中附有不同频率的晶振的晶振电路的接法。
1.2.5 驱动电路设计
驱动电路原理图如图6所示,行、列驱动部分均用16个小功率普通三极管来控制。由于选用的LED显示器为共阴接法,即同名列共阳,同名行共阴,为使加入驱动后与原显示屏控制方式保持一致(列高电位接通,行低电位接通),故行驱动选用PNP型三极管8550,对应的列驱动选择NPN型三极管8050。驱动电路原理图如图6所示。
1.2.6 LED点阵汉字显示
要显示一个汉字,必然要用到汉字的点阵字形信息,也叫做汉字的字模。得到汉字字模的过程称为汉字的取模,汉字的取模是汉字显示的逆过程。根据汉字的不同字体,汉字字模可分为宋体字模、楷体字模、黑体字模等。根据汉字的显示清晰度,又可分为16×16点阵字模、32×32点阵字模等等。汉字的字模是汉字字形的数字化。本设计中,汉字的字模是以16进制数字形式记录的显示一个具体的汉字时每一行需要点亮的LED的信息。如图7所示:以汉字“你”为例,每一行中数字“0”代表未点亮该行对应列位置上的LED,而数字“1”则代表该行对应列位置上的LED被点亮。这样,每一行由数字“0”和数字“1”组成的汉字信息叫做位代码,将每行16位位代码转换成2个字节的16进制代码,就是我们需要的汉字字模信息。
2 软件设计
2.1 主程序流程图
主程序流程图如图8所示。主程序调用了2个重要子函数,即显示子函数和移位子函数。显示子函数的功能是让LED显示器显示指针所指向的字模数组的数据,而移位子函数的功能是让指针所指的地址加2,以实现汉字整体上移一行的效果。整个主程序运行后,先初始化指针p所指向的地址,让指针指向字模数组的起始处,并且设定变量I的初值为0,用I的值来控制显示函数的重复次数,达到调整显示汉字移动速度的目的。当I值未达到设定值时,不断重复显示子函数,此时屏幕上显示的是一个静止不动的汉字,直到I达到设定值,调用移位子函数,将指针地址加2,使指针的起始位置指向第二行,然后重新从I的初始化开始执行,这样,屏幕上就呈现出汉字不断上移的结果。
2.2 显示子程序流程图
显示子程序流程图如图9所示,显示子程序的运行过程主要是单片机I/O口对外发送数据的过程。程序首先设定了一个局部变量I,并定义其值为0。设定该变量的主要目的是为了确定扫描的行数,以控制I/O口发送相应行的字模数据。经过判断,如果I值小于15,说明正在扫描显示器上的某一行,则P0口送出相应的行扫描命令到74HC154芯片,经译码后控制显示器接通相应的行,然后P2、P1送出相应的高、低八位列字模数据,最后关闭列控制以防止残影,对I值自加1就完成了一个循环。当I>15时,说明全部的16行扫描进行完成,此时显示器整屏已经出现了需要的图像,程序执行完成。
2.3 移位子程序流程图
位移子程序就是让地址指针自动加2,这样,当湿示函数执行时,第一行显示的就是原本第二行要显示的内容,依次类推,整个字形就好像上移了一行一样。所以程序运行过程是这样的:首先让地址指针自加2,以实现地址指针的移动,然后削定地址指针所指向的地址的值,如果地址指针指向了字模数组的最后一位地址,就要令地址指针归0,否则,指针顺序移动下去,当移出字模数组的范围后,后面的存储空间存储的数据是未知的,就会出现非预期的图形,例如乱码或空白。
3 硬件调试与改进
3.1 驱动电路的调试与改进
最初设计方案没有使用驱动电路,软件仿真正常。在面包板上依原理图建立物理连接后,调试中发现LED忽明忽暗,汉字显示不稳定。经万用表测量,LED显示器中单个发光二极管中通过的电流不足1.5 mA,达不到额定的工作电流。确定问题的原因是单片机的驱动电流不足。为解决这一问题,本次设计采用一套利用三级管控制的驱动电路,经试验,加入到电路中效果良好,上述缺陷得到解决。
3.2 限流电阻的调试与改进
当确定要加驱动电路之后,怎样用三极管来控制这个电流大小是一个问题。起初通过三极管直接加5 V电压。一个LED被烧坏,这就需要加要加限流电阻,但是这电阻要加多大呢?分析如下:正常点亮一个LED的电流大约是5~15 mA左右,动态扫描电路,每次每列最多只点亮1个LED,故每个驱动三极管流过的电流按10 mA的电流大小算。通过加不同阻值的电阻,用万用表测量后发现用4.7 kΩ的限流电阻与8550(PNP型)三极管串联控制行,用47 kΩ的电阻与8050(NPN型)三极管串联控制列便可以满足要求。
3.3 译码器的调试与改进
最初设计方案采用软件编程来实现扫描时的换行控制,虽然硬件电路相对现在的有少许简单,但是软件程序确实相当的复杂,后发现只用一个译码器就可以大大简化程序。
3.4 上拉电阻的选择
设计之处初用单片机的P0口通过译码器控制显示屏的行,插好线后发现单片机不能正常工作,原因是单片机的P0口是比较特殊的。P0口在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。所以P0口的带负载能力是比较低的,一般情况下要接一个上拉电阻,所以最后在P0口接了一个10千欧的排阻之后解决了问题。
3.5 消影调试
当所有的线路都连接好后,显示却不清晰、有串扰,每行有上一行的重影。在源程序中加入消影程序后可以清晰稳定的显示。
4 结束语
文中给出了LED汉字显示屏的系统框图,各单元硬件电路、软件设计流程图及硬件电路的调试流程;详细阐述了由STC89C52RC芯片、74H C154芯片、晶振电路、复位电路、驱动电路、16x16 LED点阵构成的LED汉字显示屏系统。所设计的显示屏可以实现汉字的滚动显示,显示的汉字清晰,无串扰,无重影。