单片机系统中的汉字显示

发布者:MysticalSoul最新更新时间:2011-12-28 关键字:单片机系统  汉字显示 手机看文章 扫描二维码
随时随地手机看文章

引言

在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。针对这种情况,本文提出了一种十分简单的方式——直接利用PC机的汉字内码作为单片机系统的编码。下面以8051单片机系统为例阐述如下:

一、硬件组成

本系统中采用香港精电公司的内置T6963控制器[1]的240128T点阵图形液晶显示器。该显示器1行为240点,能容纳16×16点阵的汉字15个,总列数为128点,能显示8行汉字。为了使用MCU操作可使用1片512KB的存储器(如本系统中的29F040)用来存储全部的国标16×16点阵汉辽、8×16的ASCII码点阵数据以及汉字语句编码数据。为了降低成本和减小体积,对于速度要求不是很高的场合也可采用大容量的串行数据存储器,如AT45DB041B。具体的硬件控制电路如图1所示(与汉字显示无关的电路略)。

由于29F040的容量为512KB,而5031微控制器只能管理64KB的数据间,所以可将29F040分成16页,每页32KB,占单片机系统数据空间的8000H~0FFFFH(剩余32KB为单片机系统的其他存储器和外设)。页码由单片机的P1.0~P1.3选择。液晶显示器的地址为7FF8H~7FF9H。

二、汉字显示原理及软件设计

UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。在文件ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。

在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。

例如汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。

在本单片机系统中,起始地址的高4位为页号,送P1口,低15位为数据区地址,送指针DPTR。利用“MOVX”指令连续取32个字节送LCD的相应位置,就能实现正确的汉字显示。

ASCII码的显示与汉字的显示基本原理相同。在文件ASC16中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,只是每个ASCII码在文本文件中只占1个字节且小于80H,而且ASCII码为8×16点阵,所以在ASCII16文件中,每个ASCII码的点阵也只占16个字节。

首先提取16×16的国标汉字点阵和8×16的ASCII码点阵(如UCDOS软件中的HZK16和ASC16)并将其直接写入29F040。其中HZK16(共256KB)点0~7页。为了便于编程,ASC16虽然只有4KB,也单独占用第8页。其余剩下的空间用来存储汉字语句的编码。

由于240×128点阵的LED显示器每个只能显示15个汉字(16×16点阵汉字),即30个字节。所以可将需要显示的语句按30个字节为1行进行编写,不足30个字符的则补空格。在PC机上进行录入时,每行30个字符再加上回车键和换行符,实占32个字符。所录入的语句以纯文本形式存盘,再将该文本文件以二进制的形式写入29F040的第9页。那么,以后根据需要显示的语句行号便可以进行正确的显示。此,作者推出荐使用DOS版本的WPS软件的“编辑非文收文件”功能,它能清楚地显示每行是否有30个字符

为方便读者,将已经在实际应用中中通过的汇编子程序列出如下(关于LCD控制器T6963的用户法请见参考文献1)。


LCDCOM EQU 7FF9H

LCDDAT EQU 7FF8H

;显示1行汉字子程序

;汉字语句位置编号DPTR;行号:R6 PRHZ:MOV 24H,DPH

MOV 25H,DPL

PUSH DPH

PUSH DPL

MOV A,DPH ;计算页号

RR A

RR A

ADD A,#9;从第9区开始存放每行字符的机内码

ORL A,#0F0H

MOV P1,A

LCALL RL245 ;行号乘以32(每行32个字符)

SETB 24H,7 ;数据地址位于8000H~0FFFFH

MOV DPH,24H

MOV DPL,25H

MOV R0,#0E0H

MOV R7,#30 ;连续取出30个字符至0E0H内部数据存储器

PRHZ3:MOVX A,@DPTR

MOV @R0,A

INC R0

INC DPTR

DJNZ R7,PRHZ3

MOV 1DH,#30 ;显示0E0H后的一行字符(共30个)

MOV R5,#0 ;当前列R5

MOV R0,#0E0H

MOV A,#7FH ;是否为ASCII码?

CLR C

SUBB A,@R0

JC DPHZ1

MOV 26H,@R0

INC R0

MOV 24H,R6 ;ASCII码显示

MOV 25H,R5

LCALL PRASCII

SJMP PRHZ4

DPHZ1:MOV 24H,@R0 ;是汉字则将机内码送24H25H

INC R0

MOV 25H,@R0

INC R0

MOV A,25H

CLR C

SUBB A,#0A1H ;机内码转换为二进制的区码和位码

MOV 25H,A

MOV A,24H

CLR C

SUBB A,#0A1H

LCALLDPONHZ ;显示1个汉字

DEC 1DH

INC R5

PRHZ4:INC R5

DJNZ 1DH,PRHZ5

POP DPL

POP DPH

RET

PR0:MOV DPTR,#LCDCOM ;读状态

