單片機系統中漢字顯示論文

時間:2022-03-05 02:10:00

導語:單片機系統中漢字顯示論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

單片機系統中漢字顯示論文

一、硬件組成

本系統中采用香港精電公司的內置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個字符。

根據以上原則,顯示1行漢字的具體程序框圖如圖2所示。

為方便讀者,將已經在實際應用中中通過的匯編子程序列出如下(關于LCD控制器T6963的用戶法請見參考文獻1)。

LCDCOMEQU7FF9H

LCDDATEQU7FF8H

;顯示1行漢字子程序

;漢字語句位置編號DPTR;行號:R6PRHZ:MOV24H,DPH

MOV25H,DPL

PUSHDPH

PUSHDPL

MOVA,DPH;計算頁號

RRA

RRA

ADDA,#9;從第9區開始存放每行字符的機內碼

ORLA,#0F0H

MOVP1,A

LCALLRL245;行號乘以32(每行32個字符)

SETB24H,7;數據地址位于8000H~0FFFFH

MOVDPH,24H

MOVDPL,25H

MOVR0,#0E0H

MOVR7,#30;連續取出30個字符至0E0H內部數據存儲器

PRHZ3:MOVXA,@DPTR

MOV@R0,A

INCR0

INCDPTR

DJNZR7,PRHZ3

MOV1DH,#30;顯示0E0H后的一行字符(共30個)

MOVR5,#0;當前列R5

MOVR0,#0E0H

MOVA,#7FH;是否為ASCII碼?

CLRC

SUBBA,@R0

JCDPHZ1

MOV26H,@R0

INCR0

MOV24H,R6;ASCII碼顯示

MOV25H,R5

LCALLPRASCII

SJMPPRHZ4

DPHZ1:MOV24H,@R0;是漢字則將機內碼送24H25H

INCR0

MOV25H,@R0

INCR0

MOVA,25H

CLRC

SUBBA,#0A1H;機內碼轉換為二進制的區碼和位碼

MOV25H,A

MOVA,24H

CLRC

SUBBA,#0A1H

LCALLDPONHZ;顯示1個漢字

DEC1DH

INCR5

PRHZ4:INCR5

DJNZ1DH,PRHZ5

POPDPL

POPDPH

RET

PR0:MOVDPTR,#LCDCOM;讀狀態

MOVXA,@DPTR

RET

PR01:LCALLPR0;讀、寫一數據前

JNBACC.0,PR01

JNBACC.1,PR01

RET

PR02:LCALLPR0;連續讀前

JNBACC.2,PR02

RET

PR03:LCALLPR0;連續寫前

JNBACC.3,PR02

RET

PR1:LCALLPR01;雙字節參數R2,R3

MOVA,R2

LCALLPR14

PR11:LCALLPR01;單字節參數R3

MOVA,R3

LCALLPR14

PR12:LCALLPR01;無參數指令R4

MOVA,R4

SJMPPR15

PR14:MOVDPTR,#LCDDAT

PR15:MOVX@DPTR,A

RET

RL245:MOVR7,#5;24H25H左移5

RLL1:CLRC

MOVA,25H

RLCA

MOV25H,A

MOVA,24H

RLCA

MOV24H,A

DJNZR7,RLL1

RET

;行位置R6(0~7),列位置R5(0~29),漢字區別24H,位碼25H

DPONHZ:MOVA,24H;顯示1個漢字

MOVB,#94;每區94個漢字

MULAB

ADDA,25H

MOV25H,A

CLRA

ADDCA,B

MOV24H,A

RRA;獲得32KB為1頁的頁號

RRA

ORLA,#0F0H

MOVP1,A;頁號送P1口

LCALLRL245;漢字序號乘以32

SETB24H,7;因為存儲器位于單片機系統的7FFFH~0FFFFH

MOVDPH,24H

MOVDPL,25H

MOVR2,#32;在該位置連續取出32個字節

MOVR1,#0C0H

DPHZ2:MOVXA,@DPTR

INCDPTR

MOV@R1,A

INCR1

DJNZR2,DPHZ2

MOVR1,#0C0H

MOVA,R6;根據行列位置計算LCD指針

MOVB,#16

MULAB

MULB,#30

MULAB

ADDA,R5

MOV25H,A

MOVR2,A

CLRA

ADDCA,B

MOV24H,A

MOVR3,A

MOV26H,#16;將取出的點陣送LCD顯示

PRHZ6:MOVR4,#24H

LCALLPR1;雙字節參數R2,R3

MOVA,@R1

MOVR3,A

INCR1

MOVR4,#0C0H

LCALLPR11;單字節參數R3

MOVA,@R1

MOVR3,A

INCR1

MOVR4,#0C0H

LCALLPR11

MOVA,#30

ADDA,25H

MOVR2,A

CLRA

ADDCA,24H

MOVR3,A

MOV24H,A

DJNZ26H,PRHZ6

RET

注:由于以上程序直接引自下面的應用實例,調用以上程序時請讓寄存器組位于第2區,即R0對應10H。

三、應用實例

我們應用本文介紹的方法成功地進行了某醫療儀器的設計。該設計要求具有完整的中、英文字符提示和漢字處方顯示,并盡可能地為今后的功能擴展和處方修改留有余地。目前儀器中用到的漢字約1200個,語句行為1300行左右,而且用戶認為利用工控PC機設計成本過高,要求盡可能地降低成本。顯然,對于該系統利用傳統的漢字處理方式進行設計雖然能節省一定的存儲空間,但龐大的漢字和語句重新編碼工作卻讓人望而生畏,而且當處方修改須要用到新的漢字時相當麻煩。我們利用8031單片機系統和本文介紹的方法進行設計,整個硬件電路和底層程序設計只用了1周的時間,大大地縮短了開周期。而且由于本系統可調用所有的ASCII碼和全部漢字庫,所以對于功能的擴展和處方的修改十分方便。