微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机系统中的汉字显示解决方案

单片机系统中的汉字显示解决方案

时间:07-02 来源:互联网 点击:

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码和全部汉字库,所以对于功能的扩展和处方的修改十分方便。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top