MOVX A,@DPTR

RET

PR01:LCALLPR0 ;读、写一数据前

JNB ACC.0,PR01

JNB ACC.1,PR01

RET

PR02:LCALL PR0 ;连续读前

JNB ACC.2,PR02

RET

PR03:LCALL PR0 ;连续写前

JNB ACC.3,PR02

RET

PR1:LCALL PR01 ;双字节参数R2,R3

MOV A,R2

LCALL PR14

PR11:LCALL PR01 ;单字节参数R3

MOV A,R3

LCALL PR14

PR12:LCALL PR01 ;无参数指令R4

MOV A,R4

SJMP PR15

PR14:MOV DPTR,#LCDDAT

PR15:MOVX @DPTR,A

RET

RL245:MOV R7,#5 ;24H25H左移5

RLL1:CLR C

MOV A,25H

RLC A

MOV 25H,A

MOV A,24H

RLC A

MOV 24H,A

DJNZ R7,RLL1

RET

;行位置R6(0~7),列位置R5(0~29),汉字区别24H,位码25H

DPONHZ:MOV A,24H ;显示1个汉字

MOV B,#94 ;每区94个汉字

MUL AB

ADD A,25H

MOV 25H,A

CLR A

ADDC A,B

MOV 24H,A

RR A ;获得32KB为1页的页号

RR A

ORL A,#0F0H

MOV P1,A ;页号送P1口

LCALL RL245 ;汉字序号乘以32

SETB 24H,7 ;因为存储器位于单片机系统的7FFFH~0FFFFH

MOV DPH,24H

MOV DPL,25H

MOV R2,#32 ;在该位置连续取出32个字节

MOV R1,#0C0H

DPHZ2:MOVX A,@DPTR

INC DPTR

MOV @R1,A

INC R1

DJNZ R2,DPHZ2

MOV R1,#0C0H

MOV A,R6 ;根据行列位置计算LCD指针

MOV B,#16

MUL AB

MUL B,#30

MUL AB

ADD A,R5

MOV 25H,A

MOV R2,A

CLR A

ADDC A,B

MOV 24H,A

MOV R3,A

MOV 26H,#16 ;将取出的点阵送LCD显示

PRHZ6:MOV R4,#24H

LCALL PR1 ;双字节参数R2,R3

MOV A,@R1

MOV R3,A

INC R1

MOV R4,#0C0H

LCALL PR11 ;单字节参数R3

MOV A,@R1

MOV R3,A

INC R1

MOV R4,#0C0H

LCALL PR11

MOV A,#30

ADD A,25H

MOV R2,A

CLR A

ADDC A,24H

MOV R3,A

MOV 24H,A

DJNZ 26H,PRHZ6

RET

注:由于以上程序直接引自下面的应用实例,调用以上程序时请让寄存器组位于第2区,即R0对应10H。

三、应用实例

我们应用本文介绍的方法成功地进行了某医疗仪器的设计。该设计要求具有完整的中、英文字符提示和汉字处方显示,并尽可能地为今后的功能扩展和处方修改留有余地。目前仪器中用到的汉字约1200个,语句行为1300行左右,而且用户认为利用工控PC机设计成本过高,要求尽可能地降低成本。显然,对于该系统利用传统的汉字处理方式进行设计虽然能节省一定的存储空间,但庞大的汉字和语句重新编码工作却让人望而生畏,而且当处方修改须要用到新的汉字时相当麻烦。我们利用8051单片机系统和本文介绍的方法进行设计,整个硬件电路和底层程序设计只用了1周的时间,大大地缩短了开周期。而且由于本系统可调用所有的ASCII码和全部汉字库,所以对于功能的扩展和处方的修改十分方便。

 

关键字:单片机系统  汉字显示 引用地址:单片机系统中的汉字显示

上一篇:分时操作系统思想在单片机编程中的应用实现
下一篇:基于单片机高精度温度测量的补偿方法

推荐阅读最新更新时间:2024-03-16 12:49

