婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

單片機 漢字的動態編碼與顯示方案

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2010-9-22
摘要:綜合幾種常用單片機漢字顯示方案,提出一種基于PC機預處理的漢字動態編碼和動態字庫的顯示方法,較好地解決了存儲空間、顯示速度、軟件開發維護幾方面的相互矛盾;具有平臺化的優點,同時,給出針對MCS51優化的匯編顯示例程。

   關鍵詞:機內碼 動態編碼 字庫

因為漢字本身的特點,顯示漢字始終是計算機在我國應用普及的一個障礙。最初,為了能在PC機上顯示、處理漢字,國人發明了一種硬件設備"漢卡",后來各種各樣的采用純軟件技術的中文DOS逐漸成熟,其中、西文軟件的運行速度和性能還是有明顯的差距。最終在軟件進入支持UNICODE、真正實現國際化的WIN95以后,硬件跨入"奔騰"時代,才實現了漢字與西文的統一顯示,但是這一切是以硬件資源的飛速發展為前提的。以國際GB2312為例,一、二級漢字庫共收錄了6000多個漢字,每個字按16×16點陣計算,字模需要占用32字節的存儲空間,整個字庫的規模在200k字節以上,高點陣(24點陣以上)和矢量字庫以及Windows用的TrueType字體的字庫規模都是幾兆字節大小,這在早期的386時代是難以想象的。單片機因為使用靈活、結構簡單、體積小、成本低而在工業和生活中得到廣泛應用,也正是因此,它的硬件資源很有 限,尋址和計算機能力都遠低于PC機,顯示漢字更受限制。人們不滿足單片機系統采用LED數碼管的簡單顯示,根據單片機的特點,開發出了很多種漢字顯示方法。

1 幾種常用單片機顯示漢字方法

(1)采用標準字[1]

這種方法仿器中文DOS的辦法,將一個標準的漢字庫裝入ROM存儲器,再根據漢字的機內碼在字庫中尋址,找到對應的字模,提取后送到顯示器顯示。因為采用了和PC機相同的編碼(機內碼),軟件的開發和維護非常簡單,基本上與寫PC機軟件差不多。而對單片機系統自身的要求則相對高多了,16×16點陣的字庫需要256K字節,但是一般8位單片機的尋址能力只有64K字節,要進行存儲器擴充,除增加很大一部分硬件成本外,還因為要進行存儲器分頁管理、地址切換,顯示速度明顯受影響,而且只能顯示一種點陣字體。

(2)直接固化顯示字模[2]

將要顯示的語句中全部漢字的字模數據依次提取出來,順序存放在存儲器中,當顯示時,直接取出字模數據送至顯示器即可。這種方法占用空間少,程序實現簡單,顯示速度快;但是字模數據的提取和存儲安排是一件委有繁瑣的事件,要想大量顯示漢字或進行程序修改幾乎是不可能的,軟件的可維護性很差。

(3)建立帶索引的小字庫[3]

將全部要顯示的漢字統一建成一個小字庫,字庫分為2部分:索引素和字模表。索引表由若干定長記錄組成,記錄的內容為:漢字機內碼、地址碼、識別碼。其中地址碼是該漢字字模在字模表中的位置,識別碼標志該漢字的點陣形式或字體等。字模表中按素引存放漢字字模。顯示漢字時先根據待顯漢字的機內碼在索引表中尋找,找到對應索引記錄后,讀出地址碼和識別碼,再根據此從字模表中讀出字模,送顯即可。這種方法可根據實際使用對字庫進行裁剪,硬件開銷較小,但是要進行復雜的查詢運算,字多了平均尋找時間就會變長,效率降低。

2 漢字動態編碼

綜上所述,我們發現:在方法1中,程序員工作量最少,但單片要機的軟、硬件開銷最大;方法2中,單片機的開銷較少,但是編寫和維護軟件極為困難;方法3,介于二者之間。顯然,存儲空間、顯示速度、軟件開發維護件間存在著矛盾。受各種PC機模擬軟件的啟發,我們提出一種基于PC機預處理的漢字顯示方法--漢字動態編碼,在實際應用中較好地解決了這一問題。其基本原理如下:建立一種新的編碼機制,這個漢字編碼是動態的;一個編碼不與某個漢字具體相聯系,而僅代表某個漢字在字庫中的位置(這個位置也是動態的);用該碼代替程序里字符串(C語言)或數據段(匯編語言)內漢字的機內碼,單處機顯示程序可根據這個新的編碼直接在專門建立的動態小字庫中找到字模,不用進行復雜的尋址、查找等運算,如圖1所示。

