嵌入式中文输入法解决方案

(4)笔画汉字编码表。根据不同笔画组 合匹配出所有可能的汉字编码.匹配列表 输出时需要考虑到汉字排列的优先级。
(5)联想词组编码表。该编码表提供所 有常用汉字词组的编码组合列表,另外还 要提供声母组合和前2个笔划组合这两种 索引方法.以方便快速检索词组。
(6)汉字优先级编码表。对常用的I 500 个左右的汉字根据使用频率由高到低进行 排列,构造相应的编码表,方便匹配汉字时 根据此编码表依次取字。
(2)根据拼音组合获取汉字功能- 该编码表由拼音编码(这里拼音编码 与前面的拼音编码是一致的,只是以16进 制表示而已)、拼音.汉字列表(按字拼排 列),示例如下t 拼音编码拼音键码汉字列表 ox0040 ba 22把.八,吧,爸,拔。 罢.跋。巴。……
洼:设计时要将s和sh等发音容错考虑
进去。
(3)根据输入数字键获取部首功能·
的算法提供数据支持,把输入法算法引擎 部分Eu和数据部分DU分开也是为了便于 输入法在具有不同存储结构和操作系统的 平台上移植。Du部分根据现有引擎的要求 可大致分为拼音组合分类表、拼以说明:
(I)拼音组合分类表。该分类表主要根 据数字键2,3。4,5,6,7,8,9的不同组合匹配 出所有可能的拼音组合列表,如数字键组 合2,3.-f以匹配出ce,ben.bei,ceng等拼音.
词组中的所有字前1个(或2个)笔画+最后 一个字全笔画,以数字。或长按笔画键间隔.数 字0或长按笔画输入后就开始出现词组t
3)拼笔和笔划词组编码表 词组编码表是快速、正确获取相应词 组的关键。该编码表的结构由词组编号,词 组汉字列表、拼笔词组元素表,笔画词组元 素表、词频(0~255)构成,示例如下: 编号词组列表拼笔元素表笔画 元素表词频 0x01 A0一气呵成9742013554
说明:l、2、3、4、5分别代表横竖擞点 折,实际设计时可将最后一个字的笔画单 独列出来给拼笔字组和笔画词组共用。以 节约空间.
4 UI部分设计 UI部分第一版本的设计基于smart
phone平台上实现,编程语言确定为EVC4. 0。输入法类型以长按·键切换ll,2,3,4,5 键分别对应笔画横竖撇点折-2、3、4、5、6、 7.8、9S1分别对应英文字母(或拼音)abc。 clef。ghi,jⅪ。mno.pqrs.tuv,wxyz。
分别为UI、EU和DU,其中UI单元是和用户 界面交互的部分,可以根据不同手机平台 进行相关界面参数调整和移植;EU和DU部 分为正确获得输入法相关数据提供了底层 数据和函数接口方面的支持,EU作为输入 法的核心单元一般需要封装为Lib库。这样 可以保护知识产权。
2 DU部分设计 DU部分主要是为输入法引擎EU部分
(1)根据输入数字键获取拼音组合功能· 该功能主要依据DU部分的第一张表 来实现.以下给出拼音组合种类及对应键 码组台的示例,比如输人24健的时候就会 输出ai,bi.bin等拼音组合。
a,ao,
2。26。
为了节约空间,对上述拼音组合按双 字节数进行编码,即16bit,前12个为拼音编 码,13~14bit为音调,最后2个bit为系统保 留且默认为OO.
集》.中华人民共和国国家标准总局 1981年5月
86
科技创新导报Science and Technology Innovation Herald
万方数据
堡婴鲨竺坐业::业::竺 工程技术 嵌入式中文输入法解决方案
黄德强 丁伟 (解放军理工大学理学院电子信息基础教研宣 江苏南京 2'”0”
擒要:当前主流的嵌入式中文督八法一麓耒用盼是嗣外的并凌方案.如eZI.T9、iTap乎,■产簟八汝目酋置蒜乞有|I多种,但由于
用户使用习惯和技术不成南f屎因.很少有真正移植到手机上的,本文蛤出7一种中文簟八法杆决方童.井已^功特其移植纠一苁t
3 EU部分设计 EU部分是实现输入法各种功能的核
心,是根据用户输入的键值和参数,查找 DU部分的备类码表,然后获取相应查询结 果提供给UI层进行处理.为了方便以后在 不同的嵌入式平台上移植,拟采用c语言实
现其全部算法。为了减少UI编程对引擎功 能的调用复杂度,该部分对外只提供一个 算法接口,该接口既可以实现智能英文输 入·也可以实现双字节字符输入。内部调用 的各类算法接口对UI层屏蔽,实现方莹和 具体编程有关,不在这里具体描述。可以将 EU部分划分为以下功能模块:
镌手机上。但由于时阿仓促.还有掘多地方迸有来得厦进一步完●和走进。希置在3G时戎捌来之际.■产中文■入法可以真正太妃摸进八
3G和其它嵌入式垮葛赣域。
关键词:嵌入式廿人诲 3G手机 智鼍匈扭蕾人
中圈分类号:T P 3
文献标识码:A
文章编号:l●7l—098x(2¨9)oT(t)一008B—Ol
1系统结构 下图将输入法划分为3个不同的层次,
l,2、3、4、5分别代表横竖撇点折,该编
码表由部首编号、部首、键码组合等构成.
示例如下:
部首编码部首键码
0x1061
¨
52
(4)根据笔画和部首组合获取汉字功能, 该编码表由汉字、笔画部首列表。考虑 到汉字笔画组合的多样性。该编码表以汉 字笔划为索引,并按顺序排列,示例如下: 笔画部首列表 汉字 l— 12丁
(5)根据当前输入的汉字编码获取联想
汉字功能t

(6)词组输入功能
1)拼音+笔画输入词组
词组中的所有字首字母(或声母)+第一 个字垒笔画,以数字0或长按笔画键闻隔,数
字0或长按笔画输人后就开始出现词组· 2)笔画输入词组
参考文献 【1】《汉字内码扩展规范》.中华人民共和国
全国信息技术标准化技术委员会1995 年12月 【2】《信息交换用汉字编码字符集 基本
(2)拼音汉字编码表。该编码表主要根据 拼音组合匹配出对应的汉字编码列表,必要 时需要把一些方言的发音考虑进去,以提高 汉字输入效率。如拼音组合bei配的汉字 有“被”。。北”,。背”等.但根据匹配列表产生 输出时需要考虑到汉字排列的优先级。
(3)笔画组合分类表.五个最基本笔匾 的定义分别为横竖撇点折,该分类表主要 是根据输入的五个数字键(对应五个最基 本笔划)若干种组合,进而列出该组合下所 有可能的复杂笔画组合。
输入法类型分为拼音、笔画.基本英 文、智能英文、数字、符号五个基本类型。其 中拼音输入法包含拼笔词组输入法,通过 长按最后一个宇首笔或短按间隔符0来实 现自动切换。笔画输入法包含笔画词组输 入法。也是通过长按最后一个字首笔或短 按间隔符0来实现自动切换.
S结语 本中文输入法的特点就是汉字联想和
词组输入功能强,这个比较符合汉字输入 的习惯和特点,一般用户不需要经过特别 训练即可快速掌握其输入方法。由于时间 仓促,笔者只对基本的输入功能进行了验 证,拼音、笔划和词组输入已基本可用,但 还需要进一步测试和验证.另外需要说明 的是,本文中用到的检索算法均为2分法, 还有进一步优化的空间.
合集下载