单片机LCD显示汉字程序
S_I EQU P1.5 ;内容发送 SCK EQU P1.7 ;串行CP端 RCK EQU P1.6 ;输出CP端 EN EQU P1.4 ;EN为138使能端.高电平关闭显示;低电平显示 ;*********************单片机LCD显示汉字程序-汇编语言编写**************************** ;*********************http://www.51hei.com原创***************************** ORG 0000H LJMP MAIN ORG 0100H MAIN: SETB EN
[单片机]
单片机系统中的汉字显示解决方案
引言 在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。通常的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时刚需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示。在这种显示方式中,如果使用的流字数量较大或语句较多时,利用汉字的新编码组成语句将是一件十分繁琐而枯燥的工作。针对这种情况,本文提出了一种十分简单的方式——直接利用PC机的汉字内码作为单片机系统的编码。下面以8051单片机系统为例阐述如下: 一、硬件组成 本系统中采用香港精电公司的内置T6963控制器 的240128T点阵图形液晶显示器。该
[单片机]
<font color='red'>单片机系统</font>中的<font color='red'>汉字</font><font color='red'>显示</font>解决方案
基于AT89C51单片机的LED汉字点阵滚动显示屏设计
LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图1所示。其中,
[单片机]
基于AT89C51单片机的LED<font color='red'>汉字</font>点阵滚动<font color='red'>显示</font>屏设计
红外遥控器信号的接收和转发
红外遥控在家电产品中有广泛应用,但各产生的遥控器不能相互兼容。目前市场上常见的万能遥控器只能对某几种产品进行控制,不是真正的“万能”,而且不能对新上市的产品进行控制。本文介绍一种用单片机对红外遥控器信号接收和转发的方法,由于只关心发射信号波形中的高低电平的宽度,不管其如何编码,因此可以用来实现自学习万能遥控器。 一、红外信号的接收和波形测量 所有红外遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。如果直接对已调波进行测量,由于单片机的指令周期是微秒(μs)级,而已调波的脉宽只有20多μs,会产生很大的误差。因此先要对已调波进行解调,对解调后的波形进行测量。     红外遥控接收芯片CX2
[单片机]
红外遥控器信号的接收和转发
单片机系统中LED显示驱动电路的研究
近年来,单片机系统以其体积小、功能强、扩展灵活、使用方便等优点,逐渐渗透到各行业的工程实际应用中。而LED显示电路就像单片机系统的眼睛,实时地向人们传递着系统工作的各种状态信息和处理结果。因此,高效、方便的LED显示驱动电路是构成完善的单片机系统必不可少的元素。常用的LED显示驱动电路有并行译码方式、串行—并行转换方式、显示驱动接口芯片方式等。下面分别对这几种方式进行讨论,并给出显示驱动芯片MAX7219的应用实例。 并行译码显示方式 图 1为单片机89C2051输出显示的一个例子,4位BCD码数据从其P1.0~P1.3并行输出,经7段LED显示驱动电路CD4511译码后驱动LED 显示,这样只需向P1.0~P1.
[单片机]
<font color='red'>单片机系统</font>中LED<font color='red'>显示</font>驱动电路的研究
最小单片机系统
  MCS-51系列是由INTEL公司于1980年所开发的8位单片机系列,最初的产品为带内部ROM的8051和不带内部ROM的8031。随着MCS-51系列单片机用户的增加,INTEL公司推出了带内部EPROM的8751和扩展功能的8032、8052、8752,同时其他公司也推出了在MCS-51单片机内核基础上设计的产品,如ATMEL的带FLASH MEMORY 的89C51、89C52,带在系统编程(ISP)接口的89S51、89S52。8031的内核还被集成在诸如智能IC卡一类的集成电路中。MCS-51系列的微控制器以其良好的可扩展性被广泛地应用。   MCS-51单片机具有4个8位的端口,分别为P0、P1、P2、P3。P0、P
[单片机]
最小<font color='red'>单片机系统</font>
基于单片机的智能终端中汉字显示的处理
引言 近年来,以单片机以及嵌入式系统平台为基础的各种智能终端广泛应用于各行各业的专用设备和产品中,也将逐渐渗透到家用电器和各种消费类电子产品中。 单片机以其价格低廉、技术成熟而广泛应用于各种低端产品之中,但是由于单片机的寻址能力有限,限定了其最大的存储空间。比如最常用的MCS-51单片机,其直接寻址的数据存储空间为64k字节,如果通过扩展来得到更大的存储空间,既增加了系统成本,也为数据读取操作带来了不便(对扩展区间的访问要通过端口操作实现)。所以在单片机系统的设计中,存储空间的大小是一个很重要的因素。 在PC机上的汉字显示,是来自存储在PC机上的汉字库。汉字库中的汉字以点阵形式组成。如果以一个16x16点阵的汉字库作为
[单片机]
单片机系统常用软件抗干扰措施
单片机的可靠性设计是一项系统工程,单片机系统的可靠性必须从软件、硬件以及结构设计等方面全面考虑。硬件系统的可靠性设计是单片机系统可靠性的根本,而软件系统的可靠性设计起到抑制外来干扰的作用。软件系统的可靠性设计的主要方法有:开机自检、软件陷阱(进行程序“跑飞”检测)、设置程序运行状态标记、输出端口刷新、输入多次采样、软件“看门狗”等。通过软件系统的可靠性设计,达到最大限度地降低干扰对系统工作的影响,确保单片机及时发现因干扰导致程序出现的错误,并使系统恢复到正常工作状态或及时报警的目的。   一、开机自检 开机后首先对单片机系统的硬件及软件状态进行检测,一旦发现不正常,就进行相应的处理。开机自检程序通常包括对RAM、ROM、I/O口
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved