原创 基于AT89C52的液晶显示的实现

2009-8-13 08:38 2988 9 9 分类: MCU/ 嵌入式
摘要  本文讨论了基于AT89C52单片机应用系统开发的液晶显示的实现,并介绍了一些处理汉字显示的技巧。
c hbb\tP+M G45950关键词  单片机  AT89C52  液晶  点阵显示6\4H5F?2RFz45950

s3Z `zhN1O459501 引言

7]xs{3] ]45950 电子园51单片机学习网9a Ira"X*U.L9D

    随着单片机应用领域的不断扩大,用单片机控制汉字显示已成为一种单片机发展的必然趋势。以前那种将汉字点阵编码存入ROM ,在显示时再调用的方法已经不能适应当前的需求。好的应用所能显示的决不能仅仅局限于显示事先定义好的个别汉字,而应该提供直接使用至少包含国家标准的一、二级汉字字库的功能。

bz@-Gj([bn45950 电子园51单片机学习网f5cZnJ8L)|

2 芯片器件介绍电子园51单片机学习网&W!A~vI$p


e;p2C)Upo)T*N5Hg[459502.1 AT89C52单片机
D3B;rha%b"p[45950    AT89C52单片机是EPROM型单片机,可寻址64KB字节的程序存储器和64KB字节的外部数据存储器。
Q5m@C'CUu"F45950以单片机为核心,配以一定的外围电路和软件,实现某些功能,就组成了单片机应用系统。电子园51单片机学习网;C f|\3V(l
2.2 液晶显示模块电子园51单片机学习网9ar}#b6t1o9R6RY
    我们选用北京精电蓬远公司的VPG12864T液晶显示模块,内置T6963C控制器,实现了T6963C与行、列驱动器及显示缓冲区RAM的接口,带有LED边光/底光,温度范围较广,属宽温型,无须外部提供液晶驱动电压,点阵数为128×64,支持图形、文本以及图文合成方式的三显示方式,且T6963C带有内部字符集。
7S!A{C^kqf45950液晶模块与微处理器MPU的接口电路有两种方式:一是直接访问方式,将AT89C52数据口P0直接与液晶模块的数据口连接;二是采用间接控制方式,MPU通过I/O并行接口,模拟液晶模块的时序,间接实现对液晶显示模块的控制。本文讨论的实现方法采用第一种方式。电子园51单片机学习网#U{ `9uh4J
2.3 字库芯片电子园51单片机学习网tP#T2ae1Aki@tP
    字库芯片采用具有256K空间的可编程ROM芯片都可以,我们采用了ATMEL公司的AT27C020芯片,其中烧录含有国家标准的一、二级汉字的16×16点阵字库。
.X4GQf.L8UF*^45950    汉字点阵在字库中的首地址由如下公式计算:电子园51单片机学习网r4|Sx5g
    起始地址=[(区号-1)×94+(位号-1)]×32
kSM4M;Rr {9n45950    自此起始地址起的后续32个字节就是该汉字的字模数据。从字库芯片中的32个字节的字模数据按下表排列构成汉字:电子园51单片机学习网eYny&` _ ]-|

c9U[K;s4e~45950 电子园51单片机学习网 hDep T'A

    其中,汉字由两字节ASCII码组成,分别减去0xA0即得到该汉字的区号和位号。这样就可以直接由汉字的ASCII码来计算该汉字在字库中的地址:电子园51单片机学习网y QBW3S9O9u
     起始地址=[(第一字节-0xA1)×94+(第二字节-0xA1)]×32电子园51单片机学习网]4op#Ot
    由于AT89C52最大寻址64K空间,所以在实现时将AT27C020分成多页,每页的空间不大于64KB,页号通过译码器的有效输出或其他扩展方式确定。

2ow&pG.d-z |4g)zj45950

+Ox x2J8QIcD459503 硬件线路设计

j]"^X _H1xVg x]45950 电子园51单片机学习网NM5|:IZF!^

    AT89C52与字库芯片AT27C020及液晶显示模块VPG12864T的接口逻辑如图1所示:
1} r9Cx:NJG)BR U45950 点击看大图电子园51单片机学习网S4K&T:{i-B


图2 硬件逻辑接口电子园51单片机学习网$lSHnOi+^;aa

电子园51单片机学习网7w ?0`'|!_B:f


X+}&|nWt\)Q+VM Kj45950    由于AT89C52的最大寻址空间为64K,而AT27C020的空间为256K,因而要对寻址进行扩展。地址扩展的方式有两种,一种是利用MPU的IO口进行扩展,AT27C020的低16位地址直接与MPU的地址线相连,而高2位则需进行地址扩展,上图中AT27C020的A16和A17分别接到AT89C52的P1.6和P1.7,片选信号CE接到P1.5上,此时寻址的页大小为64KB(页大小还可以根据需要设置为32KB,16KB等)。寻址由软件编程来实现,例如要读38400H单元的内容,可由下列程序实现:
/{R-[5I+U%\d9]t)c45950电子园51单片机学习网 I`J i9w!Wa;U8Pg
    此种方法实现起来简单明了,不需额外的硬件,缺点是占用MPU的IO资源较多,适用于IO资源有富余的情况。在笔者的应用中,MPU的IO需要余留给其他应用,不能分配这么多的IO来,故采用另外一种方法,由硬件逻辑实现,见图3:电子园51单片机学习网*\ ]2TJ0Hk$fi


电子园51单片机学习网p:yMST(LQv
 
I X;~A;w6Px*x [45950
fK(A%sO%mu45950    本例中的页大小为32KB。AT27C020的片选信号CS1由地址线A15产生(即A15连到片选信号CE上),如要读38400H单元的内容,先由程序产生高位地址AA17、AA16、AA15。对字库芯片寻址时,先产生页地址,再进行页内寻址,利用此种方法可进行多位地址的扩展。举例如下:
9n.J6n*l9\5U6um5~45950电子园51单片机学习网2UP9RAX En@.X5p5}


4N(k;Q4Qm*A Z1oI*^V459504 软件的实现与控制

7S0_4H2EIg!f45950 电子园51单片机学习网!LY/T ?/p

    VPG12864T液晶模块的系统指令集其实就是T6963C控制器的指令集,模块的初始化设置一般都由管脚设置完成。T6963C的指令可带一个或两个参数,或无参数。每条指令的执行都是先送入参数,再送入指令代码,且每次操作之前要进行状态字检测。T6963C的状态字如下说明。在处理显示操作时,首先要指定字符串、文字段的有效显示位置。电子园51单片机学习网i0^Uo.wdS-]%s:C

电子园51单片机学习网_l3Lz0h:t8F+z3e(b

电子园51单片机学习网|"KQz!n
    STA0:指令读写状态
6w*C+zx(BR fVxw|45950    STA1:数据读写状态电子园51单片机学习网aP|2\V|;\KHL sE
    STA2:数据自动写状态电子园51单片机学习网8Xx7`x^ k e2q
    STA3:数据自动读状态电子园51单片机学习网 Z)Njo7o
    STA5:读/写出错状态
