單片機(jī)系統(tǒng)中漢字顯示論文
時(shí)間:2022-03-05 02:10:00
導(dǎo)語(yǔ):?jiǎn)纹瑱C(jī)系統(tǒng)中漢字顯示論文一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
一、硬件組成
本系統(tǒng)中采用香港精電公司的內(nèi)置T6963控制器[1]的240128T點(diǎn)陣圖形液晶顯示器。該顯示器1行為240點(diǎn),能容納16×16點(diǎn)陣的漢字15個(gè),總列數(shù)為128點(diǎn),能顯示8行漢字。為了使用MCU操作可使用1片512KB的存儲(chǔ)器(如本系統(tǒng)中的29F040)用來(lái)存儲(chǔ)全部的國(guó)標(biāo)16×16點(diǎn)陣漢遼、8×16的ASCII碼點(diǎn)陣數(shù)據(jù)以及漢字語(yǔ)句編碼數(shù)據(jù)。為了降低成本和減小體積,對(duì)于速度要求不是很高的場(chǎng)合也可采用大容量的串行數(shù)據(jù)存儲(chǔ)器,如AT45DB041B。具體的硬件控制電路如圖1所示(與漢字顯示無(wú)關(guān)的電路略)。
由于29F040的容量為512KB,而5031微控制器只能管理64KB的數(shù)據(jù)間,所以可將29F040分成16頁(yè),每頁(yè)32KB,占單片機(jī)系統(tǒng)數(shù)據(jù)空間的8000H~0FFFFH(剩余32KB為單片機(jī)系統(tǒng)的其他存儲(chǔ)器和外設(shè))。頁(yè)碼由單片機(jī)的P1.0~P1.3選擇。液晶顯示器的地址為7FF8H~7FF9H。
UCDOS軟件中的文件HZK16和文件ASC16分別為16×16的國(guó)標(biāo)漢字點(diǎn)陣文件和8×16的ASCII碼點(diǎn)陣文件,以二進(jìn)制格式存儲(chǔ)。在文件HZK16中,按漢字區(qū)位碼從小到大依次存有國(guó)標(biāo)區(qū)位碼表中的所有漢字,每個(gè)漢字占用32個(gè)字節(jié),每個(gè)區(qū)為94個(gè)漢字。在文件ASC16中按ASCII碼從小到大依次存有8×16的ASCII碼點(diǎn)陣,每個(gè)ASCII碼占用16個(gè)字節(jié)。
在PC機(jī)的文本文件中,漢字是以機(jī)內(nèi)碼的形式存儲(chǔ)的,每個(gè)漢字占用兩個(gè)字節(jié):第一個(gè)字節(jié)為區(qū)碼,為了與ASCII碼區(qū)別,范圍從十六進(jìn)制的0A1H開始(小于80H的為ASCII碼字符),對(duì)應(yīng)區(qū)位碼中區(qū)碼的第一區(qū);第二個(gè)字節(jié)為位碼,范圍也是從0A1H開始,對(duì)應(yīng)某區(qū)中的第一個(gè)位碼。這樣,將漢字機(jī)內(nèi)碼減去0A0AH就得該漢字的區(qū)位碼。
例如漢字“房”的機(jī)內(nèi)碼為十六進(jìn)制的“B7BF”,其中“B7”表示區(qū)碼,“BF”表示位碼。所以“房”的區(qū)位碼為0B7BFH-0A0A0H=171FH。將區(qū)碼和位碼分別轉(zhuǎn)換為十進(jìn)制得漢字“房”的區(qū)位碼為“2331”,即“房”的點(diǎn)陣位于第23區(qū)的第31個(gè)字的位置,相當(dāng)于在文件HZK16中的位置為第32×[(23-1)×94+(31-1)]=67136B以后的32個(gè)字節(jié)為“房”的顯示點(diǎn)陣。
在本單片機(jī)系統(tǒng)中,起始地址的高4位為頁(yè)號(hào),送P1口,低15位為數(shù)據(jù)區(qū)地址,送指針DPTR。利用“MOVX”指令連續(xù)取32個(gè)字節(jié)送LCD的相應(yīng)位置,就能實(shí)現(xiàn)正確的漢字顯示。
ASCII碼的顯示與漢字的顯示基本原理相同。在文件ASC16中不存在機(jī)內(nèi)碼的問題,其顯示點(diǎn)陣直接按ASCII碼從小到大依次排列,只是每個(gè)ASCII碼在文本文件中只占1個(gè)字節(jié)且小于80H,而且ASCII碼為8×16點(diǎn)陣,所以在ASCII16文件中,每個(gè)ASCII碼的點(diǎn)陣也只占16個(gè)字節(jié)。
首先提取16×16的國(guó)標(biāo)漢字點(diǎn)陣和8×16的ASCII碼點(diǎn)陣(如UCDOS軟件中的HZK16和ASC16)并將其直接寫入29F040。其中HZK16(共256KB)點(diǎn)0~7頁(yè)。為了便于編程,ASC16雖然只有4KB,也單獨(dú)占用第8頁(yè)。其余剩下的空間用來(lái)存儲(chǔ)漢字語(yǔ)句的編碼。
由于240×128點(diǎn)陣的LED顯示器每個(gè)只能顯示15個(gè)漢字(16×16點(diǎn)陣漢字),即30個(gè)字節(jié)。所以可將需要顯示的語(yǔ)句按30個(gè)字節(jié)為1行進(jìn)行編寫,不足30個(gè)字符的則補(bǔ)空格。在PC機(jī)上進(jìn)行錄入時(shí),每行30個(gè)字符再加上回車鍵和換行符,實(shí)占32個(gè)字符。所錄入的語(yǔ)句以純文本形式存盤,再將該文本文件以二進(jìn)制的形式寫入29F040的第9頁(yè)。那么,以后根據(jù)需要顯示的語(yǔ)句行號(hào)便可以進(jìn)行正確的顯示。此,作者推出薦使用DOS版本的WPS軟件的“編輯非文收文件”功能,它能清楚地顯示每行是否有30個(gè)字符。
根據(jù)以上原則,顯示1行漢字的具體程序框圖如圖2所示。
為方便讀者,將已經(jīng)在實(shí)際應(yīng)用中中通過的匯編子程序列出如下(關(guān)于LCD控制器T6963的用戶法請(qǐng)見參考文獻(xiàn)1)。
LCDCOMEQU7FF9H
LCDDATEQU7FF8H
;顯示1行漢字子程序
;漢字語(yǔ)句位置編號(hào)DPTR;行號(hào):R6PRHZ:MOV24H,DPH
MOV25H,DPL
PUSHDPH
PUSHDPL
MOVA,DPH;計(jì)算頁(yè)號(hào)
RRA
RRA
ADDA,#9;從第9區(qū)開始存放每行字符的機(jī)內(nèi)碼
ORLA,#0F0H
MOVP1,A
LCALLRL245;行號(hào)乘以32(每行32個(gè)字符)
SETB24H,7;數(shù)據(jù)地址位于8000H~0FFFFH
MOVDPH,24H
MOVDPL,25H
MOVR0,#0E0H
MOVR7,#30;連續(xù)取出30個(gè)字符至0E0H內(nèi)部數(shù)據(jù)存儲(chǔ)器
PRHZ3:MOVXA,@DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR7,PRHZ3
MOV1DH,#30;顯示0E0H后的一行字符(共30個(gè))
MOVR5,#0;當(dāng)前列R5
MOVR0,#0E0H
MOVA,#7FH;是否為ASCII碼?
CLRC
SUBBA,@R0
JCDPHZ1
MOV26H,@R0
INCR0
MOV24H,R6;ASCII碼顯示
MOV25H,R5
LCALLPRASCII
SJMPPRHZ4
DPHZ1:MOV24H,@R0;是漢字則將機(jī)內(nèi)碼送24H25H
INCR0
MOV25H,@R0
INCR0
MOVA,25H
CLRC
SUBBA,#0A1H;機(jī)內(nèi)碼轉(zhuǎn)換為二進(jìn)制的區(qū)碼和位碼
MOV25H,A
MOVA,24H
CLRC
SUBBA,#0A1H
LCALLDPONHZ;顯示1個(gè)漢字
DEC1DH
INCR5
PRHZ4:INCR5
DJNZ1DH,PRHZ5
POPDPL
POPDPH
RET
PR0:MOVDPTR,#LCDCOM;讀狀態(tài)
MOVXA,@DPTR
RET
PR01:LCALLPR0;讀、寫一數(shù)據(jù)前
JNBACC.0,PR01
JNBACC.1,PR01
RET
PR02:LCALLPR0;連續(xù)讀前
JNBACC.2,PR02
RET
PR03:LCALLPR0;連續(xù)寫前
JNBACC.3,PR02
RET
PR1:LCALLPR01;雙字節(jié)參數(shù)R2,R3
MOVA,R2
LCALLPR14
PR11:LCALLPR01;單字節(jié)參數(shù)R3
MOVA,R3
LCALLPR14
PR12:LCALLPR01;無(wú)參數(shù)指令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),漢字區(qū)別24H,位碼25H
DPONHZ:MOVA,24H;顯示1個(gè)漢字
MOVB,#94;每區(qū)94個(gè)漢字
MULAB
ADDA,25H
MOV25H,A
CLRA
ADDCA,B
MOV24H,A
RRA;獲得32KB為1頁(yè)的頁(yè)號(hào)
RRA
ORLA,#0F0H
MOVP1,A;頁(yè)號(hào)送P1口
LCALLRL245;漢字序號(hào)乘以32
SETB24H,7;因?yàn)榇鎯?chǔ)器位于單片機(jī)系統(tǒng)的7FFFH~0FFFFH
MOVDPH,24H
MOVDPL,25H
MOVR2,#32;在該位置連續(xù)取出32個(gè)字節(jié)
MOVR1,#0C0H
DPHZ2:MOVXA,@DPTR
INCDPTR
MOV@R1,A
INCR1
DJNZR2,DPHZ2
MOVR1,#0C0H
MOVA,R6;根據(jù)行列位置計(jì)算LCD指針
MOVB,#16
MULAB
MULB,#30
MULAB
ADDA,R5
MOV25H,A
MOVR2,A
CLRA
ADDCA,B
MOV24H,A
MOVR3,A
MOV26H,#16;將取出的點(diǎn)陣送LCD顯示
PRHZ6:MOVR4,#24H
LCALLPR1;雙字節(jié)參數(shù)R2,R3
MOVA,@R1
MOVR3,A
INCR1
MOVR4,#0C0H
LCALLPR11;單字節(jié)參數(shù)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
注:由于以上程序直接引自下面的應(yīng)用實(shí)例,調(diào)用以上程序時(shí)請(qǐng)讓寄存器組位于第2區(qū),即R0對(duì)應(yīng)10H。
三、應(yīng)用實(shí)例
我們應(yīng)用本文介紹的方法成功地進(jìn)行了某醫(yī)療儀器的設(shè)計(jì)。該設(shè)計(jì)要求具有完整的中、英文字符提示和漢字處方顯示,并盡可能地為今后的功能擴(kuò)展和處方修改留有余地。目前儀器中用到的漢字約1200個(gè),語(yǔ)句行為1300行左右,而且用戶認(rèn)為利用工控PC機(jī)設(shè)計(jì)成本過高,要求盡可能地降低成本。顯然,對(duì)于該系統(tǒng)利用傳統(tǒng)的漢字處理方式進(jìn)行設(shè)計(jì)雖然能節(jié)省一定的存儲(chǔ)空間,但龐大的漢字和語(yǔ)句重新編碼工作卻讓人望而生畏,而且當(dāng)處方修改須要用到新的漢字時(shí)相當(dāng)麻煩。我們利用8031單片機(jī)系統(tǒng)和本文介紹的方法進(jìn)行設(shè)計(jì),整個(gè)硬件電路和底層程序設(shè)計(jì)只用了1周的時(shí)間,大大地縮短了開周期。而且由于本系統(tǒng)可調(diào)用所有的ASCII碼和全部漢字庫(kù),所以對(duì)于功能的擴(kuò)展和處方的修改十分方便。
- 上一篇:電話報(bào)警器研究論文
- 下一篇:數(shù)字觸發(fā)器研究論文
熱門標(biāo)簽
單片機(jī)應(yīng)用 單片機(jī) 單片機(jī)溫度控制系統(tǒng) 單片機(jī)系統(tǒng) 單片開關(guān)電源 單片 單片開關(guān) 心理培訓(xùn) 人文科學(xué)概論