那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于μC/OS-II與MCU實現中文輸入法的設計

電子設計 ? 來源:中國電子網 ? 作者:佚名 ? 2020-03-03 07:59 ? 次閱讀

引言

目前,以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按雙向鏈表組織。

基于μC/OS-II與MCU實現中文輸入法的設計

以下是兩個結構的定義:

基于μC/OS-II與MCU實現中文輸入法的設計

設計中我們所參照的漢語拼音表中共有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的應用場合多是低成本的設備,當商用輸入法的成本無法接受或無法得到時,自行編寫輸入法應是可行的。當然,本文所討論的只是實現輸入法的基本方法,雖然方法可行,但所編寫的輸入法代碼應經過較長時間的測試才可以作為產品的正式軟件發布。

責任編輯:gt


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 人機交互
    +關注

    關注

    12

    文章

    1217

    瀏覽量

    55533
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17323

    瀏覽量

    352652
  • 操作系統
    +關注

    關注

    37

    文章

    6896

    瀏覽量

    123749
收藏 人收藏

    評論

    相關推薦

    【AWTK使用經驗】如何添加中文輸入法

    目前需要在AWTK程序中用到中文輸入法,并且要自定義輸入法的聯想詞,此時需要用到AWStudio添加軟鍵盤和輸入法。下面將介紹如何使用AWStudio在項目中添加
    的頭像 發表于 06-20 08:25 ?1122次閱讀
    【AWTK使用經驗】如何添加<b class='flag-5'>中文輸入法</b>

    中文輸入法在B超系統中的應用

    中文輸入法在B超系統中的應用本文對中文輸入法在B超系統中的實現進行了介紹。 在計算機迅速發展和普及的今天,用計算機對漢字進行輸入、編輯和處理已經非常普遍了。在醫療電子產品中,越來越多的
    發表于 11-30 10:15

    求wince中文輸入法

    各位大神,求一個wince的免費中文輸入法,能分享一下嗎
    發表于 06-24 08:50

    如何實現ARM-LINUX嵌入式設備上的中文輸入法

    如何實現ARM-LINUX嵌入式設備上的中文輸入法
    發表于 12-23 06:15

    OKMX6UL-C開發板自帶linux系統怎么安裝中文輸入法

    請問一下,OKMX6UL-C開發板自帶linux系統,怎么安裝中文輸入法
    發表于 01-11 06:37

    如何去實現RK3399 ARM開發板添加中文輸入法的功能呢

    如何去實現RK3399 ARM開發板添加中文輸入法的功能呢?
    發表于 03-07 06:53

    KICAD6與中文輸入法沖突

    目前在多臺電腦試過,windows10開中文輸入法,即使是英文輸入狀態,操作KICAD6會卡死,現象就是鼠標沒反應了,啥也做不了,只能結束進程。多臺電腦驗證過了。windows11開中文輸入法,KICAD6不崩潰,兩臺電腦驗證過
    發表于 04-30 11:55

    【飛凌RK3568開發板試用體驗】添加中文輸入法

    由于英文版的ubuntu20沒有安裝拼音、五筆輸入法,經過查詢資料,把中文輸入法解決了,這里記錄一下,以便后來查詢:1、先把fcitx徹底卸載:sudo apt remove fcitxsudo
    發表于 11-29 20:57

    嵌入式中文輸入法設計

    本文比較了嵌入式系統中拼音輸入法和筆畫輸入法的優缺點,介紹了嵌入式系統中的中文輸入法的基本設計思想。本文重點介紹拼音輸入法的設計思想,并針對傳統拼音
    發表于 06-19 08:29 ?41次下載

    μC/OS-II在PC機上移植的設計與實現

    本文介紹了μC/OS-II移植到PC機上的過程,使μC/OS-II應用系統程序在PC機上脫離DOS或Windows環境運行。著重介紹了Bootloader引導程序和EXE程序啟動代碼的
    發表于 09-02 08:51 ?14次下載

    手機中文輸入法

    手機中文輸入法              中文輸入法
    發表于 12-19 13:58 ?547次閱讀

    掌上電腦中文輸入法有哪些?

    掌上電腦中文輸入法有哪些?             掌上電腦有多種文
    發表于 12-21 17:36 ?1740次閱讀

    電腦辭典中文輸入法及其他功能

    電腦辭典中文輸入法及其他功能  中文輸入法     
    發表于 12-22 11:45 ?870次閱讀

    中文輸入法在B超系統中的實現

    本文對中文輸入法在B超系統中的實現進行了介紹。 字庫設計 通常的漢字顯示方式是:先用字模軟件提取所需要的漢字點陣,取得的數據可放入ASM匯編文件中,接著
    發表于 09-16 11:12 ?1068次閱讀
    <b class='flag-5'>中文輸入法</b>在B超系統中的<b class='flag-5'>實現</b>

    基于Qt/E的中文輸入法的設計

    隨著嵌人式系統在信息家電、移動通信、手持設備以及工業控制等眾多領域的廣泛應用,國內用戶對支持中文輸入法的輕量級GUI的需求日益迫切。
    的頭像 發表于 12-06 07:44 ?4743次閱讀
    基于Qt/E的<b class='flag-5'>中文輸入法</b>的設計
    来博百家乐游戏| 宝龙百家乐官网的玩法技巧和规则 | 太子娱乐城开户| 澳门百家乐官网怎么看小路| 大西洋百家乐官网的玩法技巧和规则| 百家乐筹码500| 大发888网页出纳柜台| 赌百家乐官网心里技巧| 百家乐官网平台| 百家乐规律打| 百家乐官网连闲几率| 澳门百家乐官网765118118| 威尼斯人娱乐城排名| 和平区| 百家乐官网博弈指| 百家乐具体怎么收费的| 百家乐官网筹码样式| 2024年九宫八卦吉位| 大发888资讯网net| 百家乐官网博彩资讯论坛| 百家乐有好的投注法吗| 百家乐官网庄家怎样赚钱| 百家乐澳门赌| 365体育在线投注| 百家乐官网技巧辅助软件| 做生意房门挂啥招财| 大发888娱乐场下载官方| 视频百家乐官网信誉| 蓝盾百家乐赌场娱乐网规则| 遂昌县| 百家乐光纤洗牌机如何做弊| 太阳城娱乐城下载| 迪威百家乐官网娱乐平台| 百家乐赌博筹| 凤凰百家乐官网娱乐城| 百家乐游戏机路法| 百家乐官网机器二手| 澳门百家乐赢钱公式不倒翁| 青岛市| 百家乐解密软件| 百家乐官网澳门百家乐官网|