資料介紹
摘 要:在基于嵌入式系統的智能終端中,中文人機交互界面是必須的功能,某些系統還要求中文文本輸入。本文介紹了一種占用較少資源并適于在MCU上實現的中文輸入法。
引言
目前,以LCD和數字鍵盤實現的人機交互式界面在智能終端中廣泛采用。在不同的應用場合,對人機界面的要求也不同,一些情況下只要求簡單參數的顯示和選擇,而在一些信息終端中,還要求文字的輸入。
在使用高性能CPU和標準顯示設備的情況下,實現友好的人機界面可采用商用嵌入式系統( 如Linux或WinCE)所支持的GUI程序。但很多情況下,智能終端使用MCU,且其顯示設備是非標準接口的小型LCD。此時,必須找到占用較少資源的低成本實現方法。
筆者參加的智能終端項目就是一個比較典型的基于MCU的人機界面應用,使用128×64點陣式LCD模塊,要求可顯示Unicode編碼的一、二級常用漢字庫并可進行中文輸入。此應用中輸入法相關的代碼和數據占用約20kB。在應用開發中,我們使用了實時操作系統μC/OS-II,相關內容可參考有關文獻。
簡單的中文拼音輸入法
漢字輸入法的實質是建立一種按鍵組合到漢字編碼的映射關系,因此,使用數字鍵盤的嵌入式系統的輸入法與使用標準鍵盤的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_node{
unsigned int son[8]; //對應下次2~9按鍵輸入時應轉到的PY_NODE的ID號
unsigned int father; //父節點ID號
struct py_subnode *ptrpy; //指向下屬第一個PY_SUBNODE的指針
}PY_NODE;
typedef rom struct py_subnode{
unsigned char py[7]; //本節點的拼音字符串
struct py_subnode *prev; //指向前一PY_SUBNODE的指針
struct py_subnode *next; //指向下一PY_SUBNODE的指針
unsigned char *ptrUnicode; //指向本節點對應Unicode碼表的指針
}PY_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)所支持的GUI程序。但很多情況下,智能終端使用MCU,且其顯示設備是非標準接口的小型LCD。此時,必須找到占用較少資源的低成本實現方法。
筆者參加的智能終端項目就是一個比較典型的基于MCU的人機界面應用,使用128×64點陣式LCD模塊,要求可顯示Unicode編碼的一、二級常用漢字庫并可進行中文輸入。此應用中輸入法相關的代碼和數據占用約20kB。在應用開發中,我們使用了實時操作系統μC/OS-II,相關內容可參考有關文獻。
簡單的中文拼音輸入法
漢字輸入法的實質是建立一種按鍵組合到漢字編碼的映射關系,因此,使用數字鍵盤的嵌入式系統的輸入法與使用標準鍵盤的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_node{
unsigned int son[8]; //對應下次2~9按鍵輸入時應轉到的PY_NODE的ID號
unsigned int father; //父節點ID號
struct py_subnode *ptrpy; //指向下屬第一個PY_SUBNODE的指針
}PY_NODE;
typedef rom struct py_subnode{
unsigned char py[7]; //本節點的拼音字符串
struct py_subnode *prev; //指向前一PY_SUBNODE的指針
struct py_subnode *next; //指向下一PY_SUBNODE的指針
unsigned char *ptrUnicode; //指向本節點對應Unicode碼表的指針
}PY_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的應用場合多是低成本的設備,當商用輸入法的成本無法接受或無法得到時,自行編寫輸入法應是可行的。當然,本文所討論的只是實現輸入法的基本方法,雖然方法可行,但所編寫的輸入法代碼應經過較長時間的測試才可以作為產品的正式軟件發布。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式linux 中文輸入法,基于嵌入式Linux的漢字輸入法
- 嵌入式發動機活塞溫度測試系統設計方案 22次下載
- 基于ARM的嵌入式Web服務器設計方案 20次下載
- T9輸入法在嵌入式設備中的實現方案資料下載
- 188萬中文詞庫包括了輸入法和機器學習與訓練 6次下載
- 如何在2KB內存的單片機上實現的T9中文輸入法詳細方法和程序說明
- 如何在2KB內存的單片機上實現的T9中文輸入法
- 如何使用ARM進行嵌入式系統的設計與實現 14次下載
- 基于嵌入式LINUX和QT/E實現矩陣鍵盤中文輸入 3次下載
- Pocket PC中漢字輸入法分析與實現 0次下載
- 基于VxWorks的漢字輸入法實現
- 采用FPGA的嵌入式系統設計方案
- 基于嵌入式Linux的漢字輸入法
- 嵌入式中文輸入法設計
- 51單片機拼音中文輸入法c程序源代碼
- 【AWTK使用經驗】如何使用系統輸入法與開啟最大化窗口功能 293次閱讀
- 瑞芯微RK3566鴻蒙開發板Android11修改第三方輸入法為默認輸入法 495次閱讀
- 什么是嵌入式系統?嵌入式系統的具體應用 2563次閱讀
- 安卓11之下的系統實現輸入法切換 1750次閱讀
- 分享一種嵌入式系統自動化測試的詳細方案 2869次閱讀
- B超系統中的漢字輸入方案的設計與實現 2060次閱讀
- 嵌入式系統的全面解析 3280次閱讀
- 如何實現嵌入式系統遠程調試 5401次閱讀
- 基于嵌入式軟件的JNI技術應用解析 1106次閱讀
- 基于嵌入式環境的WiFi通信設計方案詳解 5750次閱讀
- 基于FPGA嵌入式系統的智能小車全面解析 9454次閱讀
- 嵌入式輸入設備設計 1275次閱讀
- 嵌入式輸入設備設計應用 499次閱讀
- 一種嵌入式Web服務器的設計方案 4306次閱讀
- 基于ARM的嵌入式無線視頻采集系統設計 1888次閱讀
下載排行
本周
- 1AN158 GD32VW553 Wi-Fi開發指南
- 1.51MB | 2次下載 | 免費
- 2嵌入式軟件開發符合ISO 26262 功能安全標準
- 1.61 MB | 1次下載 | 免費
- 3AN148 GD32VW553射頻硬件開發指南
- 2.07MB | 1次下載 | 免費
- 4PZT驅動開關電路
- 0.09 MB | 1次下載 | 免費
- 5模擬電路仿真實現
- 2.94MB | 1次下載 | 免費
- 6PCB繪制基礎知識
- 2.44MB | 1次下載 | 免費
- 7EE-38:ADSP-2181 IDMA端口-周期竊取時序
- 75.0KB | 次下載 | 免費
- 8EE-82:使用ADSP-2181 DSP的IO空間對另一個ADSP-2181進行IDMA引導
- 86.86KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 452次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 139次下載 | 1 積分
- 3基于STM32單片機智能手環心率計步器體溫顯示設計
- 0.10 MB | 132次下載 | 免費
- 4美的電磁爐維修手冊大全
- 1.56 MB | 24次下載 | 5 積分
- 5如何正確測試電源的紋波
- 0.36 MB | 19次下載 | 免費
- 6感應筆電路圖
- 0.06 MB | 10次下載 | 免費
- 7LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 9次下載 | 1 積分
- 8萬用表UT58A原理圖
- 0.09 MB | 9次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論