⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 直接在keil下仿真的t9拼音输入法(完整版).txt

📁 仿真步骤如下: 1、把3个帖子的内容分别保存为51t9py.c,51t9py_indexa.h,5py_mb.h
💻 TXT
📖 第 1 页 / 共 3 页
字号:

特点是直接在Keil下仿真,切换到串口窗口就可以直接看到结果。
希望大家喜欢哦
仿真步骤如下:
1、把3个帖子的内容分别保存为51t9py.c,51t9py_indexa.h,5py_mb.h,放在同一目录下,将51t9py.c加入工程编译
2、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕,所以请先到 http://www.pchome.net/dl/chinese.htm 下载RichView,安装运行
3、在Keil环境下可以直接按“Ctrl+F5”键仿真,按“F5”全速运行,切换到在串口依次输入: //
     64*.6 426***.5 98*.7 936.3 586.1 4826*.1 9464*.7 64*.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) Copyright 2001-2003 xuwenjun                     //
//                            All Rights Reserved                           //
//                                    V1.00                                 //
//--------------------------------------------------------------------------//
//标 题: T9拼音输入法模块                                                  //
//文件名: 51t9py.c                                                          //
//版 本: V1.00                                                             //
//修改人: 徐文军                         E-mail:xuwenjun@21cn.com           //
//日 期: 05-4-8                                                            //
//描 述: T9拼音输入法模块                                                  //
//声 明:                                                                   //
//        以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处. //
//        如用于商业用途请与作者联系.    E-mail:xuwenjun@21cn.com           //
//        有问题请mailto xuwenjun@21cn.com   欢迎与我交流!                  //
//--------------------------------------------------------------------------//
//老版本: 无                             老版本文件名:                      //
//创建人: 徐文军                         E-mail:xuwenjun@21cn.com           //
//日 期: 02-11-05                                                          //
//描 述:                                                                   //
//       1、很久以前的程序,根据网友张 凯、李 强的51py输入法子程序改编,    //
//          增加索引、完善主程序、测试程序,使之在Keil下直接仿真            //
//       2、在Keil环境下可以直接按“Ctrl+F5”键仿真,切换到在串口依次输入: //
//          64*.6 426***.5 98*.7 936.3 586.1 4826*.1 9464*.7 64*.6试试:-)   //
//       3、由于Keil的模拟串口是单字节显示,汉字显示为乱码,所以要加挂    //
//          RICHWIN或RichView这种会重新刷新显示的中文平台,或手工刷新屏幕   //
//          (RichView可以到 http://www.pchome.net/dl/chinese.htm 下载)      //
//       4、按键对应(根据我自己的手机设置的,全部在PC的小键盘操作):         //
//          Num                /:上一拼音?*:下一拼音                          //
//          7:pqrs    8:tuv    9:wxyz   -:前翻页                               //
//          4:ghi    5:jkl    6:mno    +:后翻页                               //
//          1:?    2:abc    3:def    回车键:输入状态和选字状态切换          //
//          0:?            .和空格及回车键:输入状态和选字状态切换          //
//--------------------------------------------------------------------------//
#include<string.h>
#include<stdio.h>
#include"PY_mb.h"
//#include"51t9_MB.h"
#include"51t9py_indexa.h"

#define CNTLQ      0x11
#define CNTLS      0x13
#define DEL        0x7F
#define BACKSPACE  0x08
#define CR         0x0D
#define LF         0x0A

unsigned char cpt9PY_Mblen;
struct t9PY_index code  * cpt9PY_Mb[16];

unsigned char t9PY_ime(char *strInput_t9PY_str)
{
    struct t9PY_index *cpHZ,*cpHZedge,*cpHZTemp;
    unsigned char i,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 < cpHZedge)                       //待查询记录条数
    {
        for(i=0;i<cInputStrLength;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);
}

void t9PY_Test(void)
{
    bit PYEnter=0;
    bit HZok=0;
    unsigned char temp;
//    unsigned char temp2;
    unsigned char t9PYn=0;
    char idata inline[16]={0x00};
    idata char chinese_word[3]="  ";
    char tempchar,Add=0,i=0;
    struct t9PY_index *cpTemp;
//    cpTemp=t9PY_index2;
//    printf ("\n按键 /:上一拼音 *:下一拼音 .和空格及回车键:输入状态和选字状态切换\n");         //
    printf ("请按键:2-abc 3-def 4-ghi 5-jkl 6-mno 7-pqrs 8-tuv 9-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 < strlen((*cpTemp).PY_mb) -12 )Add += 12;
                break;
            case BACKSPACE:
                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拼音1 2 3 4 5 6 7 8 9\r");
            }
        }
        else 
        {
            printf ("拼");
            for (temp=t9PYn;temp<cpt9PY_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");
        }
    }
}

//-----以下为测试程序---------------------------------------------------------------------//
#include <REG52.H>
#include <stdio.h>
#ifdef MONITOR51                         /* Debugging with Monitor-51 needs   */
    char code reserve [3] _at_ 0x23;         /* space for serial interrupt if     */
#endif                                   /* Stop Exection with Serial Intr.   */
                                         /* is enabled                        */
void main (void) {
    char input_string[]="98";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -