📄 中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.htm
字号:
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/PIC.htm">PIC单片机系列</A>
</SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/AVR.htm">AVR单片机系列</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/keil.htm">Keil
uVision2教程与典型应用设计</A> </SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/gongchengyy.htm">单片机在工程中的应用</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11></SPAN> <SPAN class=style1><A
href="http://www.tengdamc.com/download/other.htm">其它全部</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1><IMG height=11
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/arrow2.gif"
width=20>分类文章</SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/lunwen.htm">单片机毕业设计论文</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/chuankou.htm">串行通讯</A></SPAN></TD></TR>
<TR>
<TD height=20><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/shiyanjc.htm">单片机实验及实践教程</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/jishuwz.htm">单片机学习及经验技巧文章</A></SPAN></TD></TR>
<TR>
<TD><SPAN class=style1> <IMG height=10
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/button.gif"
width=11> <A
href="http://www.tengdamc.com/download/danpianjikf.htm">单片机开发应用文章</A></SPAN></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top borderColor=#f7f3f7 bgColor=#f7f3f7 height=22><IMG
height=40
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/chanpin.gif"
width=176></TD></TR>
<TR>
<TD vAlign=top borderColor=#f7f3f7 bgColor=#f3f3f3 height=44><SPAN
class=style1>· <A
href="http://www.tengdamc.com/chanpinxx/TMC101/tmc101.htm"
target=_blank>TMC101单片机编程器采用ISP下载模式,USB供电,支持ATMEL公司AT89S系列51单片机
<BR></A><BR><A
href="http://www.tengdamc.com/chanpinxx/TMC401/TMC401.htm"
target=_blank><BR></A>· <A
href="http://www.tengdamc.com/chanpinxx/TMC801/TMC801.htm"
target=_blank>TMC801芯片开发板集成下载和实板功能,支持ATTICE公司SPLSI1000系列CPLD芯片</A></SPAN></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top align=middle width=567>
<DIV align=center><IMG height=65
src="E:\danpianji\中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files\download(1).gif"
width=551></DIV></TD></TR>
<TR>
<TD vAlign=top align=middle><SPAN
class=style23>部分内容收集于网络,如有侵犯您的权益请来信告知,我们会第一时间进行处理,谢谢! </SPAN></TD></TR>
<TR>
<TD vAlign=top><SPAN class=style1></SPAN><!-- InstanceBeginEditable name="2" -->
<TABLE borderColor=#ffffff cellSpacing=0 width="90%" align=center
border=1>
<TBODY>
<TR>
<TD>
<DIV align=center>
<P class=style24>单片机系统中的汉字显示 <BR><BR></P></DIV></TD></TR>
<TR>
<TD>
<P class=style1 align=center> </P>
<P class=style1><STRONG>摘要:
</STRONG>需要显示的汉字较多时,单片机系统中的汉字编码非常繁琐。本文介绍一种直接利用PC机的汉字内码作为单片机系统的汉字编码,以简化系统的设计。
</P>
<P class=style1><STRONG>关键词: </STRONG>单片机 液晶显示器 29F040 汉字显示 </P>
<P class=style1><STRONG>引言 </STRONG></P>
<P
class=style1> 在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。针对这种情况,本文提出了一种十分简单的方式——直接利用PC机的汉字内码作为单片机系统的编码。下面以8031单片机系统为例阐述如下:
</P>
<P class=style1><STRONG>一、硬件组成 </STRONG></P>
<P
class=style1> 本系统中采用香港精电公司的内置T6963控制器[1]的240128T点阵图形液晶显示器。该显示器1行为240点,能容纳16×16点阵的汉字15个,总列数为128点,能显示8行汉字。为了使用MCU操作可使用1片512KB的存储器(如本系统中的29F040)用来存储全部的国标16×16点阵汉辽、8×16的ASCII码点阵数据以及汉字语句编码数据。为了降低成本和减小体积,对于速度要求不是很高的场合也可采用大容量的串行数据存储器,如AT45DB041B。具体的硬件控制电路如图1所示(与汉字显示无关的电路略)。
</P>
<P
class=style1> 由于29F040的容量为512KB,而5031微控制器只能管理64KB的数据间,所以可将29F040分成16页,每页32KB,占单片机系统数据空间的8000H~0FFFFH(剩余32KB为单片机系统的其他存储器和外设)。页码由单片机的P1.0~P1.3选择。液晶显示器的地址为7FF8H~7FF9H。</P>
<P class=style1 align=center><STRONG><BR><IMG height=339
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/hanzi01.gif"
width=549></STRONG></P>
<P class=style1><STRONG>二、汉字显示原理及软件设计 </STRONG></P>
<P
class=style1> UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。
</P>
<P
class=style1> 在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。
</P>
<P
class=style1> 例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1)
×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。 </P>
<P
class=style1> 在本单片机系统中,起始地址的高4位为页号,送P1口,低15位为数据区地址,送指针DPTR。利用“MOVX”指令连续取32个字节送LCD的相应位置,就能实现正确的汉字显示。
</P>
<P
class=style1> ASCII码的显示与汉字的显示基本原理相同。在文件ASC16中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,只是每个ASCII码在文本文件中只占1个字节且小于80H,而且ASCII码为8×16点阵,所以在ASCII16文件中,每个ASCII码的点阵也只占16个字节。
</P>
<P
class=style1> 首先提取16×16的国标汉字点阵和8×16的ASCII码点阵(如UCDOS软件中的HZK16和ASC16)并将其直接写入29F040。其中HZK16(共256KB)点0~7页。为了便于编程,ASC16虽然只有4KB,也单独占用第8页。其余剩下的空间用来存储汉字语句的编码。
</P>
<P
class=style1> 由于240×128点阵的LED显示器每个只能显示15个汉字(16×16点阵汉字),即30个字节。所以可将需要显示的语句按30个字节为1行进行编写,不足30个字符的则补空格。在PC机上进行录入时,每行30个字符再加上回车键和换行符,实占32个字符。所录入的语句以纯文本形式存盘,再将该文本文件以二进制的形式写入29F040的第9页。那么,以后根据需要显示的语句行号便可以进行正确的显示。此,作者推出荐使用DOS版本的WPS软件的“编辑非文收文件”功能,它能清楚地显示每行是否有30个字符。
</P>
<P class=style1> 根据以上原则,显示1行汉字的具体程序框图如图2所示。 </P>
<P class=style1 align=center><IMG height=484
src="中国腾达测控科技有限公司-学习下载-单片机开发应用文章-单片机系统中的汉字显示.files/hanzi02.gif"
width=550></P>
<P
class=style1> 为方便读者,将已经在实际应用中中通过的汇编子程序列出如下(关于LCD控制器T6963的用户法请见参考文献1)。
</P>
<P class=style1>LCDCOM EQU 7FF9H </P>
<P class=style1>LCDDAT EQU 7FF8H </P>
<P class=style1>;显示1行汉字子程序 </P>
<P class=style1>;汉字语句位置编号DPTR;行号:R6 PRHZ:MOV 24H,DPH </P>
<P class=style1>MOV 25H,DPL </P>
<P class=style1>PUSH DPH </P>
<P class=style1>PUSH DPL </P>
<P class=style1>MOV A,DPH ;计算页号 </P>
<P class=style1>RR A </P>
<P class=style1>RR A </P>
<P class=style1>ADD A,#9;从第9区开始存放每行字符的机内码 </P>
<P class=style1>ORL A,#0F0H </P>
<P class=style1>MOV P1,A </P>
<P class=style1>LCALL RL245 ;行号乘以32(每行32个字符) </P>
<P class=style1>SETB 24H,7 ;数据地址位于8000H~0FFFFH </P>
<P class=style1>MOV DPH,24H </P>
<P class=style1>MOV DPL,25H </P>
<P class=style1>MOV R0,#0E0H </P>
<P class=style1>MOV R7,#30 ;连续取出30个字符至0E0H内部数据存储器 </P>
<P class=style1>PRHZ3:MOVX A,@DPTR </P>
<P class=style1>MOV @R0,A </P>
<P class=style1>INC R0 </P>
<P class=style1>INC DPTR </P>
<P class=style1>DJNZ R7,PRHZ3 </P>
<P class=style1>MOV 1DH,#30 ;显示0E0H后的一行字符(共30个) </P>
<P class=style1>MOV R5,#0 ;当前列R5 </P>
<P class=style1>MOV R0,#0E0H </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -