當(dāng)前位置:首頁(yè) > 電源 > 數(shù)字電源
[導(dǎo)讀]引言在現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來(lái)越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字。通常的漢字顯示方式是先根據(jù)所需要的漢字提取漢字點(diǎn)陣(如16×16點(diǎn)陣),將點(diǎn)陣文件存入ROM,形成新的漢字編碼;而在使用

引言

在現(xiàn)代工業(yè)控制和一些智能化儀器儀表中,越來(lái)越多的場(chǎng)所需要用點(diǎn)陣圖形顯示器顯示漢字。通常的漢字顯示方式是先根據(jù)所需要的漢字提取漢字點(diǎn)陣(如16×16點(diǎn)陣),將點(diǎn)陣文件存入ROM,形成新的漢字編碼;而在使用時(shí)剛需要先根據(jù)新的漢字編碼組成語(yǔ)句,再由MCU根據(jù)新編碼提取相應(yīng)的點(diǎn)陣進(jìn)行漢字顯示。在這種顯示方式中,如果使用的流字?jǐn)?shù)量較大或語(yǔ)句較多時(shí),利用漢字的新編碼組成語(yǔ)句將是一件十分繁瑣而枯燥的工作。針對(duì)這種情況,本文提出了一種十分簡(jiǎn)單的方式——直接利用PC機(jī)的漢字內(nèi)碼作為單片機(jī)系統(tǒng)的編碼。下面以8051單片機(jī)系統(tǒ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。

二、漢字顯示原理及軟件設(shè)計(jì)

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)碼的問(wèn)題,其顯示點(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īng)在實(shí)際應(yīng)用中中通過(guò)的匯編子程序列出如下(關(guān)于LCD控制器T6963的用戶法請(qǐng)見參考文獻(xiàn)1)。

LCDCOM EQU 7FF9H

LCDDAT EQU 7FF8H

;顯示1行漢字子程序

;漢字語(yǔ)句位置編號(hào)DPTR;行號(hào):R6 PRHZ:MOV 24H,DPH

MOV 25H,DPL

PUSH DPH

PUSH DPL

MOV A,DPH ;計(jì)算頁(yè)號(hào)

RR A

RR A

ADD A,#9;從第9區(qū)開始存放每行字符的機(jī)內(nèi)碼

ORL A,#0F0H

MOV P1,A

LCALL RL245 ;行號(hào)乘以32(每行32個(gè)字符)

SETB 24H,7 ;數(shù)據(jù)地址位于8000H~0FFFFH

MOV DPH,24H

MOV DPL,25H

MOV R0,#0E0H

MOV R7,#30 ;連續(xù)取出30個(gè)字符至0E0H內(nèi)部數(shù)據(jù)存儲(chǔ)器

PRHZ3:MOVX A,@DPTR

[!--empirenews.page--]

MOV @R0,A

INC R0

INC DPTR

DJNZ R7,PRHZ3

MOV 1DH,#30 ;顯示0E0H后的一行字符(共30個(gè))

MOV R5,#0 ;當(dāng)前列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 ;是漢字則將機(jī)內(nèi)碼送24H25H

INC R0

MOV 25H,@R0

INC R0

MOV A,25H

CLR C

SUBB A,#0A1H ;機(jī)內(nèi)碼轉(zhuǎn)換為二進(jìn)制的區(qū)碼和位碼

MOV 25H,A

MOV A,24H

CLR C

SUBB A,#0A1H

LCALLDPONHZ ;顯示1個(gè)漢字

DEC 1DH

INC R5

PRHZ4:INC R5

DJNZ 1DH,PRHZ5

POP DPL

POP DPH

RET

PR0:MOV DPTR,#LCDCOM ;讀狀態(tài)

MOVX A,@DPTR

RET

PR01:LCALLPR0 ;讀、寫一數(shù)據(jù)前

JNB ACC.0,PR01

JNB ACC.1,PR01

RET

PR02:LCALL PR0 ;連續(xù)讀前

JNB ACC.2,PR02

RET

PR03:LCALL PR0 ;連續(xù)寫前

JNB ACC.3,PR02

RET

[!--empirenews.page--]

PR1:LCALL PR01 ;雙字節(jié)參數(shù)R2,R3

MOV A,R2

LCALL PR14

PR11:LCALL PR01 ;單字節(jié)參數(shù)R3

MOV A,R3

LCALL PR14

PR12:LCALL PR01 ;無(wú)參數(shù)指令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),漢字區(qū)別24H,位碼25H

DPONHZ:MOV A,24H ;顯示1個(gè)漢字

MOV B,#94 ;每區(qū)94個(gè)漢字

MUL AB

ADD A,25H

MOV 25H,A

CLR A

ADDC A,B

MOV 24H,A

RR A ;獲得32KB為1頁(yè)的頁(yè)號(hào)

RR A

ORL A,#0F0H

MOV P1,A ;頁(yè)號(hào)送P1口

LCALL RL245 ;漢字序號(hào)乘以32

SETB 24H,7 ;因?yàn)榇鎯?chǔ)器位于單片機(jī)系統(tǒng)的7FFFH~0FFFFH

MOV DPH,24H

MOV DPL,25H

MOV R2,#32 ;在該位置連續(xù)取出32個(gè)字節(jié)

MOV R1,#0C0H

DPHZ2:MOVX A,@DPTR

INC DPTR

MOV @R1,A

INC R1

DJNZ R2,DPHZ2

MOV R1,#0C0H

MOV A,R6 ;根據(jù)行列位置計(jì)算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 ;將取出的點(diǎn)陣送LCD顯示

PRHZ6:MOV R4,#24H

LCALL PR1 ;雙字節(jié)參數(shù)R2,R3

MOV A,@R1

MOV R3,A

INC R1

MOV R4,#0C0H

LCALL PR11 ;單字節(jié)參數(shù)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

注:由于以上程序直接引自下面的應(yīng)用實(shí)例,調(diào)用以上程序時(shí)請(qǐng)讓寄存器組位于第2區(qū),即R0對(duì)應(yīng)10H。

[!--empirenews.page--]

三、應(yīng)用實(shí)例

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