嵌入式系统中文输入法的设计_第1页
嵌入式系统中文输入法的设计_第2页
嵌入式系统中文输入法的设计_第3页
嵌入式系统中文输入法的设计_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统中文输入法的设计嵌入式系统中文输入法的设计 引言 目前 以 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 py 7 本节点的拼音字符串 struct py subnode prev 指向前一 PY SUBNODE 的指针 struct py subnode next 指向下一 PY SUBNODE 的指针 unsigned 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 的多任务

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论