基于Linux嵌入式系统的拼音输入法设计

基于Linux嵌入式系统的拼音输入法设计

基于Linux嵌入式系统的拼音输入法设计基于Linux嵌入式系统的拼音输入法设计摘要嵌入式系统作为自动化信息的一个非常重要的领域,已经深入到社会的每个方面,关涉到电力电子、医疗、机械、电气和安全类等行业。

很多人不知道嵌入式技术的优势,其实嵌入式技术出现至今,尤其是近二十年的趋势跟发展,取得了非常巨大的成就,简单来说,对于一款具有优秀的嵌入式系统的产品,设计出一款基于QT设计的简洁、操作简单的图形界面也是对每个设计师的要求。

中国如今是拥有最多使用输入法人数的国家,而输入法也是越来越全龄化并且贴近生活,因此用户拥有一款支持拼音输入法的GUI系统是当今的需求,它的发展会促进各方面的进步,也是如今人们越来越期待的需求。

本文一开始阐明了嵌入式的相关知识与Linux操作系统,及嵌入式产品的发展历史和现今状况,对嵌入式技术行业在我国的需求现状进行深入的讨论。

之后详尽概述了拼音输入法设计的实现环境(Qt5.7)、连带知识、输入法开发的原理等。

并在此基础上完成GUI系统的设造以及拼音输入法的调试和使用。

最后设计出一款具有优秀界面(软键盘)的linux拼音输入法。

拼音输入法可以实现基本的拼音输入、中英转换、删除更改等功能。

