直接在Keil下仿真的T9拼音输入法完整版.docx
《直接在Keil下仿真的T9拼音输入法完整版.docx》由会员分享,可在线阅读,更多相关《直接在Keil下仿真的T9拼音输入法完整版.docx(20页珍藏版)》请在冰豆网上搜索。
直接在Keil下仿真的T9拼音输入法完整版
直接在Keil下仿真的T9拼音输入法(完整版)
来源:
21IC侃单片机 作者:
xwj
/*
看到论坛上有人发T9拼音输入法,好多人感兴趣啊!
呵呵,也把我很久以前的程序找出来重新编译了一下,
特点是直接在Keil下仿真,切换到串口窗口就可以直接看到结果。
希望大家喜欢哦
仿真步骤如下:
1、把3个帖子的内容分别保存为51t9py.c,51t9py_indexa.h,5py_mb.h,放在同一目录下,将51t9py.c加入工程编译
2、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕,所以请先到,安装运行
3、在Keil环境下可以直接按“Ctrl+F5”键仿真,按“F5”全速运行,切换到在串口依次输入:
//
64*.6426***.598*.7936.3586.14826*.19464*.764*.6试试:
-)
4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作):
//
Num /:
上一拼音?
*:
下一拼音 //
7:
pqrs 8:
tuv 9:
wxyz -:
前翻页 //
4:
ghi 5:
jkl 6:
mno +:
后翻页 //
1:
?
2:
abc 3:
def 回车键:
输入状态和选字状态切换 //
0:
?
.和空格及回车键:
输入状态和选字状态切换 //
*/
//请把这个帖子的内容保存为51t9py.c
//--------------------------------------------------------------------------//
// 源程序大公开 //
// (c)Copyright2001-2003xuwenjun //
// AllRightsReserved //
// V1.00 //
//--------------------------------------------------------------------------//
//标 题:
T9拼音输入法模块 //
//文件名:
51t9py.c //
//版 本:
V1.00 //
//修改人:
徐文军 E-mail:
//
//日 期:
05-4-8 //
//描 述:
T9拼音输入法模块 //
//声 明:
//
// 以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处.//
// 如用于商业用途请与作者联系. E-mail:
//
// 有问题请mailto 欢迎与我交流!
//
//--------------------------------------------------------------------------//
//老版本:
无 老版本文件名:
//
//创建人:
徐文军 E-mail:
//
//日 期:
02-11-05 //
//描 述:
//
// 1、很久以前的程序,根据网友张凯、李强的51py输入法子程序改编, //
// 增加索引、完善主程序、测试程序,使之在Keil下直接仿真 //
// 2、在Keil环境下可以直接按“Ctrl+F5”键仿真,切换到在串口依次输入:
//
// 64*.6426***.598*.7936.3586.14826*.19464*.764*.6试试:
-) //
// 3、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂 //
// RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕 //
// (RichView可以到) //
// 4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作):
//
// Num /:
上一拼音?
*:
下一拼音 //
// 7:
pqrs 8:
tuv 9:
wxyz -:
前翻页 //
// 4:
ghi 5:
jkl 6:
mno +:
后翻页 //
// 1:
?
2:
abc 3:
def 回车键:
输入状态和选字状态切换 //
// 0:
?
.和空格及回车键:
输入状态和选字状态切换 //
//--------------------------------------------------------------------------//
#include
#include
#include"PY_mb.h"
//#include"51t9_MB.h"
#include"51t9py_indexa.h"
#defineCNTLQ 0x11
#defineCNTLS 0x13
#defineDEL 0x7F
#defineBACKSPACE 0x08
#defineCR 0x0D
#defineLF 0x0A
unsignedcharcpt9PY_Mblen;
structt9PY_indexcode *cpt9PY_Mb[16];
unsignedchart9PY_ime(char*strInput_t9PY_str)
{
structt9PY_index*cpHZ,*cpHZedge,*cpHZTemp;
unsignedchari,j,cInputStrLength;
cpt9PY_Mblen=0; //完全匹配组数
j=0; //j为匹配最大值
cInputStrLength=strlen(strInput_t9PY_str); //输入拼音串长度//
if(*strInput_t9PY_str=='\0')return(0); //如果输入空字符返回0//
cpHZ=&(t9PY_index2[0]); //查首字母索引//
cpHZedge=t9PY_index2+sizeof(t9PY_index2)/sizeof(t9PY_index2[0]);
// strInput_t9PY_str++; //指向拼音串第二个字母//
while(cpHZ {
for(i=0;i {
if(*(strInput_t9PY_str+i)!
=*((*cpHZ).t9PY_T9+i)) //检查字符串匹配
{
if(i+1>j)
{
j=i+1; //j为匹配最大值
cpHZTemp=cpHZ;
}
break; //发现字母串不配,退出//
}
}
if((i==cInputStrLength)&&(cpt9PY_Mblen<16)) //字母串全配,最多8组
{
cpt9PY_Mb[cpt9PY_Mblen]=cpHZ;
cpt9PY_Mblen++;
}
cpHZ++;
}
if(j!
=cInputStrLength) //不完全匹配输出最多匹配的1组
cpt9PY_Mb[0]=cpHZTemp;
return(cpt9PY_Mblen); //输出完全匹配组数,0为无果而终//
}
char*t9PY_ime_mb(char*strInput_t9PY_str)
{
if(t9PY_ime(strInput_t9PY_str)>0)
return((*(cpt9PY_Mb[0])).PY_mb);
else
return(PY_mb_space);
}
voidt9PY_Test(void)
{
bitPYEnter=0;
bitHZok=0;
unsignedchartemp;
// unsignedchartemp2;
unsignedchart9PYn=0;
charidatainline[16]={0x00};
idatacharchinese_word[3]=" ";
chartempchar,Add=0,i=0;
structt9PY_index*cpTemp;
// cpTemp=t9PY_index2;
// printf("\n按键/:
上一拼音*:
下一拼音.和空格及回车键:
输入状态和选字状态切换\n"); //
printf("请按键:
2-abc3-def4-ghi5-jkl6-mno7-pqrs8-tuv9-wxyz\n"); //
while(!
HZok)
{
tempchar=getchar();
switch(tempchar)
{
// case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
if(~PYEnter)
{
inline[i]=tempchar;
i++;
Add=0;
t9PY_ime(inline);
}
break;
case'/':
if(t9PYn>0)t9PYn--;
break;
case'*':
t9PYn++;
if(t9PYn>=cpt9PY_Mblen)t9PYn--;
break;
case'-':
if(Add>=12)Add-=12;
break;
case'=':
case'+':
if(Add break;
caseBACKSPACE:
if(i>0)i--;
inline[i]=0x00;
Add=0;
t9PY_ime(inline);
// cpTemp=cpt9PY_Mb[t9PYn];
break;
// case'\n':
case'.':
//输入状态和选字状态切换
case'':
case'\n':
PYEnter^=1;
break;
default :
// HZok=1;
break;
}
printf(" \r");
if(PYEnter)
{
printf("选");
cpTemp=cpt9PY_Mb[t9PYn];
if((cpTemp!
=PY_mb_space)&&(tempchar>='1')&&(tempchar<='9'))
{
HZok=1;
t9PYn=0;
printf(" \r");
// printf("%s\n",inline);
chinese_word[0]=*((*cpTemp).PY_mb+Add+(tempchar-'1')*2);
chinese_word[1]=*((*cpTemp).PY_mb+Add+(tempchar-'1')*2+1);
printf(chinese_word);
printf("\n");
}
else
{
// printf((*(cpTemp)).PY);
printf(":
");
printf((*cpTemp).PY_mb+Add);
// printf("\n拼音123456789\r");
}
}
else
{
printf("拼");
for(temp=t9PYn;temp {
cpTemp=cpt9PY_Mb[temp];
// temp2=((strlen((*(cpTemp)).PY_mb)-Add)/2);
// printf("%2bd:
%02bd:
",temp,temp2);
printf(":
");
printf((*(cpTemp)).PY);
// printf((*(cpTemp)).PY_mb+Add);
// printf("\n");
}
// printf("\n");
}
}
}
//-----以下为测试程序---------------------------------------------------------------------//
#include
#include
#ifdefMONITOR51 /*DebuggingwithMonitor-51needs */
charcodereserve[3]_at_0x23; /*spaceforserialinterruptif */
#endif /*StopExectionwithSerialIntr. */
/*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@11.0592MHz*/
TR1 =1; /*TR1:
timer1run */
TI =1; /*TI:
setTItosendfirstcharofUART */
#endif
/*------------------------------------------------
Notethatanembeddedprogramneverexits(because
thereisnooperatingsystemtoreturnto). It
mustloopandexecuteforever.
------------------------------------------------*/
// printf("HelloWorld\n"); /*Print"HelloWorld"*/
printf("\n");
printf("%