實現漢字動態編碼的過程就是先進行漢字識別,然后建立編碼字典、提取字模、建立動態字庫、改寫機內碼。首先掃描一遍程序文件,識別其中的漢字,將它們按出現先后順序或機內碼的大小排序,重復出現的剔除,建立了一個編碼字典;根據漢字在編碼字典的位置(序號),可以對漢字按區碼、位碼進行編碼,也可以采用其它的方法編碼,總之序號與它的動態編碼存在一一對應關系;根據字典中每個漢字的機內碼依次從PC機的漢字點陣字庫中提取字模,順序存儲,建立一個小規模的動態字庫,這樣每個漢字的字模在字庫中的位置就與其在編碼字典中的序號、動態編碼一一對應了。最后,再掃描一遍程序文件,按照編碼字典將每個漢字的機內碼改寫為對應的動態編碼。因為程序文件中的漢字隨時會增減,編碼隨之而變,字庫的大小也隨時在變。所以稱之為動態編碼和動態字庫。

考慮一般應用場合,1000個左右的漢字即可滿足要求,按照漢字動態編碼方法所需的字庫僅為32K字節大小,只需要1片27256即可,幾乎不用增加什么硬件。這樣,字庫的大小可由漢字的多少控制,程序的編寫和維護可以沿用中文系統下的習慣,僅需要編寫好的單片機程序用PC機進行一次預處理,程序員從繁雜的漢字處理工作中解放出來,有效地降低了軟件和硬件開發成本。
\
3 漢字動態編碼的具體實現

實現漢字動態編碼的關鍵是建立編碼字典和改寫機內碼。下面以是顯示1行漢字"天上有個太陽,水中有個月亮"為例,說明動態編碼的實現過程。

(1)漢字識別

漢字在PC機內的存儲和處理是用機內碼來實現的。每個漢字的機內碼是唯一的,由2個字節組成,分區碼和位碼,為了和西文的ASCII碼有區別,漢字機內碼的區碼和位碼的取值都大于0A0H。我們要處理的源程序文件都是文本文件,存儲的都是西文字符、控制符的ASCII碼和中文字符的機內碼,當掃描到文件中大于0A0H的字節內容時,即可判斷該字節是漢字機內碼的1個字節,而且肯定是成對出現,第1個字節是區別,第2個字節是位碼,都大于0A0H,否則出錯。

在C和匯編程序中表示字符的方式有所不同,但最終字符在文件中的存儲格式是一樣的。顯示上面那行漢字,用C語言可以表示為:

char OneSent[]="天上有個太陽,水中有個月亮";

printfhz(OneSent);/*printfhz()顯示函數*/

用十六進制編輯器(我們用的是UEdit32)察看文件中C語言字符串定義語句為:

63 68 61 72 20 20 4F 6E 65 53 65 6E 74 5B 5D 20 3D 20 22 CC EC C9 CF D3 D0 B8 F6 CC AB D1 F4 A3 AC CB AE D6 D0 D3 D0 B8 F6 D4 C2 C1 C1 22 20 3B 0D 0A

用匯編語言可以表示為:

ONESENT:DB ‘天上有個太陽,水中有個月亮‘,00H

MOV DPTR,ONESENT

LCALL DISPLAY;DISPLAY是顯示子程序

用十六進制編輯器察看上面用匯編語言定義字符串的那一條語句為:

4F 4E 45 53 45 4E 54 3A 44 42 20 27 CC EC C9 CF D3 D0 B8 F6 CC AB D1 F4 A3 AC CB AE D6 D0 D3 D0 B8 F6 D4 C2 C1 C1 27 2C 30 30 48 0D 0A

由此可以觀察到情況確如前所述。

(2)建立編碼字典

編碼字典是在掃描的同時逐步建立起來的,每掃描到一個漢字(包括全角符號),即與字典中已有的字符進行比較,如沒有重復,是新的字符就順序存入字典,否則繼續掃描,直至文件結屬。由于每個字符都是從尾部添加的,它們的序號也是依次遞增的,根據序號就可以進行動態編碼了。由于顯示的漢字一般都得在256個以上,即使進行動態編碼,也需要用2字節編碼來實現。以MCS51系列單片機和16×16點陣漢字做一優化編碼示例:8051的地址指針DPTR是16位指針,由高、低2字節指針DPH、DPL組合而成,如果將存儲器按0FFH(256)字節分布,修改DPH即可直接尋址到任一頁,修改DPL可尋址該頁的任一字節。一個16×16點陣漢字的字模是32字節大小,每頁存儲器正好能容納8個漢字字模。可以優化設計動態編碼的高字節指向字模的頁地址(DPH),低字節指向字模在該頁的首地址(DPL)。考慮地址空間的有效分配,將字庫的地址放在0A000H以后(程序或數據存儲器均可),動態編碼的高字節要加上地址有效分配,將字庫的地址放在0A000H以后(程序或數據存儲器均可),動態編碼的高字節要加上地址的頁偏移量(大于等于0A0H);考慮漢字與西文字符的區別,動態編碼的低字節也需要加上一個大于或等于0A0H的偏移量。設某漢字在編碼字典中的序號為Num,則該漢字的動態編碼為:

