汉字点阵显示系统的设计实现分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汉字点阵显示系统的设计与实现
X焕焕电信32
摘要汉字点阵显示广泛应用于各种服务性的公共场所。
文章首先介绍了汉字点阵显示的基本原理,在此基础上,提出了基于单片机AT89C51的汉字点阵显示系统的总体设计方案,并进一步细化设计了各单元电路。
在论证了所设计显示汉字系统的可行性后,进行了实际制作及相关的程序设计,经过硬件电路及程序的调试,成功显示我院校训“厚学启智,修德树人”。
关键词汉字显示单片机16×16点阵
引言
当今社会在大型商场、车站、码头、地铁站以及各类办事窗口等越来越多的场所需要用点阵显示图形和汉字。
LED行业已经成为一个快速发展的新兴产业,市场空间巨大,前景广阔。
随着信息产业的高速发展,LED显示作为信息传播的一种重要手段,已经广泛应用于室内外需要进行服务内容和服务宗旨宣传的公共场所,例如户内外公共场所广告宣传、机场车站旅客引导信息、公交车站报站系统、证券与银行信息显示、餐馆报价信息提示、高速公路可变情报板、体育场馆比赛转播、楼宇灯饰、交通信号灯、景观照明等。
显然,LED显示已经成为城市现代化和信息化社会的一个重要标志。
本文提出了一种基于单片机AT89C51的汉字点阵显示系统的设计方案,并显示我院校训“厚学启智,修得树人”。
1 汉字点阵显示原理
从理论上讲,不论显示图形还是汉字,只要控制组成这些图形或文字的各个发光点的亮灭,就可以实现显示,这种方法称为静态驱动显示方式。
16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。
这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。
因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。
动态扫描的意思简单的说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同多列共用一套列驱动器。
具体就16×16的点阵来说,把所有同一行
的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起,先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;以次类推,到第16行之后,又重新点亮第一行,反复轮回。
当这样轮回的速度足够快,由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形或汉字了。
2汉字点阵显示系统的总体设计
汉字点阵显示系统硬件电路大致上可以分为系统的电源电路、单片机小系统、显示驱动控制电路三部分,如图1所示。
图1 汉字点阵显示电路框图
单片机采用AT89C51,晶振12MHz,若能采用24MHz或更高频率的晶振,可以获的更高的刷新频率,使显示更稳定。
单片机的串口与列驱动器相连,用来送显示数据。
列驱动器由集成电路74HC595构成,它具有一个8位传入并处的移位寄存器和一个8位锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。
行驱动器是由译码器74LS154构成,单片机P1口低4位输出的行号经4/16线译码器74LS154译码后生成16条行选通信号线,再经过驱动器驱动对应的行线。
3各单元电路的设计
3.1系统的电源电路
汉字点阵显示喜用可以直接与220V交流电相连,经过变压器、整流桥后输出12V带有交流成分的直流电压,再经过滤波电容后输出12V直流工作电压,
供给四个串联LED工作;再将12V直流工作电压接7805的1脚,2脚接地、3脚便输出5V直流电压再经过一滤波电容输出+5V直流电压为主控模块89C51提供5V工作电压,接法如图二所示。
图二系统电源电路
3.2单片机小系统
单片机采用89C51芯片,89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的串口与列驱动器相连,用来送显示数据。
P1口低4位与行驱动器相连,送出行选信号;P1.5~P1.7口则用来发送控制信号。
P0和P2口空着,在有必要时可以扩展系统的ROM和RAM。
图三单片机小系统
3.3显示驱动控制电路
显示驱动控制电路分为列驱动电路和行驱动电路。
列驱动电路是由集成电路74HC595构成。
它具有一个8位传入并处的移位寄存器和一个8位锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。
74HC595的输入侧有8个串行移位寄存器,每个移位寄存器的输出都连接一个输出锁存器。
引脚SI是串行数据的输入端。
引脚SCK是移位寄存器的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。
移位后的各位信号出现在各移位寄存器的输出端,也就是输出寄存器的输入端。
RCK是输出寄锁存器的打入信号,其上升沿将移位寄存器的输出打入到输出锁存器。
引脚G 是输出三态门的开放信号,只有当其为低时移位寄存器的输出全部为0.由于SCK 和RCK两个信号是相互独立的,所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应用时,向上一级的级联输出。
但因QH受输出锁存器打入控制,所以还从输出锁存器前引出了QH,作为与移位寄存器完全同步的级联输出。
图三74HC595外形及内部逻辑结构图
行驱动电路是由译码器74LS154构成,单片机P1口低4位输出的行号经4/16线译码器74LS154译码后生成16条行选通信号线,再经过驱动器驱动对应的行线。
一条行线上要带动16列的LED进行显示,按每一LED器件20mA电流计算,16个LED同时发光时,需要320mA电流,选用三极管8550作为驱动器可满足要求。
4电路的制作
在Protel 99SE中画出电路原理的SCH图,再转化成相应的PCB图,在PCB 图中把各个元器件的位置摆放合适,以保证线条有足够的宽度,而且交叉线最少。
检查无误后通过刻板机刻出PCB板。
对照PCB电路图,将选择好的元件正确地安装在PCB板上。
在焊接时,要有足够的热量和温度。
如温度过低,焊锡流动性差,很容易凝固,形成虚焊;如温度过高,将使焊锡流淌,焊点不易存锡,焊剂分解速度加快,使金属表面加速氧化,并导致印制电路板上的焊盘脱落。
尤其在使用天然松香作助焊剂时,锡焊温度过高,很易氧化脱皮而产生炭化,造成虚焊。
电路板各元器件焊接完成之后,就可对电路进行调试了。
在调试之前,一定要先认真的做好目视检查,检查在焊接的过程中是否有可见的短路和管脚搭锡等故障;检查是否有元器件型号放置错误,第一脚放置错误,漏装配等问题。
然后用万用表测量各个电源到地的电阻,以检查是否有短路,这个好习惯可以避免贸然上电后损坏PCB 板。
检查无误后就可以接通电源,导入程序检查电路板是否工作正常。
16×16点阵显示屏PCB 图
5程序设计
显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
根据软件分层次设计的原理,可把显示屏的软件系统分为两大层:第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED 显示屏的扫描显示工作。
显示驱动程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置,显示效果处理等工作,由主程序来实现。
5.1程序流程图
显示驱动程序在进入中断后首先要对定时器T0重新赋值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷新率=1/16×0T
溢出率=1/16×
)
65536(120t f osc
其中osc f 为晶振频率,0t 为定时器0T 初值。
然后显示驱动程序查询当前燃亮的行号从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后在输出新的行号,重新打开显示。
右图为显示驱动程序(显示屏扫描函数)流程图。
系统主程序开始以后,首先对系统环境初始化,包括设置串口,定时器,中断和端口;然后向上滚动显示“厚学启智修德树人”八个汉字。
5.2源程序
软件程序主要由开始、初始化、主程序、字库组成。
;**********************************************;
;字幕显示:(源程序)
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
;****************;
;初始化程序;
;****************;
;***************;
;主程序;
;***************;
START: MOV 20H,#00H
MOV A,#0FFH
MOV P1,A
MOV P2,A
MOV P3,A
MOV P0,A
CLR P1.6 ;串行寄存器输入打入输出控制位
MOV TMOD,#01H ;使用T0作16位定时器,行扫描用
MOV TH0,#0FCH ; 1MS初值(12MHZ)
MOV TL0,#18H
MOV SCON,#00H ;串口0方式传送显示字节
MOV IE,#82H ;T0中断允许,总中断允许
MOV SP,#70H
MAIN: LCALL DIS1 ;显示准备,黑屏,1.5S
MOV DPTR,#TAB
LCALL MOVDISP ;向上滚动显示一页(8个字)
INC DPH
LCALL MOVDISP ;向上滚动显示一页(8个字)
INC DPH
LCALL MOVDISP ;向上滚动显示一页(8个字)
AJMP MAIN
;****************;
;;多字滚动显示子程序;
;*****************;
;;每次8个字,入口时定义好DPTR值
;;
MOVDISP:MOV B,#00H ; 向上移动显示,查表偏址暂存(从00开始)
DISLOOP: MOV R3,#07H ; 移动速度
DISMOV: MOV R2,#00H ; 第0行开始
MOV R1,B
SETB TR0 ;开始扫描(每次一祯,每行1ms)WAITMOV: C 01H,DISMOV1
AJMP WAITMOV
DISMOV1: DJNZ R3,DISMOV ;一祯重复显示(控制移动速度)INC B ;显示字的下一行
INC B
MOV A,R1 ;R1为0,8个字显示完
JZ MOVOUT
AJMP DISLOOP
MOVOUT: RET ;移动显示结束
;;**************;
; 单字显示子程序;;
;;**************;
;;显示表中某个字
DIS1:MOV R3,#5AH ;静止显示时间控制(16ms*#=1.6s)
DIS11: MOV R2,#00H ;一祯扫描初始值(行地址从00~0F)
MOV DPTR,#TAB ;取表首址
MOV R1,#00H ;查表偏值
SETB TR0 ;开扫描
WAIT11: C 01H,DIS111 ;为1,扫描一祯结耸?
AJMP WAIT11
DIS111: DJNZ R3,DIS11
RET
;****************;
;;扫描程序;
;;****************;
;;1MS刷新一次,每行显示1S
INTT0: PUSH ACC
MOV TH0,#0FCH ;1MS初值重装
MOV TL0,#18H
C 00H,GOEN
D ;16行扫描标志为1,结束
INC R1 ;取行右边字节偏址
MOV A,R1
MOVC A,A+DPTR ;查表
MOV SBUF,A ;串口0方式发送
WAIT:C TI,GO ;等待发送完毕
AJMP WAIT
GO: DEC R1 ;取行左边字节偏址
MOV A,R1
MOVC A,A+DPTR
MOV SBUF,A
WAIT1: C TI,GO1
AJMP WAIT1
GO1: SETB P1.7 ;关行显示,准备刷新
NOP ;串口寄存器数据稳定
SETB P1.6 ;产生上升沿,行数据打入输出端NOP
NOP
CLR P1.6 ;恢复低电平
MOV A,R2 ;修改显示行地址
ORL A,#0F0H ;修改显示行地址
MOV R2,A ;修改显示行地址
MOV A,P1 ;修改显示行地址
ORL A,#0FH ;修改显示行地址
ANL A,R2 ;修改显示行地址
MOV P1,A ;修改显示行地址
CLR P1.7 ;开行显示
INC R2 ;下一行扫描地址值
INC R1
INC R1 ;下一行数据地址
MOV A,R2
ANL A,#0FH
JNZ GO2
SETB 00H ;R2为10H,现为末行扫描,置标志
GO2: POP ACC
RETI
GOEND: CLR TR0 ;一祯扫描完,关扫描
SETB 01H ;一祯扫描完。
置结束标志
POP ACC
RETI ;退出
;*************************************************;
; 扫描汉字表;
;*************************************************;
TAB:
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB
xC0,0x03,0xDF,0xFF,0xD0,0x07,0xD7,0xF7,0xD0,0x07,0xD7,0xF7,0xD0,0x07,0xDF,0xFF;
DB 0xD0,0x07,0xDF,0xCF,0xDF,0x3F,0xD0,0x03,0xBF,0x7F,0xBF,0x7F,0x7D,0x7F,0xFE,0xFF;/*"厚" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF;
DB 0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF;/*"学",1*/ DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH,
0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xFE,0xFF,0xFF,0x3F,0xFF,0x7F,0xE0,0x03,0xEF,0xFB,0xEF,0xFB,0xE0,0x03,0xEF,0xFF;
DB 0xEF,0xFF,0xE8,0x03,0xEB,0xFB,0xDB,0xFB,0xDB,0xFB,0xB8,0x03,0x7B,0xFB,0xFF,0xFF;/*"启" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xDF,0xFF,0xC0,0xFF,0xB7,0x83,0xF7,0xBB,0x00,0xBB,0xF3,0xBB,0xF5,0x83,0xEE,0xFF;
DB 0x90,0x0F,0xF7,0xEF,0xF7,0xEF,0xF0,0x0F,0xF7,0xEF,0xF7,0xEF,0xF0,0x0F,0xF7,0xEF;/*"智" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xEE,0xFF,0xE6,0xFF,0xCE,0x07,0xDC,0xF7,0x95,0x6F,0x53,0x9F,0xD7,0x67,0xD4,0xB1;
DB 0xD7,0x1B,0xD6,0x67,0xD9,0x9F,0xDE,0x73,0xD9,0xCF,0xDF,0x3F,0xD8,0xFF,0xFF,0xFF;,/*"修" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xEF,0xBF,0xE7,0xBF,0xD8,0x01,0xAF,0xBF,0x64,0x03,0xCD,0x6B,0xDD,0x6B,0x9C,0x03;
DB 0x5F,0xFF,0xD0,0x01,0xDF,0xFF,0xDA,0xBB,0xDA,0xDD,0xDA,0xF5,0xD7,0x07,0xDF,0xFF;/*"德"
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0xEC,0x3B,0x03,0x81,0xED,0x7B,0xC5,0x7B,0xCA,0xDB;
DB 0xAA,0x6B,0xAE,0xBB,0x6D,0xBB,0xEB,0xFB,0xE7,0xFB,0xEF,0xFB,0xEF,0xEB,0xEF,0xF7;/*"树" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
DB 0xFE,0xFF,0xFE,0x7F,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFD,0x7F,0xFD,0x7F;
DB 0xFB,0x7F,0xFB,0xBF,0xF7,0x9F,0xF7,0xCF,0xEF,0xE7,0xDF,0xF1,0xBF,0xFB,0xFF,0xFF;/*"人" DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH; 1黑屏
DB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;2
END
6制作调试过程中出现的问题及其解决方法
问题之一:显示系统接通电源的瞬间,屏幕可显示部分汉字,但持续时间较短,之后为黑屏。
经反复检查、测试,发现屏幕在点亮的瞬间,电源电压急速下降,由此判断问题的原因是5V变压器负载能力不足。
解决的方法是:把原来的5V变压器更换为12V单输出变压器后,问题得到解决。
问题之二:提高变压器负载能力后,显示屏可以持续点亮,但是显示屏中有几列有重影,而且有一行完全不能点亮。
经过对电路的仔细核查,发现重影是由于点阵显示块部分引脚短路造成的,割断相应短路线后,问题迎刃而解。
有一行完全不能点亮,根据驱动控制电路的工作原理,分析该问题可能是对应由于行驱动电路有问题,经实际测试,发现该行驱动管8550是坏的,更换之后问题得到解决。
结束语
本文所设计制作的汉字点阵系统,以单片机AT89C51为控制核心,具有电路结构简单、成本低廉、显示屏各点亮度均匀、显示图形或文字清晰无明显串扰现象、显示方式和显示信息可控且易于扩展成更大的显示屏等优点。
其不足之处是显示汉字的过程中,偶尔会感觉两字之间过渡不够稳定,如果采用24MHz
晶振,提高刷新频率,显示效果将会更加完美。
参考文献
[1]汪清明.LED点阵显示牌的设计与动态显示控制[J].微机算机信息,2001,(05).
[2]赵双萍,罗琦.LCDLED汉字多点阵字模提取[J].微机算机信息,2002,(05).
[3]施齐云.一种LED汉字信息动态显示可控系统的设计[J].信息技术,2002,(12).
[4]付永庆,X林.用EDA设计LED汉字滚动显示器[J].电子产品世界,2001,(10).
[5]邓双成,周灿丰,田海晏,焦向东,X沛,杨利华.AT89C2051单片机的汉字显示接口技术[J].石油化工学院学报,2003,(03).
[6]陆爱明.单片机和图形液晶显示器接口应用技术[J].电子产品世界,2001,(15).
[7]潘建华,魏跃文.C语言实用界面技术[M].XX:XX电子科技大学,1995.
[8]孟庆洁.灵活实用的小型汉字库[J].电子与自动化,1999(3).。