关键词:拼音输入法;嵌入式;Linux;Qt5.7;GUI系统 The Design and Implementation of ChineseSpelling Input Method in Embedded LinuxSystemAbstractEmbedded system as an important field of automation information, has deep into every aspect of society, involves the power electronics, medical, mechanical, electrical and safety etc, the embedded system have a largedevelopment potential.Especially,embedded technology appearin recent twenty years with the trend of development, has achieved great success. In general, In order to develop a product with excellent embedded system,The design of a simple and easy to operate QT graphical interface is also a requirement for each designer. China is the country with the largest use of the number of Chinese spelling input method, which is also increasingly social and close to life, so it is the demand for the user to have a GUI systems that support the input method, which will promote the development of all aspects of progress, and now there is a growing expectation of the product.This dissertationfirst describes embedded knowledge and Linux operating system, and the development history and current status of embedded products, the demand for embedded technology industry in our country present situation in-depth discussion. The implementation environment (Qt5.7), related knowledge and the development of input method are summarized in detail. The design of GUI system and the development and use of pinyin input method are completed. Finally, a good graphic interface (soft keyboard) is designed for the Linux Chinese spelling input method. It can realize basic shelling input, Chinese and English translation, delete change and so on.Key words: Pinyin input method;embedded;Linux;Qt5.7;GUI system 目录1. 绪论 11.1拼音输入法的目的和意义 11.2嵌入式输入法国内外现状 21.3课题研究及发展动态 32. 拼音输入法开发环境 32.1嵌入式系统 32.1.1嵌入式历史及发展趋势 32.1.2嵌入式的普及 42.2LINUX系统 52.2.1LINUX的发展历史 52.2.2UBUNTU系统 62.3 LINUX系统总述 62.3.1GUI在嵌入式系统的应用 62.3.2GUI系统的层级结构 72.3.3GUI系统的设计准则 82.4QT5.7 92.5MINI2440开发板102.5.1ARM920T微处理器芯片102.5.2MINI2440介绍102.5.3 LINUX图形界面QTOPIA 2.2.0系统(预装) 113. 拼音输入法综述123.1拼音输入法简介123.2拼音输入法技术124. 拼音输入法的实现134.1设计思路134.2开发环境的装设144.3拼音输入法基本原理及编程语言174.4软键盘设计184.5按键功能实现194.6开发板移植调试194.7运行195. 故障分析及解决方案205.1 问题分析205.2 解决方案216. 结论与展望216.1 结论216.2 展望21参考文献23致谢24附录A设计程序25附录B 运行界面371. 绪论1.1拼音输入法的目的和意义现在随着科技文明的不断进步,智能设备、人工智能用具开始被人们所向往,同时也是将来必然的方向,拥有好的需求市场前程。

T9输入法在嵌入式设备中的实现方案

T9输入法在嵌入式设备中的实现方案
的 数 字 串输 入 , 可 以 对 目标 文 字 进 行 查 找 和 锁 定 , 从 而 实现 了 中 、 英文的输入功能。
关 键 词 :T9输 入 法 ; S TM3 2 ; 映射 ; 码 表 查找 ; 数 据 结 构
中 图 分 类 号 :TP 3 9 3 / TN9 1 9 文 献 标 识 码 :A



图 1 系统 硬 件 方 框 图
字) 进 行 人 机交 互 , 但 是 可用 的键 盘 已定 型 固化 而 且 按 键 极 其有 限( 仅 有 7个 ) 。根 据 T9输 入法 的基 本 原 理 , 研 究 了一
种 利 用 有 限 键 盘 资 源实 现 输 入 汉 、 英 文 字 的方 案 。
专 题 论 述
T 9输 入 法 在 嵌 入 式 设 备 中 的 实 现 方 案
李 文军 , 于 明浩 , 王新 征 , 郑 振 华
( 总参 通信 训 练基 地 , 宣化 0 7 5 1 0 0 )
摘 要 :文 字输 入 是 人 机 交 互 的基 本 方 式 , 而 中文 输 入 法 在 其 中 占有 重 要 地 位 。本 文 基 于 资 源 有 限 的 S TM3 2嵌 入 式 开 发 环 境 和 T9输 入 法 基 本 原 理 设 计 了一 种 中 英 文输 入 法 的 实 现 方 案 。 通 过 对 程 序 和 码 表 的设 计 , 结 合 键 盘 和 TFT显 示屏
r e a l i z e d . Key wor d s: T9 i n put me t h od; STM 32; ma p pi ng; t a b l e l o oku p; da t a s t r uc t u r e
引 言

(VR虚拟现实)基于AVR单片机的嵌入式拼音输入法

(VR虚拟现实)基于AVR单片机的嵌入式拼音输入法

(VR虚拟现实)基于AVR 单片机的嵌入式拼音输入法LCD显示-----拼音输入法成员:梁林荣孙丰沛任祥祥一、设计背景随着近年来嵌入式设备的广泛应用,人们对其要求变的丰富多样,而不仅限于简单的控制操作了。

越来越多的界面友好,富有人性化的设计开始出现在嵌入式设备上,如智能手机收发电子邮件、编写文档、车载GPS导航查询等等。

所有的这些都离不开人机交互,因而嵌入式设备的汉字输入法应运而生,足以满足人们对复杂信息的处理交换要求,而且更加直观易用。

