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进行处理,非常感谢!