XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法…

XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法

      

 

一. 综述

    

  所谓T9,指的是在手机上广为流传的九宫格输入法。中文输入法大家每天都在使用,那么多大的空间才能承载一个输入法呢狗安装包已经20M了,手机版本的也有2M。但我会告诉你,实现中文输入法仅需要14KB的存储空间和不到100byte的内存。虽然没有联想,并只支持拼音,但已经足够surprising了~ 

  以下是它的运行时实物截图:

   

  

它具有如下特点:

  •   低内存和低CPU占用
  • 支持摇动系统旋转输入字符(需陀螺仪支持)
  • 支持中英文混合输入
  • 由于物理按键不足,因此采用了屏幕虚拟键盘

    与XMOVE手持终端相关的介绍文章列表如下:

  系统综述: 自制的彩屏手持动作感应终端

  软件介绍(一):精简型嵌入式系统的菜单实现和任务切换  

  软件介绍(二):在2KB内存单片机上实现的彩屏GUI控件库

  软件介绍(三):在2KB内存单片机上实现的俄罗斯方块

  软件介绍(四):在2KB内存单片机上实现的超精简五子棋算法

  软件介绍(五):在2KB内存的单片机上实现的T9中文输入法

二. 数据结构和数据

  

  从直觉来说,实现输入法的必要条件是建立索引,因为中文常用词就已经两三千。同时,应该在没有完成拼音输入之前就能获得可能的结果,例如,输入zhua,那么系统会提供来自zhua,zhuang,zhuan的汉字显示,而并非仅仅提供zhua。

  通常的手机输入功能是这样的:

  我们可以朴素的思考,我们建立一组拼音字符串(如”zhua”)与相应汉字列表(如“抓爪…”),那么每次更新拼音字符串后,就只需要搜索匹配的汉字列表了。但实际上问题并非这么简单,这个表可能有200多条(可能的拼音字符串就有200种,没有仔细统计过),每次都在这里搜索,无疑会很慢。为了提升速度,应该将该表进行分割,通常可以根据按下的第一个键分割成10个拼音索引表。这样每组表只有20多个,大大提升了搜索速度。

  数字按键组合,组合成16进制,比如按键246则为0x246。

    通过这些基本思想,我们确定如下的数据结构。

  1. 必要的结构体定义

  相关信息都在注释上解释清楚了。

  2. 汉字排列表 

//下面是英文对应的排列表
const unsigned char PY_mb_abc []={“abc”};

    汉字排列表较容易理解,就是某拼音下对应的汉字数组,注意加上了const。在单片机环境中它会默认存储在flash中而不是内存,这样可以优化存储。

  3. 拼音索引表

    所谓拼音索引表一共有10个,本节的第一部分就介绍了拼音索引表的用途。以及如下的表:

  

三. 主流程实现

  1. 输入法任务初始化

  初始化主要设置为默认拼音,输入的拼音字符串和长度默认归零。

  2. 查找索引

  3. 通过用户输入标识(input_data)实现判断和相关操作:

  由于不同的平台,用户输入是完全不同的,因此本部分仅供参考。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年1月26日
下一篇 2017年1月28日

相关推荐