摘要 针对不带汉字字库的图形点阵液晶模块的系统,嵌入GB2312-80字库芯片,利用国标区位码和液晶模块的特点实现汉字和西文字符的混合显示。本文介绍了汉字机内码与区位码的相互转换关系,以及利用T6963C作控制器的液晶模块YJ240D的基本原理,探讨了实际应用中此类液晶模块在嵌入式仪器仪表中混合显示的硬件设计和软件实现方法。
v6G$lR;@|8G;q3_0"K%bu7iL0关键词 液晶模块 区位码 汉字字模库
_@5C?8] l-G0.tV3o+ua:xH0 电子园51单片机学习网"Vy.U)N:hw
电子园51单片机学习网+fAe\!o!g;}fm}L;V引言目前,在嵌入式智能仪器仪表中,常用的LCD模块一般不带有字库,而实际应用中的人机界面需要显示汉字,如果直接把汉字点阵字库放在程序空间需要占有大量的程序空间,并且字库不一定完整。本文以深圳莱德电子的LCD显示模块YJ240D和国标汉字库GB2312-80为例,介绍了一种基于无汉字字库的图形LCD模块汉字显示的解决方案。
?_:d`XR(WPbj02V6T2^6`L|0
s{K#Z-w&p8~&]01 单片机与液晶模块的接口
*twEL(~oYe0 电子园51单片机学习网%obv0z6q/i1.1 YJ240D的基本结构
{Oi;i5R S!l0 电子园51单片机学习网q'v2lJ4u-}RYJ240D是一款图形点阵液晶显示模块,它由控制器T6963C、行驱动器、列驱动器及240×128全图形点阵液晶显示器组成。可显示常用字符及图形,也可以显示15×8个(16×16点阵)汉字,内带32K显示缓冲数据存储器,可储存八屏图形显示数据。5V单电源供电,模块内带负压发生器,用于驱动LCD,内带LED背光,通过调节VLCD的电压可以调节液晶的对比度。
j_:Zjh(m E0/]Vwn\;N"l ~.@B0T6963C 是日本东芝公司专门为中等规模LCD模块设计的一款控制器,它通过外部MCU方便地实现对LCD驱动器和显示缓存的管理。其特点为8位总线,内部有128个常用字符表,可管理外部扩展显示缓存64KB(本模块为32KB),并具有丰富的指令供MCU实现对LCD显示屏幕的操作与编辑
N+o$e%G b,A+u8DBGn0 电子园51单片机学习网C/{%V/ck[ LwjYJ240D接口简单,可通过软件编程方便地对液晶控制,其硬件接口定义如表1
#rlZV-eXU mkTb0表1 YJ240D的硬件接口电子园51单片机学习网,Os/c.hG @7Gn2G
引脚编号 q3r%vcpfIF&M5F/M0 | 标号 '@ED!a%e:t(g#p7L0 | 电平 dO4}5x"l2W)Hx&|0 | (q)z/\%O2iqd FlIp0功能描述电子园51单片机学习网(u7_2d0m |I {Of |
1 j q1n^ i.O*Z0 | A (LED+)电子园51单片机学习网Xo'M!`wL | - v.Y P ia4ikW0 | 电子园51单片机学习网5w[Pj"[3y-~R LED背光正电源输入端(+5V) es#z6a^(Wi0 |
2电子园51单片机学习网 H7aB@'qC$mT | K (LED-) X{~6@qtUV0 | 0V电子园51单片机学习网(H1a9p)gB | 电子园51单片机学习网hSu OCt}}zt LED 接地端 |xuZ9K4Wx e0 |
3电子园51单片机学习网:J'G3on4[.x6v#OJ | VSS (I4{&xk@If0 | 0V电子园51单片机学习网#VW[(wY#u | 电子园51单片机学习网\$}A+D,Y m@ 信号地 caFQ%b:]!q0 |
4电子园51单片机学习网|1H[Y,?o&]k | VDD f_ @Us!E{0 | +5V电子园51单片机学习网${HV5k2YA | "zdG-Wo0逻辑和LCD正驱动电源信号地电子园51单片机学习网:P#HXe6j(or5r S |
5电子园51单片机学习网+O$L!U3Vf.\ d:o? | VLCD电子园51单片机学习网dG3F$g-U%E Zv2` | -10V<VLCD<VDD b+BJ d ptV8zV0 | y'C-K.K8Y)^"I%H"S0对比度调节输入(内部负压时空接)电子园51单片机学习网R$Z n{QD |
6 @U7O p!Y1e5et0 | \WR电子园51单片机学习网 t{a'[Z#~,B|(J | L电子园51单片机学习网\7N?f8[ | |oZ7P6G'D3m6Z"I0写信号电子园51单片机学习网4R3X1m9V3o5a!xp |
7电子园51单片机学习网?PX1l_ z | \RD电子园51单片机学习网~u!UjBa9?/X | L AjrIQ"j'sL Er0 | {7F-[d%NRl,kXo0读信号 P9]'A#VesG0 |
8电子园51单片机学习网:}%`j4`^/yP$i | \CE }0l)[U.L1e/O0 | L电子园51单片机学习网Z2|BunB @+nn | 电子园51单片机学习网!t0@jZy@ 片选信号电子园51单片机学习网/k;u&H^'aK,i1? |
9 %y%?&GD&|A0 | C\D {"^ syD+e.y0 | H/L W5X^;w3[`0 | ksd5E$r0指令/数据选择(H: 指令 L:数据)电子园51单片机学习网MW aG)pa%_ |
10电子园51单片机学习网*U:_#OAKX | RES电子园51单片机学习网 b/OHx A0uu | L电子园51单片机学习网o[Y1Y(B5r | 电子园51单片机学习网0t7OGm#r tw\ 复位 ,`'VhfYo7{0 |
11电子园51单片机学习网:d xl$YZ6e2@8n\t | DB0 H#o8x;k2Uq0 | H/L电子园51单片机学习网,RM~0e`C | 电子园51单片机学习网2_jy6tk2b])g 数据总线0 (三态数据总线) &Zj&zwG$K*b0 |
12电子园51单片机学习网"V.A6ul6uU | DB1 9n+yi]EP0 | H/L x:u3i"u:R(x|x6N0 | 电子园51单片机学习网 d l["c ^'G 数据总线1 2o9dx'f$[C8s l2`0 |
13 ;k vP!H0^-r T0 | DB2 l2d(kS!Pd"_0 | H/L电子园51单片机学习网2?%ouqU_ | 电子园51单片机学习网(t)]4Yp1o i!vM/x 数据总线2电子园51单片机学习网(L4X+aA}0?"h |
14电子园51单片机学习网%c lfA:g | DB3电子园51单片机学习网7s:r.D$JF,h3WT"\"{n} | H/L z"jpol A$? C$l0 | F2S%^2IT_q S0数据总线3电子园51单片机学习网:\f uLq4[!?.M#k)X |
15 D#svN[@+Dl:`&t0 | DB4 _pt~ d-r0 | H/L Y6p;\b!E0Z:{o0 | !Q,EM;\]0qu%O ha |0数据总线4电子园51单片机学习网P/K$\#Dj |
16电子园51单片机学习网 @"C(y|#R r\ | DB5 8Z%VF@%TuQ0 | H/L电子园51单片机学习网y`T7Sm1h)m*T | 电子园51单片机学习网9Lt&\B)L/q0t v 数据总线5电子园51单片机学习网4[,SCa} |
17电子园51单片机学习网;H3I;fm)Rx[;D | DB6 3R Z*t#GE&B8Xxi0 | H/L电子园51单片机学习网3YouSHE[5d| | ~ y'_6ZOXsE0数据总线6电子园51单片机学习网$h'`b%L hO |
18 .KeW8j+v Z#_e E0 | DB7电子园51单片机学习网9mS d7Q*d&Qf/r)yK | H/L fqPM.dZ5N0 | p P(B@lN8\{/F0数据总线7 5M GC8p9DR0 |
19电子园51单片机学习网jw'p@I-Q`5` | FS电子园51单片机学习网7Q@'P7xo4R2V2F | H/L电子园51单片机学习网 V!fgc B"W | EC/r zm ]Cr6v"}0字体选择 (H:6X8 点;L:8X8 点,图形方式时接低) x{$C$A \p/h0 |
20 1? @3k&v:co6s6?s0 | VEE :G ^"W#vk0 | -15V -r cf,k2iW0 | "q!CRt r0内部负压输出电子园51单片机学习网e(a&X3c3YR ks |
1.2 YJ240D与单片机的接口电子园51单片机学习网;V5V&kvb"S
图1为单片机和液晶显示器的接口示意图,其中用单片机的P1.2、P1.3来控制液晶模块的片选(CE)和指令/数据选择(C/D);P0口与液晶的8位数据线(P0-P7)相接;读(WR)写(RD)线分别与MCU的读写线相连。
eP} |B01.3 YJ240D的读写时序电子园51单片机学习网%]Q9t S7u#aM&hF#u5o
该液晶模块与MCU的接口采用八位并行数据线,可交换命令和数据。向液晶模块写时,如果C/D为高,表示向液晶模块传输命令;如果C/D为低,表示向液晶模块传输数据。当从液晶读时,C/D必须为高,读出的值为模块内的状态字。
FL~Dv2i,}x0 电子园51单片机学习网m-X.eZ%BY液晶模块的详细命令集可参见T6963C数据手册。
#bd[F+d;k R)C,H zZ1S0&?%T'wV)eT8tE02 字库芯片与单片机的接口
}Dp1_@hD1p0 电子园51单片机学习网k?BRzi;a;P e2.1 汉字的编码标准电子园51单片机学习网o m)y:a4Pnp
电子园51单片机学习网v4U$SPj V/H5S9i为了用0、1代码串表示汉字,规定了汉字的信息交换码:GB 2312-80,简称国标码,共有字符7445个,包括汉字和其他字符。一级汉字3755个,按汉语拼音顺序排列;二级汉字3008个,按部首和笔画排列。其他字符有常用符号、序号、GB1988图形字符集、希腊字符、制表符等。国标码的每一个符号都用两个字节(16位二进制)代码来表示一个汉字。
?^T7JCjx0 电子园51单片机学习网+v9H3B7R]+[E1i1) 国标码:行、列各94(0-93),用先行后列的两个7位二进制数表示。
{&up+K/Obp(k0 电子园51单片机学习网i+^/cj3y-q Xf2X&W2) 区位码:由于二进制国标码表示不很方便,因此汉字也可用十进制区位码表示。区、位各94(1-94),用先区后位的两个2位十进制数表示。电子园51单片机学习网0yVsE{mc W!@;L
电子园51单片机学习网0FxFg{p6D3Y3) 机内码:是计算机内部表示汉字的代码,在微机中多用两字节(最高位为1)代码作为机内码。电子园51单片机学习网u*{4{ E!^ G
3{3s4W!]1PO02.2区位码和机内码的相互转换电子园51单片机学习网5wg+|^5r7Z
电子园51单片机学习网4fcfOrdJ%Y西文系统的交换码和机内码都采用美国标准信息交换码ASCII,用一个字节表示,一般只用低七位,可以表示128可符号。在软件中嵌入的汉字经编译器编译后存放的格式为机内码。区位码和机内码之间的转换关系可概括为:(区位码的十六进制表示)+A0A0H=机内码。以汉字“大”为例,“大”字的区内码的十六进制表示为1453H,加上A0A0H得到机内码为B4F3H。
8[&\ R1tX&|3?8k@0"D{)hLk} p8a"]02.3 汉字字模库电子园51单片机学习网}JV W+ZSC |!W~x
电子园51单片机学习网 rkm(Wd ?汉字的输出是将汉字的笔划离散化,用点阵来表示。点阵的中每个点位只有两种状态:有笔画(1)、无笔画(0)。
{{U%@s#FQ0nnJ?"a"[/x{0描述汉字点阵信息的二进制代码集称为汉字的字模。所有汉字和符号的点阵信息就组成了汉字库。电子园51单片机学习网3BW5^'~ E*QE
W6qN XD3O3pc`Z02.3 混合字符的显示电子园51单片机学习网cR_ p.yU+s A;^
电子园51单片机学习网I#@;C+x5[%g-t在本系统中,每个汉字的显示采用16×16图形点阵方式显示。国标GB2312-80一、二级汉字点阵库存放在一片ROM芯片AT27C040中,每个汉字占用32个字节。当需要显示汉字时,首先根据区码和位码计算出该汉字点阵在ROM中存放的起始地址,然后从此地址连续的取出32个字节的汉字点阵,并写入LCD模块对应的地址中,就可以显示出该汉字。根据汉字区位码和该汉字计算汉字在字库ROM位置的转换关系可概括为:起始地址=(区码×94+位码)×32电子园51单片机学习网Q6v+E7Xq8?v
E6Hl5{[W+tp7`#v0在应用中,常需要汉字和英文字符混合显示,在软件处理时需要判断显示的内容是汉字的编码还是英文字符的编码,如果是汉字编码则根据其机内码计算区位码,并根据区位码计算出该汉字在字模中的起始地址。图3是混合显示的软件流程图。电子园51单片机学习网0PjO vs3b0cT
图3 汉字和英文字符混合显示软件流程图电子园51单片机学习网hy5Mg(A+a7G.kr"i
电子园51单片机学习网4Ej7_Qe2~A*a'qF3 应用实例
![ds/d8t3h`0QJ(y\7BM*j0在某检测设备中,需要给用户显示电流、电压、频率值以及一些事件记录等。用户的命令通过设备的8键键盘输入,显示的内容有汉字、数字和英文字符。
| v"X+l%@+G"J0)_2l@!htmOWd0以下列出了显示汉字、数字和英文字符串部分软件电子园51单片机学习网"A/Hq:v \ V
&}Yar9MK Sj&_0/*-----------------------------------------------------------------------------------------
#`.V,E4C\k;{0 电子园51单片机学习网8oOv^#K/^-Q混合显示一串汉字和英文字符
!FUuAl4r]4t3v/|0{k{T:zf*H!E _0row:行(1-8), column: 列(1-15)电子园51单片机学习网P%~C+o0GGT0_K+Y$O
电子园51单片机学习网 T7^+cV'P[2kstr:字符代码(标准机内码)指针电子园51单片机学习网&qD'TtL#V
电子园51单片机学习网4?#_9`\H:z---------------------------------------------------------------------------------------*/
9by1RqRQJ0%Y-l)}a7\X0void DispStr(unsigned char row, unsigned char column, unsigned char *str)电子园51单片机学习网 j6f5^5J L?F2]
k%K xu\*zZj;i ?0{电子园51单片机学习网g d*DR\SLl!h+pz/]
6@K1{;wL)].@-f0 while (*str)
"j(d*d2bhH0 电子园51单片机学习网F Y(O+IcVQ{电子园51单片机学习网4R}Bt?q
电子园51单片机学习网{8uyV%h?rif (*str > 0xa0) //如果是汉字机内码电子园51单片机学习网Rw3}3QX n)m
电子园51单片机学习网-uE ]Qt+NQK j.PL{电子园51单片机学习网-e1iX;OGv I qn}
电子园51单片机学习网6s {K\"^6T viif (column == 30) //如果是最后一列,则换行电子园51单片机学习网-t.LN;P#w0v/cS q
\5O+Iqu^c J0 {
;o jv"x`j&B$z0 电子园51单片机学习网D%E"tqR wrow ++;电子园51单片机学习网"x$fx r&lM~
电子园51单片机学习网C)N/d`0a z1|hR~column = 1;
-IE6?3r*eW^vC0 电子园51单片机学习网D$v3J`srY2D}
$om/Q It.b|:b0 电子园51单片机学习网dZ*c"s!R(s ]JDispHZ(row, column, str); //显示一个汉字
2f G%c9p.u;Yi"]n0 电子园51单片机学习网!MUrI6AT zYfQcolumn += 2;
_'UGVAa.P3CP+N0 电子园51单片机学习网*K7dg:OQrstr += 2;电子园51单片机学习网;`)T-yP pW wx!H
I(~a X/A0 }
O-@ {!@ to0Q4Z C6E&nV Ca"c+?-sA0 else //如果是英文字符电子园51单片机学习网2?'Q| URp x
E6aCawn5~~0 {
*N;T8f W![(T$m0 电子园51单片机学习网#Zn2sM[ jDispChar(row * 2, column, str); //显示一个英文字符电子园51单片机学习网Hx6K)\k
电子园51单片机学习网Zl2Ug*e)fcolumn++;
)C%MY1a+b*H5u,['F|'oP A0 电子园51单片机学习网+vG{3ZCstr++;电子园51单片机学习网*K)I2GK6Z(A[ l
电子园51单片机学习网b l-Xp7n)_V'a5]}
$R6r;KCN8B4k0 电子园51单片机学习网9Xw6Qf5Z_h}
1RACc)G@'U3V0%H*BF5s[4`-p0/*----------------------------------------------------------------电子园51单片机学习网.EP9c1R1c8G~l)b5H
CJ6V"}0H0 在指定位置显示一个汉字(16*16点阵)电子园51单片机学习网3j(J$A$P4Quz HPYa
7qEe8GkSt0row:行(1-8), column: 列(1-29)电子园51单片机学习网1h4o-hf1J
pN`2qm:p0str:汉字标准机内码指针电子园51单片机学习网,V-ds:]2C'B/}
电子园51单片机学习网u KY}8\)Jk#W*cd?LINE_CHAR = 30 一行的字符数
w2|j D%fZ07BbM6_|3T,I9F0-----------------------------------------------------------------*/电子园51单片机学习网9iY9K v"\,P j8|
F%PC3U/Y0void DispHZ(unsigned char row, unsigned char column, unsigned char *str)
%VoY _N0r#E@~ Z4g0{电子园51单片机学习网(N8g9cz4A)]@-L xy
电子园51单片机学习网a&nSI&t-T eR_unsigned char idata i, hz_buf[32];
"^4b5dfs ~`dj0Ebl!B,?X0 unsigned int StartAddr;
7?.aH7a/rLM?*mT0-r1{8W | T(vB0
d.v FS,b Lv`0 电子园51单片机学习网7Q!t]y@4Gg%E//定位起始行电子园51单片机学习网%f){HM'Q @)l
%nr.JArt5c)j0 StartAddr = (((row - 1) * 16) * LINE_CHAR + (column-1)) + 0x4000;
y|S8W#p4ZgF0`zz"c q6j\)V0 GetMatrix(str, hz_buf);电子园51单片机学习网6Z OR'v/COb,o
电子园51单片机学习网x(@-I8a_7X8Efor (i = 0; i < 16; i++)电子园51单片机学习网&c-}Yl"eVq
电子园51单片机学习网){9[4O!| o6rOo#e{电子园51单片机学习网B.l*W2n%V[)Y
+fKH f$jj0 LCDInData( (unsigned char) (StartAddr) );电子园51单片机学习网1}fY V0L.X@)L E
5^9h[%y ~#\@j0 LCDInData( (unsigned char) (StartAddr>>8) );
1n/z~4dn0c&S9c8w6A0 LCDInCmd(0x24);
z9de*]txf0H\ ? S_;SM0 LCDInData(hz_buf[i * 2]);
O0PdZr8fZ?0S6V(HW'Y#w{0 LCDInCmd(0xc0);电子园51单片机学习网2Y{5e[C
电子园51单片机学习网hU#s'A,dTtbLCDInData(hz_buf[i * 2 + 1]);电子园51单片机学习网4b T"|:i+R%xn'X"E$m
电子园51单片机学习网F!k7m`:Ul8OLCDInCmd(0xc4);
w9b }4c7V$zl`:\0n,vK6I BT*c#F0 StartAddr += LINE_CHAR;
C3`"^[{8^"m G08s*~.w$Y%A.W0|0 }
Jsd4e(f F7| FY0 电子园51单片机学习网vu;v DaEp}
&h7]?j6Of0 电子园51单片机学习网l&|S T}!q/*-----------------------------------------------------------------------------------
ok h(M[[j3O0 电子园51单片机学习网`%TZ{tBP(Q从字库芯片中取汉字字模数据电子园51单片机学习网nRb#T&]ZdZ3Mf B
电子园51单片机学习网*`!YZjR%a.Mls: 汉字标准机内码指针
#[/eE }%n%UZ0 电子园51单片机学习网eb rt.K M!`hz_buf: 存放汉字字模数据缓冲区指针
8r-If d'OG07T`$OWJ e%lN0-------------------------------------------------------------------------------------*/
K {r'lPa)? B(I2]u0 电子园51单片机学习网PY}X!ncK7l4Yvoid GetMatrix(unsigned char *s, unsigned char *hz_buf)电子园51单片机学习网 _xH OR&w!H
电子园51单片机学习网-Z-| A0}tOU| W{电子园51单片机学习网6kxh-Js \9K U
u Tp;oo6L0 unsigned char i ,j, k;电子园51单片机学习网Y$i n.jN*i
电子园51单片机学习网 d,WX{c O7\F^unsigned long address;电子园51单片机学习网0kWq` ?r$y,Z@"u Y
-W f f%ziuN5Z+i0 电子园51单片机学习网x?#jT;p5Y#MOs X
电子园51单片机学习网g{$tYh%~for (k = 0; k < 31; k++)电子园51单片机学习网(qtq4K5ZM,{;jK1H
电子园51单片机学习网|p}k Q v[8DQ{电子园51单片机学习网%dq4s$@RZ-h
R3Ll#pv\B2H0 i = *s - 0xA1; //计算区码
t5| z.DI%]YH0 电子园51单片机学习网wr Kf+k2e^z r)Ytj = *(s + 1) - 0xA1; //计算位码电子园51单片机学习网H4}0A2`!TF
qj*Pv:Oj6j0Q7q0 address = (((unsigned long)i * 94) + j)*32 + k; //计算该汉字在字模芯片中的起始位置
#JA(t#}Fc9XJ(k08`&g dPyP0 电子园51单片机学习网1Jh9Q8j"X8KX
f:Y0|2e9]4@4M0 high_addr = 1;
&O~;S*K \gO w0@%FeD;_o0 P0 = (unsigned char) (address >> 16); //送高位地址电子园51单片机学习网&v-pA~CE {
-Q/|C)p6[2ww4W FS(X0 high_addr = 0;
&eLrn B;y:`5\ b3R)r+e0 电子园51单片机学习网8FM*?/Fb5`L/wP0 = 0xff;
pn};N!]s4T04T"j[+|SeG7z0 zk_cs = 0;电子园51单片机学习网D,j0v~$B8i#VB
4T0h1|wty0 *hz_buf = XBYTE[(unsigned int) address]; //取汉字模数据电子园51单片机学习网-dd&yTm#}
电子园51单片机学习网.S`DT@;?/Vhz_buf++;电子园51单片机学习网%z$L#Sy"^6_c3E
,Cj!U"g/v\B Pf/~0 zk_cs = 1;
2lz+`.Xhj2G07dxJ/iv%u-H9I T ~0 }电子园51单片机学习网4GZJ)Uz6Aj9R)ej)P
T/Q)YDq3si0}电子园51单片机学习网;K)h7B@rbv,z:B
:Po@Q'u,T'v2Y04 结束语电子园51单片机学习网CWZ_7U*us{$I$Oh*W
9t#Xxo:n'i.U0 在图形液晶模块中嵌入中文字库点阵字模芯片,其最大的特点是可以显示所有的一、二级汉字、硬件接口简单、软件编程容易、可混合显示汉字、英文字符和图形。作为人机接口的一个重要部分,可被广泛应用在工业仪器仪表、监控装置、保护装置及汽车等各种领域中。电子园51单片机学习网aa$hUR:F@
,hYKx{05 参考文献电子园51单片机学习网H9E x,WZ%a/|O m1\
2lTQ p6rMO(gbD6c7]0 1 徐爱均彭秀华单片机高级语言C51应用程序设计电子工业出版社2001
,A#s0q9V9x8[0 电子园51单片机学习网8_ r9p}(e co2 莱德电子 YJ240D液晶模块手册
0]AHo [6J0 电子园51单片机学习网fT j3Y!MX1j^3 Toshiba CMOS digital integrated circuit silicon monolithic T6963C dot matrix LCD control LSI, 1997-04-07电子园51单片机学习网M'yX3eQ;W
XQHsK_$}0 4 GB2312-80《信息交换用汉字编码字符集》,1980电子园51单片机学习网 Z+] l#|&W(V\j:E'G
文章评论(0条评论)
登录后参与讨论