二、设计思路对于市面上现有的嵌入式设备,其拼音输入法大多数是基于操作系统的,如智能手机等设备基于Windows或Linux操作系统,一般的手机也多基于简化Linux系统,即使是电子词典等设备也有其单独设计的简化操作系统。

基于操作系统下的输入法设计是比较简单的,因为许多底层函数接口都已经由操作系统提供给设计者了,只需要通过调用相应的函数就可以完成输入法的设计。

我们所完成的汉字拼音输入法是基于AVRAtmeg16单片机的,限于硬件的规格,其本身没有操作系统,也不太可能在其上扩展操作系统,所以在设计时是相对困难的,从最底层的LCD显示函数、键盘输入函数到拼音查找字模检索算法等都需要一一设计完成。

而据我们了解,在现行的不具备操作系统的嵌入式设备中,很少有已经完整并成功开发的汉字拼音输入法,但这些设备有时是需要人机交互的,汉字拼音输入法将使其易用性大大提高。

因此,我们的设计弥补了现有市场的一个空白,而其设计思路完全可以应用的其它任何不具备操作系统的简单的嵌入式设备中去,在较小的资源占用下就可以完成拼音输入法的设计,满足人们与简单设备的交互要求。

三、设计方法1,硬件设计A.微程序控制模块采用Atmel公司的Atmaga16单片机作为主控制器。

Atmaga16是一个低功耗,高性能的8位单片机,片内含16k空间的可反复擦写100,000次的Flash存储器,具有1Kbytes的随机存取数据存储器(RAM),32个IO口,2个8位可编程定时计数器,1个16位可编程定时计数器,四通道PWM,内置8路10位ADC,硬件SPI 和TWI,可编程看门狗电路,抗干扰能力强,可在电磁干扰环境下工作。

嵌入式Linux下中文字体显示

嵌入式Linux下中文字体显示

嵌入式Linux下中文字体显示1). 简介嵌入式平台默认发布的嵌入式Linux版本通常并不包含中文字体支持,本文就通过Tor ad ex计算机模块平台来演示如何添加中文字体的显示,因为Toradex的Linux发布是基于OpenEmbedded/Yocot 项目编译的,因此这里也同样通过OpenEmbedded/Yocot 项目编译带中文字体的定制化BSP。

2). 步骤a). 首先,需要配置好 OpenEmbedded 编译环境,具体步骤参考这里的说明。

b). 修改OpenEmbedded 目录中laye rs/meta-toradex-demos/recipes-images/images/angst rom-lxde-image.bb 文件---------------------------------------//增加中文语言IMAGE_LINGUAS = "en-us zh-cn"//增加中文字体FONT_CHINESE = "t tf-droid-sans ttf-droid-sans-fallb ac k ttf-droid-sans-mono ttf-droid-serif freetype"//将中文字体添加编译的镜像IMAGE_INSTALL += "gconfgnome-vfs…...alsa-states${IMAGE_BROWSER}${FONT_CHINESE}"---------------------------------------c). 重新编译镜像文件---------------------------------------bitbake angstrom-lxde-image---------------------------------------在开始编译之前,需要修改local.conf 文件,选择你所使用的开发板类型。

嵌入式系统中多国语言显示的一个解决方案

嵌入式系统中多国语言显示的一个解决方案
宕Cr } E en
K y o d :mb d s se c a a t r t r ro c aa t r d . NI e w r se e y tm, h r c e s so e o m,h r ce s mo e U CODE GB 31 , 2 2
对于P C来说 , 出字符是非常简单的 , 在一些嵌人式 系 输 但
统 的人 机 界 面 中 , 符 的实 时 输 出是 很 困 难 的 。 多 只 能 显示 事 字 大 先 已取 好 字 模 点 阵 的 字 库 ,但 是 每 个 1 x 6汉 字 点 阵 由 3 61 2个 字 节 表 示 , 于 需 要 灵活 使 用 大 量 汉 字 的场 合 , 储 量 太 大 , 对 存 实 现 起 来 浪 费空 间 ; 面基 于 对 汉 字 库 的结 构 进 行 分 析 , 计 一 种 下 设 实 用 的 字 库 及其 显 示 方 案 。
关 键 词 : 入 式 系统 , 库 , 模 , NC E G 2 1 嵌 字 字 U IOD B 3 2
Ab ta t sr c
N w d y h tr g n ipa f c a a t r n iee t ln u g h u e c n ie e n te r d c f e e o a a s t e so a e a d d s l o h r c e s i y df r n a g a e s o l b o s r d i h p o u t o mb d d d
1 符 编 码 简 介 11 U C E 编 码 . NIOD
件, 包括 字体 属 性 ( 、 )索 引 表 及 具 体 点 阵 信 息 。其 组 织 结 构 宽 高 、
可 以根 据 开 发 者 自己 编程 实 现 的需 要 而 定 。 文 件 准 备 好之 后 , 源

