引言目前,以lcd和數字鍵盤實現的人機互動式介面在智慧型終端中廣泛採用。在不同的應用場合,對人機介面的要求也不同,一些情況下只要求簡單引數的顯示和選擇,而在一些資訊終端中,還要求文字的輸入。
在使用高效能cpu和標準顯示裝置的情況下,實現友好的人機介面可採用商用嵌入式系統( 如linux或wince)所支援的gui程式。但很多情況下,智慧型終端使用mcu,且其顯示裝置是非標準介面的小型lcd。此時,必須找到占用較少資源的低成本實現方法。
簡單的中文拼音輸入法
漢字輸入法的實質是建立一種按鍵組合到漢字編碼的對映關係,因此,使用數字鍵盤的嵌入式系統的輸入法與使用標準鍵盤的pc機的輸入法沒有本質的不同,其區別主要在於嵌入式應用中處理器、儲存器等資源比較有限。如對應漢字「你」,拼音輸入法下pc鍵盤按鍵組合為「ni」,而在一般數字鍵盤下,其按鍵組合則為「64」。
在多數手持式裝置(如智慧型**)中,以0~9數字鍵與幾個簡單的控制鍵實現漢字輸入,比較著名的是在手機中廣泛採用的t9 和itap 輸入法。這裡我們介紹一種簡單的拼音輸入法的實現方法。
一般終端鍵盤包括12個按鍵,分別是0~9數字鍵和「*」、「#」兩個特殊鍵。按通用規則,數字1對應空格,其功能基本等同於pc機中的空格鍵,用於輸入空格或作為當前漢字的確認鍵;2~9數字鍵分別對應下述漢語拼音字母:
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」、「*」、「#」鍵則作為輸入法中的控制鍵。我們將「#」作為「選擇鍵」,用於選取同一數字鍵組合下的不同拼音組合。
輸入法中使用了兩個重要資料結構,分別是py_node和py_subnode。每個py_node對應乙個數字鍵組合,py_subnode則對應一組拼音組合。由於乙個數字組合可對應多個拼音組合(如「226」對應「ban」、「bao」、「can 」、「cao」),因此這兩個結構實現的是乙個兩級的對應表。
py_node按樹組織,而py_subnode按雙向鍊錶組織。二者的基本關係如圖1所示。
以下是兩個結構的定義:
typedef struct py_nodepy_node;
typedef rom struct py_subnodepy_subnode;
設計中我們所參照的漢語拼音表中共有412種組合,這樣系統中必須有412個py_subnode與其一一對應;系統中共建立了250個py_node。建立此部分資料的工作比較繁瑣,分以下5個步驟進行:
1、 漢字按拼音進行分組,按常用程度排序,並將漢字轉化為unicode碼或國標碼,碼型視系統要求而定;
2、 將有效拼音轉換為數字鍵盤值組合,如拼音「cui」轉為數字值「284」,這些值對應了部分py_node;
3、 增加中間py_node,用於表示本身無效但後續輸入有效的拼音,如「b」、「c」、「don」、「dua」等節點;
4、 將數字鍵組合相同的py_subnode編成鍊錶,由某一py_node中的ptrpy指標指向表頭;
5、 按數字鍵組合的關係,將py_node組成樹。
圖1中所示組織關係並不複雜,但其工作量不小,一般情況下可編寫轉換程式自動建立。圖2為拼音輸入法資料結構的乙個片斷。
在改變當前py_node時,一般應伴有一些顯示操作,因應用不同各有差異,此處不做過多說明。
在當前節點下,可以用某一指定控制鍵(如「#」鍵)來選擇此py_node下屬的py_subnode以縮小漢字的選取範圍。
增加功能
① 增加常用字功能
在上述輸入法中,增加常用漢字。只考慮國標碼中的約7000常用漢字情況下,輸入法所占用的儲存空間增加14kb。
② 增加聯想功能
為使輸入更為友好,很多輸入法設有聯想功能,即在輸入乙個漢字後,此漢字常用的後續漢字自動成為候選項由使用者選擇。
③ 筆劃輸入法
筆劃輸入法較之拼音輸入法的優勢在於重碼少,輸入不常用漢字時也不必多次翻頁查詢。
以五筆劃輸入法為例,通過五個按鍵即可輸入漢字。該輸入法將漢字筆劃分為5種筆劃,即:「一」、「丨」、「丿」、「丶」和「-」五種筆劃,分別對應數字鍵「7」、「8」、「9」、「*」、「0」,如「你」字的組合為「丿」、「丨」、「丿」、「-」、「丨」、「丿」、「丶」。
筆劃輸入法與拼音輸入法的區別在於人的感覺而非機器的操作,本質上只是按鍵組合與漢字碼表對應關係有所不同,如「你」在拼音輸入法下對應「64」,而在筆劃輸入法下則對應「989089*」。
④ 關於特殊符號、英文和數字
對於一些常用的特殊符號、英文和數字的輸入,較常用的做法是將以單獨的輸入法實現。
軟、硬體設計
輸入法的效能優劣,更多的不是體現在演算法,而是是否符合實際需求。因此它的優化工作是對前述py_node和py_subnode組織的優化,如漢字次序的安排、聯想功能中後序字的組織、以及操作介面的設計是否適合人們的使用習慣。因演算法本身很簡單,所以用c語言可實現較高的**效率,以及較好的可移植性。
對於很多8位mcu,位址空間不大於64kb。這樣小的空間對於漢字介面中的漢字型檔和輸入法中的大量資料結構是遠遠不夠的(如
一、二級常用字的16×16點陣漢字型檔至少需要約220kb),因此常使用位址分頁方式實現位址擴充套件。在mcu外部設一鎖存器作為「頁」暫存器,每頁大小根據mcu特性和實際需求確定,如mcs51系列最大可為64kb一頁。由於頁暫存器的操作為獨佔型的,因此在中斷內不能進行操作;而在基於rtos的多工環境下,應避免多個任務同時使用頁暫存器。
結語由於8位、16位mcu的應用場合多是低成本的裝置,當商用輸入法的成本無法接受或無法得到時,自行編寫輸入法應是可行的。當然,本文所討論的只是實現輸入法的基本方法,雖然方法可行,但所編寫的輸入法**應經過較長時間的測試才可以作為產品的正式軟體發布。
嵌入式系統中文輸入法的設計
引言目前,以lcd和數字鍵盤實現的人機互動式介面在智慧型終端中廣泛採用。在不同的應用場合,對人機介面的要求也不同,一些情況下只要求簡單引數的顯示和選擇,而在一些資訊終端中,還要求文字的輸入。在使用高效能cpu和標準顯示裝置的情況下,實現友好的人機介面可採用商用嵌入式系統 如linux或wince 所...
c 關閉中文輸入法 開啟中文輸入法
輸入法的禁用和啟用有兩種方式 在控制項的操作級別中,能對輸入法有影響的只有輸入型控制項,例如textbox,combobox 等 控制性 xaml 塊方式 inputmethod.preferredimestate on 啟用輸入法 inputmethod.preferredimeconversio...
ubuntu 中文輸入法
sudo gedit etc x11 xsession.d 95xinput 在彈出來的視窗中輸入 usr bin scim d xmodifiers im scim export xmodifiers export gtk im module scim 儲存檔案。sudo apt get inst...