動態編碼高字節=頁偏移量+Num/8

動態編碼低字節=偏移量+(Num%8)×32    (1)

偏移量一般可設為0A0H。當單片機顯示某個漢字時,只需將其動態編碼的高字節送DPH,低字節減0A0H后送DPL,即可得到對應字模的地址指針。

(3)提取字模、建立動態字庫

漢字機內碼與點陣字庫的詳細關系可參考有關資料,它們存在如下聯系:

字模首地址=((機內碼高字節-1)×94+(機內碼低字節-1))×N    (2)

注:N為一個漢字點陣字模的字節數。

按照編碼字典內容,根據字模首地址,依次取出漢字字模,順序寫入一個二進制文件,即建成動態字庫(其它方法略),用燒錄器寫入EPROM,就可以使用了。

(4)編碼改寫

機內碼是PC機識別處理漢字用的,單片機只能處理我們建立起來的動態編碼,還得把程序中漢字的僅機碼根據編碼字典改成對應的動態編碼才行。由于在編寫源程序的文本編輯器中看到的是經過系統處理過的字節,看不到漢字的機內碼,也無法對其進行改寫。根據"漢字識別"一節所述,不經過文本編輯器,直接將動態編碼(十六進制數)定改磁盤文件對應位置即可,但是處理過后的漢字在文本編輯器里會顯示出亂碼。

(5)漢字顯示

在明白了動態編碼與動態字庫中字模的關系后,可以完成按照PC機下漢字顯示原理進行單片機下的程序設計,編寫前面的函數printhz()或子程序的DISPLAY,可參考相關資料[4]。
\
4 MCS51漢字顯示例程

根據上述漢字動態編碼方法,我們利用Borland C++編寫了PC機預處理程序,將ASM51或C51源程序用PC機預處理后,建立了動態字庫和改寫了機內碼,并且用ASM51寫了一個針對MCS51進行優化的子程序DIS_CHAR。它顯示一個西文或中文字符,實現過程如圖2所示。

西文字符碼的顯示與流字顯示基本相同,將西文字庫(僅數字和字符部分)裝入程序存儲器中,根據ASCII碼的值計算出字模首地址,將字符字模依次讀出,再送顯示即可。

此方案不但可用于單片機系統中,還可應用于任何無中文系統支持的嵌入式系統中。根據這個思路還可設計出不同字體、點陣混合的字庫,支持包含2萬多個字符的新國標編碼,甚至矢量字體在單片機系統中的應用也成為可能。由于技術水平有限,此方案還存在一些不足之處,如改寫編碼后源程序中漢字顯示為亂碼,不知道改碼處理是否正確,操作比較繁瑣。如果能采用插件技術實現此方案,編輯器中能正常顯示漢字,而輸出已經是改碼后的程序文件,則能很好地解決上述不足。在這里,我們拋碼引玉,希望有興趣的朋友一起合作,實現單片機中文顯示的廣義開發平臺。

