T9输入法.docx
- 文档编号:6938882
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:19
- 大小:23.73KB
T9输入法.docx
《T9输入法.docx》由会员分享,可在线阅读,更多相关《T9输入法.docx(19页珍藏版)》请在冰豆网上搜索。
T9输入法
直接在Keil下仿真的T9拼音输入法(完整版)
/*
看到论坛上有人发T9拼音输入法,好多人感兴趣啊!
呵呵,也把我很久以前的程序找出来重新编译了一下,
特点是直接在Keil下仿真,切换到串口窗口就可以直接看到结果。
希望大家喜欢哦
仿真步骤如下:
1、把3个帖子的内容分别保存为,,,放在同一目录下,将加入工程编译
2、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕,所以请先到下载RichView,安装运行
3、在Keil环境下可以直接按“Ctrl+F5”键仿真,按“F5”全速运行,切换到在串口依次输入:
426***.598*.74826*.19464*.764*.6试试:
-)
4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作):
空格及回车键:
输入状态和选字状态切换 05-4-8 5”426***.598*.74826*.19464*.764*.6试试:
-) 空格及回车键:
输入状态和选字状态切换 7F0A9PY_T9+i)) Y_mb);
else
return(PY_mb_space);
}
voidt9PY_Test(void)
{
bitPYEnter=0;
bitHZok=0;
unsignedchartemp;
空格及回车键:
输入状态和选字状态切换\n"); Y_mb)-12)Add+=12;
break;
caseBACKSPACE:
if(i>0)i--;
inline[i]=0x00;
Add=0;
t9PY_ime(inline);
:
Y_mb+Add+(tempchar-'1')*2);
chinese_word[1]=*((*cpTemp).PY_mb+Add+(tempchar-'1')*2+1);
printf(chinese_word);
printf("\n");
}
else
{
Y);
printf(":
");
printf((*cpTemp).PY_mb+Add);
Y_mb)-Add)/2);
Y);
Y_mb+Add);
*/
/*isenabled */
voidmain(void){
charinput_string[]="98";
/*------------------------------------------------
Setuptheserialportfor1200baudat16MHz.
------------------------------------------------*/
#ifndefMONITOR51
SCON =0x50; /*SCON:
mode1,8-bitUART,enablercvr */
TMOD|=0x20; /*TMOD:
timer1,mode2,8-bitreload */
TH1 =250; /*TH1:
reloadvaluefor9600baud@*/
TR1 =1; /*TR1:
timer1run */
TI =1; /*TI:
setTItosendfirstcharofUART */
#endif
/*------------------------------------------------
Notethatanembeddedprogramneverexits(because
thereisnooperatingsystemtoreturnto). It
mustloopandexecuteforever.
------------------------------------------------*/
空格及回车键-输入状态和选字状态切换\n\n");
while
(1)
{
t9PY_Test();
}
}
05-4-8 E-mail:
国家标准汉字交换码
我国制定了“中华人民共和国国家标准信息交换汉字编码”,标准代号为GB2312—80,
这种编码又称为国标码。
在国标码的字符集中共收录了一级汉字3755个,二级汉字3008
个,图形符号682个,三项字符总计7445个。
在国标GD2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,
方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01
位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯
数字就是它们的“区位码”。
区位码的前两位是它的区号,后两位是它的位号。
用区位码
就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一
的区位码。
汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“”的区
位码为0331,则它在03区3l位。
所有的汉字和符号所在的区分为以下四个组:
(1)01区到15区。
图形符号区,其中01区到09区为标准符号区,10区到15区为
自定义符号区。
01区到09区的具体内容如下;
1)01区。
一般符号202个,如间隔符、标点、运算符、单位符号及制表符;
2)02区。
序号60个,如1.~20.、
(1)~(20)、①~⑩及
(一)~(十);
3)03区。
数字22个,如0—9及X一XII,英文字母52个,其中大写A—Z、小写
a—z各26个;
4)04区。
日文平假名83个;
5)05区。
日文片假名86个;
6)06区。
希腊字母48个;
7)07区。
俄文字母66个;
8)08区。
汉语拼音符号a—z26个;
9)09区。
汉语拼音字母37个。
(2)16区到55区。
一级常用汉字区,包括了3755个一统汉字。
这40个区中的汉字
是按汉语拼音排序的,同音字按笔划顺序排序。
其中55区的90一94位未定义汉字。
(3)56区到87区。
二级汉字区,包括了3008个二级汉字,按部首排序。
(4)88区到94区。
自定义汉字区。
第10区到第15区的自定义符号区和第88区到第94区的自定义汉字区可由用户自行
定义国标码中未定义的符号和汉字。
3.国家标准汉字机内码
汉字的机内码是指在计算机中表示一个汉字的编码。
机内码与区位码稍有区别。
如上
所述,汉字区位码的区码和位码的取值均在1~94之间,如直接用区位码作为机内码,就
会与基本ASCII码混淆。
为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码
中的控制码(00H~1FH),还需与基本ASCII码中的字符相区别。
为了实现这两点,可以
先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六
进制数)。
经过这些处理,用机内码表示一个汉字需要占两个字节,分别 称为高位字
节和低位字节,这两位字节的机内码按如下规则表示:
高位字节=区码+20H+80H(或区码+A0H)
低位字节=位码+20H+80H(或位码+AOH)
由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~94),
所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。
例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它
的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。
4.汉字的输入码
在计算机标准键盘上,汉字的输入和西文的输入有很大的不同。
西文的输入,击一次
键就直接输入了相应的字符或代码,“键入”和“输入”是同一个含义。
但是在计算机上
进行汉字输入时,“键入”是指击键的动作即键盘操作的过程,而“输入”则是把所需的
汉字或字符送到指定的地方,是键盘操作的目的。
目前已有多种汉字输入方法,因此就有
多种汉字输入码。
汉字输入码是面向输入者的,使用不同的输入码其操作过程不同,但是
得到的结果是一样的。
不管采用何种输入方法,所有输入的汉字都以机内码的形式存储在
介质中,而在进行汉字传输时,又都以交换码的形式发送和接收。
国标GB2312—80规定的区位码和沿用多年的电报码都可以作为输入码。
这类汉字编码
和输入码是一一对应的,具有标准的性质,它们编码用的字符是10个阿拉伯数字,每个
汉字的码长均为等长的四个数码。
其他编码的种类很多,可从以下几点加以讨论:
(2)编码类型。
可分为拼音码、字形码、音形结合码等类型。
(2)编码规则。
不同的编码方案有很大的不同,有的规则简单,学习起来较容易记忆,‘
有的规则复杂,较难记亿。
(3)编码字符集。
有用字母键的,有用数字键的,有用字母键加数字键的,或者用了
更多的键作编码字符集的。
(4)编码长度。
它与编码字符集的大小有关,字符集越大,编码长度越短。
采用26
个字母的编码,其码长一般为四位。
(5)对应关系。
除上面提到的区位码和电报码为一一对应的无重码编码外,其他现有
的编码方案均有一定数量的重码。
所谓重码即一码对应多字。
有许多编码为了增加输入的
灵活性,同一汉字用多个码来对应,例如双音编码。
(6)单宁和词汇的编码。
现有的编码方案,为了提高效率,除了单字外还规定了词汇
的编码,甚至使用者可以自行增加词汇库中的词汇,但在提高效率的同时也增加了记亿和
操作的复杂性。
(7)码表的类型和大小。
从汉字输入码到机内码的转换一股需要在机内检索码表。
如
果输入码和机内码存在简单的函数关系,有公式可以计算,如区位码等编码就不需要码表,
其他没有简单函数关系的编码就需要码表。
码表大小与数据结构、单字数量、词汇数量等
因素有关。
国标血2312—80规定的6763个一、二级汉字,备类编码的码表从几千字节到
几万字节。
随着词汇旦的增加,有的码表达到了若干兆字节。
5.汉字的点阵码
汉字的显示和输出,普遍采用点阵方法。
由于汉字数量多且字形变化大,对不同字形
汉字的输出,就有不同的点阵字形。
所谓汉字的点阵码,就是汉字点阵字形的代码。
存储
在介质中的全部汉字的点阵码又称为字库。
.
16x16点阵的汉字其点阵有16行,每一行上有16个点。
如果每一个点用一个二进制
位来表示,则每一行有16个二进制位,需用两个字节来存放每一行上的16个点,并且规
定其点阵中二进制位0为白点,1为黑点,这样一个16X16点阵的汉字需要用2×t6即32
个字节来存放。
依次类推,24×24点阵和32×32点阵的汉字则依次要用72个字节和128
个字节存放一个汉字,构成它在字库中的字模信息。
要显示或打印输出一个汉字时,计算机汉字系统根据该汉字的机内码找出其字模信息
在字库中的位置,再取出其字模信息作为字形在屏幕上显示或在打印机上打印输出。
嵌入式系统中文输入法的设计
摘 要:
在基于嵌入式系统的智能终端中,中文人机交互界面是必须的功能,某些系统还要求中文文本输入。
本文介绍了一种占用较少资源并适于在MCU上实现的中文输入法。
关键词:
嵌入式系统;中文输入法;数字键盘
引言
目前,以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:
abc 3:
def 4:
ghi
5:
jkl 6:
mno 7:
pqrs
8:
tuv 9:
wxyz
而“0”、“*”、“#”键则作为输入法中的控制键。
我们将“#”作为“选择键”,用于选取同一数字键组合下的不同拼音组合。
输入法中使用了两个重要数据结构,分别是PY_NODE和PY_SUBNODE。
每个PY_NODE对应一个数字键组合,PY_SUBNODE则对应一组拼音组合。
由于一个数字组合可对应多个拼音组合(如“226”对应“ban”、“bao”、“can”、“cao”),因此这两个结构实现的是一个两级的对应表。
PY_NODE按树组织,而PY_SUBNODE按双向链表组织。
二者的基本关系如图1所示。
以下是两个结构的定义:
typedefstructpy_node{
unsignedintson[8]; 426***.598*.74826*.19464*.764*.6试试:
-)
4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作):
空格及回车键:
输入状态和选字状态切换 426***.598*.74826*.19464*.764*.6试试:
-) 空格及回车键:
输入状态和选字状态切换 9PY_T9+i)) Y_mb);
else
return(PY_mb_space);
}
voidt9PY_Test(void)
{
bitPYEnter=0;
bitHZok=0;
unsignedchartemp;
空格及回车键:
输入状态和选字状态切换\n"); Y_mb)-12)Add+=12;
break;
caseBACKSPACE:
if(i>0)i--;
inline[i]=0x00;
Add=0;
t9PY_ime(inline);
:
Y_mb+Add+(tempchar-'1')*2);
chinese_word[1]=*((*cpTemp).PY_mb+Add+(tempchar-'1')*2+1);
printf(chinese_word);
printf("\n");
}
else
{
Y);
printf(":
");
printf((*cpTemp).PY_mb+Add);
Y_mb)-Add)/2);
Y);
Y_mb+Add);
*/
/*isenabled */
voidmain(void){
charinput_string[]="98";
/*------------------------------------------------
Setuptheserialportfor1200baudat16MHz.
------------------------------------------------*/
#ifndefMONITOR51
SCON =0x50; /*SCON:
mode1,8-bitUART,enablercvr */
TMOD|=0x20; /*TMOD:
timer1,mode2,8-bitreload */
TH1 =250; /*TH1:
reloadvaluefor9600baud@*/
TR1 =1; /*TR1:
timer1run */
TI =1; /*TI:
setTItosendfirstcharofUART */
#endif
/*------------------------------------------------
Notethatanembeddedprogramneverexits(because
thereisnooperatingsystemtoreturnto). It
mustloopandexecuteforever.
------------------------------------------------*/
空格及回车键-输入状态和选字状态切换\n\n");
while
(1)
{
t9PY_Test();
}
}
E-mail:
LICK事件中写入代码
COMMAND2命令按钮属性设置如下:
=’开始查询’
在COMMAND2命令按钮的CLICK事件中写入代码:
IF='开始查询'
='恢复数据'
SRNR=ALLT
ZDD=LEN(SRNR)/2
DIMEHH(100)
HH=''
FORI=1TOLEN(SRNR)/2
ABC=SUBS(SRNR,I*2-1,2)
SELEPYZDK
SETFILTTO
LOCAFORABC$HZ
PYNR1=PY1
PYNR2=PY2
IFPYNR2<>''
SETFILTTOPY1=PYNR1ORPY2=PYNR2
ELSE
SETFILTTOPY1=PYNR1
ENDIF
GOTOP
DOWHILNOTEOF()
HH(I)=HH(I)+HZ
SKIP
ENDDO
ENDFOR
SELE人员情况表
SETFILTTO
REPLBZWWITH''ALL
GOTOP
DOWHILNOTEOF()
JSQ=0
FORI=1TOLEN(ALLT(NAME))/2
IFSUBS(YXMM,I*2-1,2)$HH(I)
JSQ=JSQ+1
ENDIF
ENDFOR
IFJSQ=LEN(ALLT(NAME))/2ORJSQ>=ZDD
REPLBZWWITH'*'
ENDIF
SKIP
ENDDO
SETFILTTOBZW="*"
ELSE
='开始查询'
SELE人员情况表
SETFILTTO
GOTOP
ENDIF
----全部设置完毕后,执行这个程序,在文本框中输入要查询的关键字,点击查询命令按钮,这时表格中显示的将是符合查询关键字的全部内容,再次点击这个命令按钮,表格中将恢复显示全部数据内容,点击退出系统命令按钮,将退出系统。
----四、查询程序实现的原理
----在系统中提供的编辑框中输入要查询的关键字,如果在一个人员数据库中查询一个姓名音为“李晓军”的人员,首先在生成的拼音查询数据库中找输入第一个汉字在字典库中的位置,利用这个汉字的读音,对字典库记录内容进行过滤,这样字典库中只有符合这个汉字读音的全部汉字,利用一个循环,将全部同音字相加生成一个字符串送到一个变量中,继续对另外输入的汉字进行同样的处理,最后根据输入汉字的多少,生成多个字符串变量。
生成字符串变量后,开始检索你要查询的数据库,将数据库中每人的姓名拆开分别与生成的字符串进行判断,只有当数据库中一个人的姓名全部字符都能在相应的字符串中查找到,那么这条记录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- T9 输入法
![提示](https://static.bdocx.com/images/bang_tan.gif)