嵌入式系统中文输入法的设计

嵌入式系统中文输入法的设计

⽬前,以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”、“*”、“#”键则作为输⼊法中的控制键。

基于SCIM的嵌入式输入法设计与实现


的 N N L S A D F A H。系统通过 bol drUb o 引导 内核启动 , ot ae —ot o
0 引 言
输入法是手持嵌入式设 备 的一 个重 要组成 部分 , 然而 在手 持设 备上的中文输入法屈指可数 , T g o muiao s 如 ei C m nctn 的 e i 输入法 、 t o Mo rl iA o a的 T P输入 法和 Eis n的字能输 入法 等 , r s co 它 们的输入 技术 相对滞后 ” , 而且 它们都 是 以第 三方 固件 的方 式发布 , 并不开 源 , 因此移 植性 不好 。在 目前 的 Lnx系统 中 , iu SI C M输 入法以其在结构 、 能 、 性 可扩展性上 的优 势成为 了 Ln x iu 操作系统 中主要的开源 中文 输入法 , 在图形 化 的界 面下 可 以提 供给用户很好 的使 用 习惯 , 在个 人 P C上 获得 了广泛 的应 用 。 鉴于 S I 的开源 、 移植 、 CM 易 易扩展 、 能强大 的特性 , 文提 出 功 本 基于 S I 的嵌入式输入法 的设计 和实现方法 。 CM
te d v l p n o r a e n te mir p o e s r¥ C 4 0 n h C t o c s r e . h ae tL n x 2 6 k r e sp r d a d te h e e o me t a d b s d o h c o rc s o 3 2 4 A a d t e L D wi tu h ce n T e lt s iu . e n li ot n h b h e Ma c b x d s t p s se i u e . s t e e p rme ti d c t s p r d a d o t z d S I i p tme h d u e e sr s u c ,t ssa l n f th o e k o y tm s s d A h x e i n n ia e , ot n p i e C M n u t o s sl s e o r e i i t be a d o e mi ge t au n p p lrs t n r a l e i o u aia i . v o Ke wo d y rs S I i p tmeh d Ma c b x d s t p s se C M n u t o th o e k o y tm ¥ 2 4 A L n x . 3 4 0 iu 2 6 C

基于VxWorks嵌入式系统的中文平台研究与实现


基于 V Wo s x r 嵌入式系统的中文平台研究与实现 k
杨 远宾 , 刘 炯
( 中国航 天科 工 集 团第二研 究 院 76所 ,北 京 105) 0 084
摘 要: 绍 了Vx rs 介 Wok 嵌入 式操作 系统 的 中文 平 台的原 理 和组件 式 实现 方法 , 述 了点阵字体 , 概 矢量字 体的基 本知 识 、 设
计 方法和输 出过程 , 出 了中丈输入 法 的解 决方案和 中文 平 台在 V Wok 系统 中的位 置关 系, 得在 Vx rs 给 x rs 使 Wok 操作 系统 上可
以 自由的使 用 中文 。 关键 词 : x rs 点 阵字体 ; 矢量 字体 ; TuT p ; FeT p ; 中文输 入 法 V Wok; re y e re ye
o terse dv co n eito u e , n dt es lt no f h atra e tr o t r d c d a oui fChn s n ut g p st no Chn s lto W ok mb d e n f a n r h o ie eip tn , o i o f ie epafr i Vx rse e d d i i m n
维普资讯
第 2 卷 第 2 期 7 0
VO127 . N O. 0 2
计算 机 工程 与设 计
Co p tr gn eiga dDe in m u e En ie rn n sg
ቤተ መጻሕፍቲ ባይዱ
20 年 1 06 0月
O c.2 0 t 0 6
的 中 文 平 台 , 现 Wi O S 台 的风 格 。然 而 , Wok 系 统 体 n W 平 d Vx rs
备 驱动 。 主要包括 输 出模 式设 置 、 标准输 入输 出控制 、 点线面 作 图等函数 。V Wok x rs系统 的点阵汉字 实现是利用 Wi ML n d

嵌入式系统汉字输入的实现方法

嵌入式系统汉字输入的实现方法这段时间做了个项目,要求有汉字输入,即类似手机的键盘输入,研究了一段时间,终于实现了,不敢独吞,拿出来与大家共享,如果有哪位需要,可以借鉴一下,少走些弯路.我会讲些实现的过程,要不然只给出结果不利于对这个过程的消化理解.帖子比较长,由于是在家里宽带上网,为了怕出现提交不成功浪费感情的事情,我把它拆成小的片段发布,敬请谅解.闲话少叙,进入正题!1。