`+V gQQU$~,b0H45950    STA6:运行控制器检测电子园51单片机学习网Q:N7RdR\0SHW*c
    STA7:闪烁状态检测电子园51单片机学习网c$S){PM:n
    另外STA4保留.
+d-j h+x8|:p:n459504.1 显示字符电子园51单片机学习网;Mf4f:i2Hd p
    VPG12864T液晶模块字符的显示有两种实现方式,一是利用T6963C提供的字符集,另一种方法是将字符的点阵数据存放在ROM内,需要时以图形方式显示。当电路驱动能力不够时,可以采用第二种方式。字符显示相对比较简单,在这里不做详细描叙。电子园51单片机学习网9w k6h4n5Wi
4.2 显示汉字
[3k'd3f|E45950
    处理汉字显示时,由于VPG12864T液晶模块是128×64点阵的,所以显示16×16点阵的汉字一行最多显示8个,且最多显示4行。对于每一个汉字的显示,首先应该计算该汉字在字库中的地址,然后读出该汉字的点阵排列。当显示至一行的末尾时要换行显示。在处理汉字显示时有两种方法:一是一次只显示一个汉字,即对于每一个汉字,先计算出此汉字地址,读出其点阵数据,显示完毕再处理下一个汉字,直到处理完所有的汉字;第二种方法是将所要显示的所有汉字的点阵数据从字库中读出存放外部RAM中,再集中处理显示的问题。本文讨论的是后一种方法。电子园51单片机学习网q@#WF:W{@6O
字符半角码与全角码有如下的对应关系:
F$O'VGB.P45950 
2w@ x'f]l*W45950    半角字符对应的全角字符的起始地址的计算公式:电子园51单片机学习网-w9x*o+g {u5h
    起始地址=[(2×94+(ASCII-0x21))×32
U~*@*M b45950    汉字显示处理的流程如下(用“#”作为显示汉字段的结束标志):电子园51单片机学习网u-}w$I@)O CN


c|[W PvL2x45950
%f+s g I ^/X k1Q45950 
!\ EEW*}45950    在处理汉字显示时,如果要实现汉字的反显(例如实现菜单操作),将汉字的32字节字模数据分别与0xFF异或(XRL)运算,或者取反(CPL)运算后再显示即可。电子园51单片机学习网/u7\r-RnL s
4.3 实现进度条和动画
)r8a2A b^S#QZ45950
    进度条显示的原理就是在连续的位置不间断地显示一些点阵,来表示某事务的完成进度。实现进度条的程序如下。程序中用R1、R2记录点阵数据,RLEN记录显示的进度条长度范围。
5I4I-H3RI%l f45950电子园51单片机学习网4K7f(db @^[,d%Z

/O8BA$W*Ek45950电子园51单片机学习网]E RE ?;ws"t Z

#~#m5[J8_'p45950电子园51单片机学习网2~Kb W*bw!~ l6c4g.V
    上面的程序段中,ST01是判STA0、STA1状态的子程序;DELAY是延时子程序,具体应用时可根据需要设置延时的时间;C_ADD=8100H,表示指令通道地址,D_ADD=8000H,表示数据通道地址。电子园51单片机学习网Y{u#B$OB
    显示动画的与显示进度条原理大致相同,不同的是进度条在不同位置显示,而动画则在同一个位置交替显示不同的点阵。动画显示的例子略。

k(N(W{*OGV"X45950

wrcp!E459505 结束语

'XY_*]Y/y1G"KO2i45950 电子园51单片机学习网Qk6i,yp1@ M6s YI3a

    本文是我们实际工作的经验总结,所给的程序都调试通过,希望能够给你的开发带去一点启发。

:BI"N2_Dz6h45950 电子园51单片机学习网1t_%ozW8D-w

参考资料电子园51单片机学习网4S?v0q }.Q
1 张友德 等 单片微型机原理、应用与实验  复旦大学出版社,1987电子园51单片机学习网Ue ld1}dp E
2 马忠梅 等 单片机的C语言应用程序设计  北京航空航天大学出版社,1998电子园51单片机学习网 H_3ph(@
3 成都木马科技 编著 单片机原理及应用 北京希望电子出版社,2000电子园51单片机学习网 x3v&a7~ bY K/M:nj

y0Z D9F;J9M.C!yP45950
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条