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

    文章

    1207

    浏览量

    55396
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17143

    浏览量

    351124
  • 操作系统
    +关注

    关注

    37

    文章

    6818

    浏览量

    123321
收藏 人收藏

    评论

    相关推荐

    【AWTK使用经验】如何添加中文输入法

    目前需要在AWTK程序中用到中文输入法,并且要自定义输入法的联想词,此时需要用到AWStudio添加软键盘和输入法。下面将介绍如何使用AWStudio在项目中添加
    的头像 发表于 06-20 08:25 1044次阅读
    【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 544次阅读

    掌上电脑中文输入法有哪些?

    掌上电脑中文输入法有哪些?             掌上电脑有多种文
    发表于 12-21 17:36 1731次阅读

    电脑辞典中文输入法及其他功能

    电脑辞典中文输入法及其他功能  中文输入法     
    发表于 12-22 11:45 859次阅读

    中文输入法在B超系统中的实现

    本文对中文输入法在B超系统中的实现进行了介绍。 字库设计 通常的汉字显示方式是:先用字模软件提取所需要的汉字点阵,取得的数据可放入ASM汇编文件中,接着
    发表于 09-16 11:12 1040次阅读
    <b class='flag-5'>中文输入法</b>在B超系统中的<b class='flag-5'>实现</b>

    基于Qt/E的中文输入法的设计

    随着嵌人式系统在信息家电、移动通信、手持设备以及工业控制等众多领域的广泛应用,国内用户对支持中文输入法的轻量级GUI的需求日益迫切。
    的头像 发表于 12-06 07:44 4683次阅读
    基于Qt/E的<b class='flag-5'>中文输入法</b>的设计