简单知识中文输入发我不多说,大家都用过,目前嵌入式系统中比较典型的中文输入法有诺基亚的T9 、摩托罗拉的 i T A P 、爱立信的字能等,这些输入法的输入设备一般是数字键0 ~ 9和一些功能键组成。

除了支持中文的拼音和笔画外还支持诸如日文、韩文等其他国家的语言。

中文输入法可分为拼音输入和笔画输入。

一般情况下拼音输入法相对笔画输入法,重码率要高,但简单易用,(再加个模式识别进行手写输入就更高级了,呵呵),我这里也是拼音输入,由于空间有效,不支持联想功能.2. 硬软件硬件用的NXP的2138,LCD是台湾雄铎科技的,240*160,软件用的zlg的模板,uc2.52版,按键布局与手机一样,如"2"键为abc,"3"为def,等等3.前期准备3.1网上有许多的资料,给出了键盘数字组合对应的拼音组合和汉字组合,我也利用这个,如{"2","a",(char *)PY_mb_a},{"24","ai",(char *)PY_mb_ai},{"26","an",(char *)PY_mb_an},{"26","ao",(char *)PY_mb_ao},{"22","ba",(char *)PY_mb_ba},{"24","bi",(char *)PY_mb_bi},const char PY_mb_a[] ={"阿啊"};const char PY_mb_ai[] ={"矮蔼艾爱隘碍霭"};但有个问题,这个网上流传的拼音-汉字组合中汉字非常少,对于输入是远远不够的,比如说"汶川"的汶就没有,而且没有多音字,例如"还"的拼音属于"huan",你打"还"就没有,这对于输入是不可以接收的,下面我讲一下我的解决方法.先上传一下之前提到的这个文件py_file.rar (11.02 KB)3.2寻找所有汉字的拼音,这个如果打开字典一个一个的输,恐怕没有一个月是干不成了,庆幸的是有人替我们做好了,在万能五笔输入法中有一个拼音记录文件,几乎包括了所有的汉字,拿来所用py_gb.rar (264.6 KB)这个文件中,有许多词组,是我们不需要的,需要剔掉,但手工的方式工作量太大,这里我们发挥计算机比较傻的优势来做这件事,用到一些VC的基本知识,相信大家都有这个能力CStdioFile read_file,read_new_file;CStdioFile write_file;CString my_str,temp_str,tf="";read_file.Open( "py_gb.txt", CFile::modeRead,NULL ) ;write_file.Open( "new_py_gb.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;while (read_file.ReadString(my_str)){int i = my_str.Find(" ");if ((my_str.GetLength() - i) > 3){/* 是词组 */continue;}else{/* 保存到文件 */write_file.WriteString(my_str);write_file.WriteString("\n");}}read_file.Close();write_file.Close();原理也非常简单,如果是词组,汉字的个数肯定大于1,在vc中,一个ASCII占一个字节,一个汉字占两个字节,整理后的文件如下new_py_gb.rar (65.71 KB)3.3在文件new_py_gb.txt中,列出了每个字的拼音,如a 啊a 阿a 呵a 吖a 嗄a 腌a 锕a 錒aes 厑ai 爱ai 矮ai 挨ai 哎ai 碍ai 癌ai 艾ai 唉ai 哀ai 蔼到这里又产生一个问题,必须将所有的同音汉字组合在一起,例如拼音为a的,应该这样a啊阿呵吖嗄腌锕錒vc程序如下:read_file.Open( "py_file.c", CFile::modeRead,NULL ) ;read_new_file.Open("new_py_gb.txt", CFile::modeRead,NULL);write_file.Open( "zhenli.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;while (read_file.ReadString(my_str)){int i = my_str.Find(",");int j = my_str.Find(",",i);temp_str = my_str.Mid(i + 2, j - 3);CString save_str = temp_str;while (read_new_file.ReadString(tf)){int ll = tf.Find(" ");if (tf.Left(ll) == temp_str){save_str += tf.Right(2);}}write_file.WriteString(save_str );write_file.WriteString("\n");read_new_file.SeekToBegin();}原理就是把所有拼音相同的字组合在一起,这个过程比较慢,需要耐心等待,不要以为程序死掉了,呵呵,生成的zhenli.txt文件如下:a啊阿呵吖嗄腌锕錒e饿哦额鹅蛾扼俄讹阿遏峨娥恶厄鄂锇谔垩锷阏萼苊轭婀莪鳄颚腭愕呃噩鹗屙亚亜亞伪佮侉偔偽僞僫匎匼卾吪呝咢咹哑唖啈啊啐啞噁囐囮垭埡堊堨堮妸妿姶娾娿媕屵岋峉峩崿庵廅悪惡戹搕搤搹擜曷枙椏櫮欸歞歹歺洝涐湂玀珴琧痷皒睋砈砐砨砵硆硪磀礘胺蒍蕚蘁蚅蝁覨訛詻誐諤譌讍豟軛軶輵迗遌遻邑鈋鋨鍔鑩閜閼阨阸隘頞頟額顎餓餩騀鬲魤魥鰐鰪鱷鴳鵈鵝鵞鶚齃齶齾…………zhenli.rar (51.9 KB)3.4又产生一个新问题,里面的字太多了,许多生僻的字连GB2312编码中都没有,这些字对于应用是没有用的,必须剔除,于是:找到GB2312编码的所有汉字啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥GB2312.rar (11.01 KB)为了方便,做进一步的整理,将一个段位的所有字放到一行中:啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳read_file.Open( "gb2312.txt", CFile::modeRead,NULL ) ;write_file.Open( "gb2312_new.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;int i = 0;while (read_file.ReadString(my_str)){if (my_str == ""){continue;}i++;tf += my_str;if (i == 6){write_file.WriteString(tf);write_file.WriteString("\n");i = 0;tf = "";}}gb2312_new.rar (471 Bytes)3.5对比GB2312中有的汉字,依次查找zhenli.txt中的每个汉字是否是有效的,在这里我做了个假设,如果一个拼音下的某个汉字不存在,z则其后的汉字也不存在,即e饿哦额鹅蛾扼俄讹阿遏峨娥恶厄鄂锇谔垩锷阏萼苊轭婀莪鳄颚腭愕呃噩鹗屙亚亜亞伪佮侉偔偽僞僫匎匼卾吪呝咢咹哑唖啈啊啐啞噁囐囮垭埡中,“亜”不存在,则其后的字都剔除,这样是合理的,以为即使某个字存在,他的拼音现在也不用了read_file.Open( "gb2312_new.txt", CFile::modeRead,NULL ) ;read_new_file.Open("zhenli.txt", CFile::modeRead,NULL);write_file.Open( "valid_chinese.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;CString gb2312_buffer="";while (read_file.ReadString(my_str)){gb2312_buffer+=my_str;}while (read_new_file.ReadString(my_str)){int i = 0;char * p_str = my_str.GetBuffer(0);CString used_in_str="";/* 去掉行首的拼音*/while (!(*p_str & 0x80)){p_str++;i++;}used_in_str = my_str.Left(i);temp_str = my_str.Right(my_str.GetLength()-i);for (i = 0;i < temp_str.GetLength();i++,i++){tf = temp_str.Mid(i,2);/* 在GB2312的文件中查找是否存在*/if (-1 == (gb2312_buffer.Find(tf))){/* 没发现此字,则认为后续的字都不存在*/write_file.WriteString(used_in_str);write_file.WriteString("\n");break;}used_in_str+=tf;}}生成的文件为a啊阿呵吖嗄腌锕e饿哦额鹅蛾扼俄讹阿遏峨娥恶厄鄂锇谔垩锷阏萼苊轭婀莪鳄颚腭愕呃噩鹗屙m呒n嗯o哦喔噢…………附件valid_chinese.rar (13.49 KB)2008-5-25 10:28, 下载次数: 843.6将valid_chines.txt中的格式向py_file.txt中的格式靠拢read_file.Open( "py_file.txt", CFile::modeReadWrite,NULL ) ;read_new_file.Open("valid_chinese.txt", CFile::modeRead,NULL);write_file.Open("new_py_file.txt", CFile::modeWrite | CFile::modeCreate,NULL);while (read_new_file.ReadString(my_str)){int i = 0;char * p_str = my_str.GetBuffer(0);CString used_in_str="";/* 去掉行首的拼音 */while (!(*p_str & 0x80)){p_str++;i++;}used_in_str = my_str.Right(my_str.GetLength() - i);/* 将第一个字去py_file.txt中寻找,找到后将本字符串替换到文件中 */tf = used_in_str.Left(2);CString ss;read_file.SeekToBegin();while (read_file.ReadString(ss)){if (ss.Find(tf) != -1){/* 找到第一个"位置 */CString new_ss = ss.Left(ss.Find("\"") + 1);new_ss += used_in_str;new_ss += "\"};\n";write_file.WriteString(new_ss);break;}}}但发现有一个新问题,依照上面的算法,如果多音字在行首,则会出现下面的问题:比如:在valid_chinese.txt中hai还海害咳氦孩骇咳骸亥嗨醢胲侅咍咴嗐嚡塰拸欬烸猲絯還郂酼閡阂頦颏餀饚駭駴liao了料撩聊撂疗廖燎辽僚寥镣潦钌蓼尥寮缭獠鹩嘹佬僇劳勞嫽尞尦屪嵺嶚嶛廫憀憭摎敹暸樛漻炓爎爒璙療瞭窷竂簝繚膋膫蟉蟟蟧豂賿蹘蹽轑遼鄝釕鏐鐐镠镽飂飉髎鷯chang长唱常场厂尝肠畅昌敞倡偿猖裳鲳氅菖惝嫦徜鬯阊怅伥昶苌娼仧倀倘僘償儻兏厰嘗嚐場塲尙尚廠悵晿暢棖椙淌淐焻玚琩瑒瑺瓺甞畼脹腸膓萇蟐裮誯鋹鋿錩鏛锠長镸閶闛韔鯧鱨鲿鼚而在py_file.txt中const char PY_mb_huan[] ={"欢还环桓缓幻宦唤换涣患焕痪豢"};这样就可能将huan变为hai,幸亏这样的情况只有以上三个,所以手工调整一下即可还有一个特例就是“揣”的拼音需要特殊考虑,得到的文件如下:new_py_file.rar (13.9 KB)最后,就是再整理了,/* 按照数字的顺序重新排列数据 */read_new_file.Open("final-1.txt", CFile::modeRead,NULL);write_file.Open("final-2.txt", CFile::modeWrite | CFile::modeCreate,NULL); CString str2="",str3="",str4="",str5="",str6="",str7="",str8="",str9="";while (read_new_file.ReadString(my_str)){char * left_char = my_str.GetBuffer(0);left_char += 2;my_str += "\n";switch(*left_char){case '2':str2 += my_str;break;case '3':str3 += my_str;break;case '4':str4 += my_str;break;case '5':str5 += my_str;break;case '6':str6 += my_str;break;case '7':str7 += my_str;break;case '8':str8 += my_str;break;case '9':str9 += my_str;break;default:break;}}write_file.WriteString(str2);write_file.WriteString(str3);write_file.WriteString(str4);write_file.WriteString(str5);write_file.WriteString(str6);write_file.WriteString(str7);write_file.WriteString(str8);write_file.WriteString(str9);目的是将拼音按数字顺序重新排列,以加快搜索速度{"2","a",(char *)PY_mb_a},{"2","b",(char *)PY_mb_bu},{"2","c",(char *)PY_mb_ca},{"24","ai",(char *)PY_mb_ai},{"26","an",(char *)PY_mb_an},{"26","ao",(char *)PY_mb_ao},{"22","ba",(char *)PY_mb_ba},{"24","bi",(char *)PY_mb_bi},{"26","bo",(char *)PY_mb_bo},{"28","bu",(char *)PY_mb_bu},{"22","ca",(char *)PY_mb_ca},{"23","ce",(char *)PY_mb_ce},{"24","ci",(char *)PY_mb_ci},{"28","cu",(char *)PY_mb_cu},{"264","ang",(char *)PY_mb_ang},{"224","bai",(char *)PY_mb_bai},{ final-1.rar (2.28 KB)final-2.rar (2.44 KB)最后,就是按照输入的数字顺序,遍历数组,得到相应的拼音和汉字串,我就不多啰嗦了,明天到单位,我把真实的终端拍个照片发上来给大家看一下。

嵌入式GUI方案比较

嵌入式GUI 方案比较一.嵌入式GUI 概况概况随着嵌入式系统的广泛应用,PDA 、机顶盒、DVD/VCD 播放机及WAP 手机已经迅速普及。

图形用户界面(GUI )的广泛流行,是当今计算机技术的重大成就之一。

嵌入式GUI 为嵌入式系统提供了一种应用于特殊场合的人机交互接口。

它极大地方便了非专业用户的使用,因此实时嵌入式系统对GUI 的需求越来越明显,而这一切均要求有一个高性能、高可靠的GUI 的支持。

的支持。

综上所述,GUI 在嵌入式系统或者实时系统中的地位将越来越重要,这些系统对 GUI 的基本要求包括:的基本要求包括:1.轻型、占用资源少。

.轻型、占用资源少。

2.高性能。

.高性能。

3.高可靠性。

.高可靠性。

4.可配置。

.可配置。

二.目前,主流的嵌入式Linux 系统的GUI 解决方案有:解决方案有:1. MicroWindows MicroWindows 是一个著名的开放源码的嵌入式GUI 软件。

MicroWindows提供了现代图形窗口系统的一些特性。

MicroWindows MicroWindows APIAPI 接口支持类Win32 API ,接口试图和Win32完全兼容。

它还实现了一些Win32用户模块功能。

MicroWindows 采用分层设计方法,以便不同的层面能够在需要的时候改写,基本上用本上用 C 语言实现。

MicroWindows 能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。

这样,MicroWindows 就显得十分小巧,便于移植到各种硬件和软件系统上。

MicroWindows 已经支持已经支持 Intel 16位和32位CPU 、MIPS R4000 以及以及 ARM 芯片;但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,比如控件或构件的实现还很不完备,比如控件或构件的实现还很不完备,键键盘和鼠标等的驱动还很不完善。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档