Tags:單片機,漢字編碼,顯示方案  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av
<button id="4i884"></button>
  • <abbr id="4i884"><source id="4i884"></source></abbr>
  • <code id="4i884"><tr id="4i884"></tr></code>
  • <rt id="4i884"></rt>
    <li id="4i884"></li>
  • <rt id="4i884"><tr id="4i884"></tr></rt>
  • 男人c女人视频| 天堂网在线免费观看| 亚洲妇熟xx妇色黄蜜桃| 成人免费在线小视频| 国产911在线观看| 欧美激情国内自拍| 成人亚洲精品777777大片| 日韩欧美国产免费| 欧美色图另类小说| 免费毛片小视频| 青青草原成人网| 欧美极品欧美精品欧美图片| 免费拍拍拍网站| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 亚洲三级在线观看视频| 中文字幕成人免费视频| jizz欧美性11| 性久久久久久久久久久久久久| 日本中文字幕二区| www.久久av.com| 粉色视频免费看| 91九色国产ts另类人妖| www.夜夜爱| 免费av网址在线| 国内自拍第二页| 国产视频在线观看网站| 日韩欧美一区二| 国产免费视频传媒| 国产卡一卡二在线| 国产一区二区视频播放| 黄色av免费在线播放| 日本黄色福利视频| 亚洲熟妇国产熟妇肥婆| 我要看一级黄色大片| 国产女主播av| 国产v亚洲v天堂无码久久久| 五月六月丁香婷婷| 黄色片视频在线免费观看| 手机版av在线| 免费看一级大黄情大片| 中文字幕视频三区| av7777777| 女同性恋一区二区| 91精品无人成人www| 欧美激情亚洲天堂| 在线能看的av网站| 99热成人精品热久久66| 欧美a级黄色大片| 五月天激情视频在线观看| 久久国产精品网| 精品日韩在线播放| 亚洲欧洲日本精品| 国内外成人激情视频| 国产系列第一页| www.久久久精品| 波多野结衣乳巨码无在线| 免费av不卡在线| jizz欧美性11| 中文av字幕在线观看| 少妇性饥渴无码a区免费| 99久久99久久精品| 大地资源第二页在线观看高清版| www黄色av| 无码aⅴ精品一区二区三区浪潮| 男女啪啪免费观看| 超薄肉色丝袜足j调教99| 伊人色在线观看| 午夜免费看毛片| 在线观看免费的av| mm131国产精品| 亚洲一级片网站| 欧美激情国内自拍| 午夜探花在线观看| 成人国产在线看| 肉大捧一出免费观看网站在线播放| 天堂av2020| 可以在线看黄的网站| 亚洲最新免费视频| 五月天男人天堂| 日本香蕉视频在线观看| 男女猛烈激情xx00免费视频| av高清在线免费观看| 成人一对一视频| 日本xxxx黄色| 桥本有菜av在线| 欧美日韩黄色一级片| 女人另类性混交zo| 91日韩视频在线观看| 午夜久久福利视频| 亚洲中文字幕无码一区二区三区| 黄色小视频大全| av免费播放网址| 日韩在线不卡一区| 特色特色大片在线| avav在线看| 麻豆一区二区三区在线观看| 无码av天堂一区二区三区| 国模杨依粉嫩蝴蝶150p| 男人的天堂最新网址| 久久国产午夜精品理论片最新版本| 99蜜桃臀久久久欧美精品网站| 精品日韩久久久| 国产一区二区三区在线免费| 国产亚洲精品网站| 亚洲另类第一页| www.亚洲成人网| 亚洲 国产 图片| 国产午夜福利视频在线观看| 国产精品嫩草影院8vv8| 欧美 日韩 国产在线观看| 成人黄色一级大片| 97视频在线免费播放| 黄色特一级视频| 在线看的黄色网址| 999在线观看视频| 国产精品v日韩精品v在线观看| 国产玉足脚交久久欧美| 超碰91在线播放| 在线免费视频a| 亚洲熟妇无码另类久久久| 天天天干夜夜夜操| 国自产拍偷拍精品啪啪一区二区| 午夜久久福利视频| 蜜臀av免费观看| 国产嫩草在线观看| 99re在线视频免费观看| 欧美中文字幕在线观看视频| 欧美xxxxxbbbbb| 特级丰满少妇一级| 亚洲欧美自拍另类日韩| 在线观看免费黄网站| 能在线观看的av| 久久久久久三级| 日韩av片网站| 丰满少妇在线观看| 日韩a在线播放| 美女福利视频在线| 337p粉嫩大胆噜噜噜鲁| 好吊妞无缓冲视频观看| 无码aⅴ精品一区二区三区浪潮| 男女日批视频在线观看| 超碰成人免费在线| av高清在线免费观看| 国产真实乱子伦| 欧美精品久久久久久久久25p| 国产三级三级看三级| 激情五月俺来也| 伊人再见免费在线观看高清版 | 日本高清免费在线视频| 日韩成人av免费| 久久精品一二三四| 福利在线一区二区| 欧美 激情 在线| 免费黄色一级网站| 午夜在线观看av| 久久久天堂国产精品| 免费超爽大片黄| 成年人在线看片| 在线观看av免费观看| 97在线国产视频| 91亚洲免费视频| 日韩精品在线观看av| 无码日韩人妻精品久久蜜桃| 国产永久免费网站| 国产二区视频在线| 国产黄色特级片| 波多野结衣与黑人| 性猛交ⅹ×××乱大交| 欧美大黑帍在线播放| 欧美性猛交久久久乱大交小说| 高清一区在线观看| 日本一道本久久| 毛片毛片毛片毛片毛| 国产资源在线视频| eeuss中文| 在线免费观看av的网站| 成年女人18级毛片毛片免费| 亚洲高清在线免费观看| 特级西西人体www高清大胆| av视屏在线播放| 日产精品久久久久久久蜜臀| 三级a在线观看| 国产在线青青草| 日本一区午夜艳熟免费| 亚洲一区二区中文字幕在线观看| 欧美成人免费高清视频| 国产真实老熟女无套内射| 天堂视频免费看| 妺妺窝人体色www在线观看| 亚洲色欲久久久综合网东京热| 特级西西444www| 日日干夜夜操s8| 熟女少妇精品一区二区| 国产成人无码a区在线观看视频| 中国黄色片免费看| 大陆极品少妇内射aaaaa| 免费人成自慰网站| 久艹在线免费观看| 日本熟妇人妻xxxx| 国产美女主播在线|