您好,欢迎访问三七文档
直接在Keil下仿真的T9拼音输入法(完整版)/*看到论坛上有人发T9拼音输入法,好多人感兴趣啊!呵呵,也把我很久以前的程序找出来重新编译了一下,特点是直接在Keil下仿真,切换到串口窗口就可以直接看到结果。希望大家喜欢哦仿真步骤如下:1、把3个帖子的内容分别保存为51t9py.c,51t9py_indexa.h,5py_mb.h,放在同一目录下,将51t9py.c加入工程编译2、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕,所以请先到下载RichView,安装运行3、在Keil环境下可以直接按“Ctrl+F5”键仿真,按“F5”全速运行,切换到在串口依次输入://64*.6426***.598*.7936.3586.14826*.19464*.764*.6试试:-)4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作)://Num/:上一拼音?*:下一拼音//7:pqrs8:tuv9:wxyz-:前翻页//4:ghi5:jkl6:mno+:后翻页//1:?2:abc3:def回车键:输入状态和选字状态切换//0:?.和空格及回车键:输入状态和选字状态切换//*///请把这个帖子的内容保存为51t9py.c//--------------------------------------------------------------------------////源程序大公开////(c)Copyright2001-2003xuwenjun////AllRightsReserved////V1.00////--------------------------------------------------------------------------////标题:T9拼音输入法模块////文件名:51t9py.c////版本:V1.00////修改人:徐文军E-mail:xuwenjun@21cn.com////日期:05-4-8////描述:T9拼音输入法模块////声明:////以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处.////如用于商业用途请与作者联系.E-mail:xuwenjun@21cn.com////有问题请mailtoxuwenjun@21cn.com欢迎与我交流!////--------------------------------------------------------------------------////老版本:无老版本文件名:////创建人:徐文军E-mail:xuwenjun@21cn.com////日期: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:pqrs8:tuv9:wxyz-:前翻页////4:ghi5:jkl6:mno+:后翻页////1:?2:abc3:def回车键:输入状态和选字状态切换////0:?.和空格及回车键:输入状态和选字状态切换////--------------------------------------------------------------------------//#includestring.h#includestdio.h#includePY_mb.h//#include51t9_MB.h#include51t9py_indexa.h#defineCNTLQ0x11#defineCNTLS0x13#defineDEL0x7F#defineBACKSPACE0x08#defineCR0x0D#defineLF0x0Aunsignedcharcpt9PY_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(cpHZcpHZedge)//待查询记录条数{for(i=0;icInputStrLength;i++){if(*(strInput_t9PY_str+i)!=*((*cpHZ).t9PY_T9+i))//检查字符串匹配{if(i+1j){j=i+1;//j为匹配最大值cpHZTemp=cpHZ;}break;//发现字母串不配,退出//}}if((i==cInputStrLength)&&(cpt9PY_Mblen16))//字母串全配,最多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);elsereturn(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(t9PYn0)t9PYn--;break;case'*':t9PYn++;if(t9PYn=cpt9PY_Mblen)t9PYn--;break;case'-':if(Add=12)Add-=12;break;case'=':case'+':if(Addstrlen((*cpTemp).PY_mb)-12)Add+=12;break;caseBACKSPACE:if(i0)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;tempcpt9PY_Mblen;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);}}}//-----以下为测试程序---------------------------------------------------------------------//#includeREG52.H#includestdio.h#ifdefMONITOR51/*DebuggingwithMonitor-51needs*/charcodereserve[3]_at_0x23;/*spaceforserialinterruptif*/#endif/*StopExectionwithSerialIntr.*//*isenabled*/voidmain(void){charinput_string[]=98;/*------------------------------------------------Setuptheserialportfor1200baudat16MHz.------------------------------------------------*/#ifndefMONITOR51SCON=0x50;/*SCON:mode1,8-bitUART,enablercvr*/TMOD|=0x20;/*TMOD:timer1,
本文标题:T9输入法
链接地址:https://www.777doc.com/doc-7001028 .html