當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]嵌入式系統(tǒng)中文輸入法的設計

摘   要:在基于嵌入式系統(tǒng)的智能終端中,中文人機交互界面是必須的功能,某些系統(tǒng)還要求中文文本輸入。本文介紹了一種占用較少資源并適于在MCU上實現(xiàn)的中文輸入法。

關鍵詞:嵌入式系統(tǒng);中文輸入法;數(shù)字鍵盤

引言

目前,以LCD和數(shù)字鍵盤實現(xiàn)的人機交互式界面在智能終端中廣泛采用。在不同的應用場合,對人機界面的要求也不同,一些情況下只要求簡單參數(shù)的顯示和選擇,而在一些信息終端中,還要求文字的輸入。

在使用高性能CPU和標準顯示設備的情況下,實現(xiàn)友好的人機界面可采用商用嵌入式系統(tǒng)( 如Linux或WinCE)所支持的GUI程序。但很多情況下,智能終端使用MCU,且其顯示設備是非標準接口的小型LCD。此時,必須找到占用較少資源的低成本實現(xiàn)方法。

筆者參加的智能終端項目就是一個比較典型的基于MCU的人機界面應用,使用128×64點陣式LCD模塊,要求可顯示Unicode編碼的一、二級常用漢字庫并可進行中文輸入。此應用中輸入法相關的代碼和數(shù)據占用約20kB。在應用開發(fā)中,我們使用了實時操作系統(tǒng)μC/OS-II,相關內容可參考有關文獻。

簡單的中文拼音輸入法

漢字輸入法的實質是建立一種按鍵組合到漢字編碼的映射關系,因此,使用數(shù)字鍵盤的嵌入式系統(tǒng)的輸入法與使用標準鍵盤的PC機的輸入法沒有本質的不同,其區(qū)別主要在于嵌入式應用中處理器、存儲器等資源比較有限。如對應漢字“你”,拼音輸入法下PC鍵盤按鍵組合為“ni”,而在一般數(shù)字鍵盤下,其按鍵組合則為“64”。

在多數(shù)手持式設備(如智能電話)中,以0~9數(shù)字鍵與幾個簡單的控制鍵實現(xiàn)漢字輸入,比較著名的是在手機中廣泛采用的T9 和iTap 輸入法。這里我們介紹一種簡單的拼音輸入法的實現(xiàn)方法。

一般終端鍵盤包括12個按鍵,分別是0~9數(shù)字鍵和“*”、“#”兩個特殊鍵。按通用規(guī)則,數(shù)字1對應空格,其功能基本等同于PC機中的空格鍵,用于輸入空格或作為當前漢字的確認鍵;2~9數(shù)字鍵分別對應下述漢語拼音字母:

2:a b c   3:d e f     4:g h i

5:j k l    6:m n o   7:p q r s 

8:t u v   9:w x y z

而“0”、“*”、“#”鍵則作為輸入法中的控制鍵。我們將“#”作為“選擇鍵”,用于選取同一數(shù)字鍵組合下的不同拼音組合。

輸入法中使用了兩個重要數(shù)據結構,分別是PY_NODE和PY_SUBNODE。每個PY_NODE對應一個數(shù)字鍵組合,PY_SUBNODE則對應一組拼音組合。由于一個數(shù)字組合可對應多個拼音組合(如“226”對應“ban”、“bao”、“can ”、“cao”),因此這兩個結構實現(xiàn)的是一個兩級的對應表。

PY_NODE按樹組織,而PY_SUBNODE按雙向鏈表組織。二者的基本關系如圖1所示。

以下是兩個結構的定義:

typedef struct py_node{

unsigned int son[8];   //對應下次2~9按鍵輸入時應轉到的PY_NODE的ID號

unsigned int father;     //父節(jié)點ID號

struct py_subnode *ptrpy;   //指向下屬第一個PY_SUBNODE的指針

}PY_NODE;

typedef rom struct py_subnode{

unsigned char py[7];                   //本節(jié)點的拼音字符串

struct py_subnode *prev;           //指向前一PY_SUBNODE的指針

struct py_subnode *next;            //指向下一PY_SUBNODE的指針

unsigned char *ptrUnicode;        //指向本節(jié)點對應Unicode碼表的指針

}PY_SUBNODE;

設計中我們所參照的漢語拼音表中共有412種組合,這樣系統(tǒng)中必須有412個PY_SUBNODE與其一一對應;系統(tǒng)中共建立了250個PY_NODE。建立此部分數(shù)據的工作比較繁瑣,分以下5個步驟進行:

1、 漢字按拼音進行分組,按常用程度排序,并將漢字轉化為Unicode碼或國標碼,碼型視系統(tǒng)要求而定;

2、 將有效拼音轉換為數(shù)字鍵盤值組合,如拼音“cui”轉為數(shù)字值“284”,這些值對應了部分PY_NODE;

3、 增加中間PY_NODE,用于表示本身無效但后續(xù)輸入有效的拼音,如“b”、“c”、“don”、“dua”等節(jié)點;

4、 將數(shù)字鍵組合相同的PY_SUBNODE編成鏈表,由某一PY_NODE中的ptrpy指針指向表頭;

5、 按數(shù)字鍵組合的關系,將PY_NODE組成樹。

圖1中所示組織關系并不復雜,但其工作量不小,一般情況下可編寫轉換程序自動建立。圖2為拼音輸入法數(shù)據結構的一個片斷。

在改變當前PY_NODE時,一般應伴有一些顯示操作,因應用不同各有差異,此處不做過多說明。

在當前節(jié)點下,可以用某一指定控制鍵(如“#”鍵)來選擇此PY_NODE下屬的PY_SUBNODE以縮小漢字的選取范圍。

 

增加功能

上述拼音輸入法比較簡單,且完成了輸入法需要的基本功能。對于某些應用場合,對輸入法還有更多的要求,可在上述方法的基礎上進行改進實現(xiàn)。一些常見的要求和改進方法列舉如下:

① 增加常用字功能

在上述輸入法中,增加常用漢字。只考慮國標碼中的約7000常用漢字情況下,輸入法所占用的存儲空間增加14kB。

② 增加聯(lián)想功能

為使輸入更為友好,很多輸入法設有聯(lián)想功能,即在輸入一個漢字后,此漢字常用的后續(xù)漢字自動成為候選項由用戶選擇。

③ 筆劃輸入法

筆劃輸入法較之拼音輸入法的優(yōu)勢在于重碼少,輸入不常用漢字時也不必多次翻頁查找。

以五筆劃輸入法為例,通過五個按鍵即可輸入漢字。該輸入法將漢字筆劃分為5種筆劃,即:“一”、“丨”、“丿”、“丶”和“-”五種筆劃,分別對應數(shù)字鍵“7”、“8”、“9”、“*”、“0”,如“你”字的組合為“丿”、“丨”、“丿”、“-”、“丨”、“丿”、“丶”。

筆劃輸入法與拼音輸入法的區(qū)別在于人的感覺而非機器的操作,本質上只是按鍵組合與漢字碼表對應關系有所不同,如“你”在拼音輸入法下對應“64”,而在筆劃輸入法下則對應“989089*”。

④ 關于特殊符號、英文和數(shù)字

對于一些常用的特殊符號、英文和數(shù)字的輸入,較常用的做法是將以單獨的輸入法實現(xiàn)。

軟、硬件設計

輸入法的性能優(yōu)劣,更多的不是體現(xiàn)在算法,而是是否符合實際需求。因此它的優(yōu)化工作是對前述PY_NODE和PY_SUBNODE組織的優(yōu)化,如漢字次序的安排、聯(lián)想功能中后序字的組織、以及操作界面的設計是否適合人們的使用習慣。因算法本身很簡單,所以用C語言可實現(xiàn)較高的代碼效率,以及較好的可移植性。

對于很多8位MCU,地址空間不大于64kB。這樣小的空間對于漢字界面中的漢字庫和輸入法中的大量數(shù)據結構是遠遠不夠的(如一、二級常用字的16×16點陣漢字庫至少需要約220kB),因此常使用地址分頁方式實現(xiàn)地址擴展。在MCU外部設一鎖存器作為“頁”寄存器,每頁大小根據MCU特性和實際需求確定,如MCS51系列最大可為64kB一頁。由于頁寄存器的操作為獨占型的,因此在中斷內不能進行操作;而在基于RTOS的多任務環(huán)境下,應避免多個任務同時使用頁寄存器。

結語

由于8位、16位MCU的應用場合多是低成本的設備,當商用輸入法的成本無法接受或無法得到時,自行編寫輸入法應是可行的。當然,本文所討論的只是實現(xiàn)輸入法的基本方法,雖然方法可行,但所編寫的輸入法代碼應經過較長時間的測試才可以作為產品的正式軟件發(fā)布。

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

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

關鍵字: 汽車 人工智能 智能驅動 BSP

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

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

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

關鍵字: 華為 12nm EDA 半導體

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

關鍵字: 華為 12nm 手機 衛(wèi)星通信

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

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

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

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

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

關鍵字: BSP 信息技術
關閉
關閉