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

📄 myt9input.c

📁 51单片机上的T9输入法程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                                        {"iong",PY_mb_xiong},
                                        {"iu",PY_mb_xiu},
                                        {"u",PY_mb_xu},
                                        {"uan",PY_mb_xuan},
                                        {"ue",PY_mb_xue},
                                        {"un",PY_mb_xun}};
code struct PY_index code PY_index_y[]={{"a",PY_mb_ya},
                                        {"an",PY_mb_yan},
                                        {"ang",PY_mb_yang},
                                        {"ao",PY_mb_yao},
                                        {"e",PY_mb_ye},
                                        {"i",PY_mb_yi},
                                        {"in",PY_mb_yin},
                                        {"ing",PY_mb_ying},
                                        {"o",PY_mb_yo},
                                        {"ong",PY_mb_yong},
                                        {"ou",PY_mb_you},
                                        {"u",PY_mb_yu},
                                        {"uan",PY_mb_yuan},
                                        {"ue",PY_mb_yue},
                                        {"un",PY_mb_yun}};
code struct PY_index code PY_index_z[]={{"a",PY_mb_za},
                                        {"ai",PY_mb_zai},
                                        {"an",PY_mb_zan},
                                        {"ang",PY_mb_zang},
                                        {"ao",PY_mb_zao},
                                        {"e",PY_mb_ze},
                                        {"ei",PY_mb_zei},
                                        {"en",PY_mb_zen},
                                        {"eng",PY_mb_zeng},
                                        {"ha",PY_mb_zha},
                                        {"hai",PY_mb_zhai},
                                        {"han",PY_mb_zhan},
                                        {"hang",PY_mb_zhang},
                                        {"hao",PY_mb_zhao},
                                        {"he",PY_mb_zhe},
                                        {"hen",PY_mb_zhen},
                                        {"heng",PY_mb_zheng},
                                        {"hi",PY_mb_zhi},
                                        {"hong",PY_mb_zhong},
                                        {"hou",PY_mb_zhou},
                                        {"hu",PY_mb_zhu},
                                        {"hua",PY_mb_zhua},
                                        {"huai",PY_mb_zhuai},
                                        {"huan",PY_mb_zhuan},
                                        {"huang",PY_mb_zhuang},
                                        {"hui",PY_mb_zhui},
                                        {"hun",PY_mb_zhun},
                                        {"huo",PY_mb_zhuo},
                                        {"i",PY_mb_zi},
                                        {"ong",PY_mb_zong},
                                        {"ou",PY_mb_zou},
                                        {"u",PY_mb_zu},
                                        {"uan",PY_mb_zuan},
                                        {"ui",PY_mb_zui},
                                        {"un",PY_mb_zun},
                                        {"uo",PY_mb_zuo}};
code struct PY_index code PY_index_end[]={"",PY_mb_space};

/*定义首字母索引表*/
code struct PY_index code *PY_index_headletter[]=
{     
	PY_index_a,
	PY_index_b,
	PY_index_c,
	PY_index_d,
	PY_index_e,
	PY_index_f,
	PY_index_g,
	PY_index_h,
	PY_index_i,
	PY_index_j,
	PY_index_k,
	PY_index_l,
	PY_index_m,
	PY_index_n,
	PY_index_o,
	PY_index_p,
	PY_index_q,
	PY_index_r,
	PY_index_s,
	PY_index_t,
	PY_index_u,
	PY_index_v,
	PY_index_w,
	PY_index_x,
	PY_index_y,
	PY_index_z,
	PY_index_end
};

/*------------------------清拼音字符串输入缓冲区-------------------------*/
void T9Reset()//reentrant
{    
    //开始拼写一个汉字之前必须先调用
    unsigned char i,j,k;
    for(i=0;i<6;i++)
    {
        for(j=0;j<8;j++)
        {
            keycb.PYBuf_Pool[i].match=0;
            for(k=0;k<8;k++)
                keycb.PYBuf_Pool[i].PYBuf[j][k]=0;
        }
    }
    
    for (i=0;i<8;i++)
    {
        keycb.tmp_buf[i]=0;
        for(j=0;j<8;j++)
            keycb.PYBuf_bak[i][j]=0;
    }
    
    keycb.valid_input_sum=0;
}

/*清汉字表控制块,包括码表指针个数、汉字个数以及码表指针首地址*/
void ChnTblReset(void)//reentrant
{
    /*每次输入一个有效的拼音字母后必须先调用*/
    unsigned char i;
    for(i=0;i<8;i++)
    {    
        keycb.chn_tbl[i].chn_sum=0;
        keycb.chn_tbl[i].pmb=NULL;
    }
}

/*对于每次输入后生成的字符串,找到一个匹配的串*/
unsigned char * FindMatchStr(unsigned char * strInput_py_str)//reentrant
{    
    /*返回值:指向第一个符合拼音的码表指针*/
    struct PY_index *cpHZ,*cpHZedge;
    char i,cInputStrLength;

    cInputStrLength=strlen(strInput_py_str);    /*输入的拼音串长度*/
    
    if(*strInput_py_str=='\0')
        return NULL;       /*如果输入空字符返回0*/

    cpHZ=PY_index_headletter[strInput_py_str][0]-'a'];        /*查首字母索引*/
    cpHZedge=PY_index_headletter[strInput_py_str][0]-'a'+1];  /*设置指针界限*/

    strInput_py_str++;                           /*指向拼音串第二个字母*/

    while(cpHZ<cpHZedge)                         /*索引表不超界*/
    {
        for(i=0;i<cInputStrLength;i++)
        {            
            if (*(strInput_py_str+i)==0)    /*比较到头,前面都相等*/
                return cpHZ->PY_mb;
    
            if (*(strInput_py_str+i)!=*((*cpHZ).PY+i)) 
                break;    /*发现字母串不配,退出*/
        }
        cpHZ++;
    }
    return NULL;                      
}

/*得到韵母*/

void GetPYRhyme(unsigned char Key)//reentrant
{    //输入:0~7
    //keycb.PYBuf结构:每行第一个Byte代表这行内有几个字母,0代表没有
    unsigned char i,j;
    unsigned char match_count;
    unsigned char *pPY;
    
    for(i=0;i<8;i++)
    {
        if(keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[i][0]==0)
            break;
        
        for(j=0;j<8;j++)
        {    
            keycb.PYBuf_bak[i][j]=keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[i][j];
        }
    }
    
    match_count=0;
    
    for(i=0;i<8;i++)
    {
        if(keycb.PYBuf_bak[i][0]==0)
            break;

        for(j=0;j<8;j++)
            keycb.tmp_buf[j]=keycb.PYBuf_bak[i][j];
        
        pPY=&KeyPY[Key][0];
        while(*pPY!=0)
        {
            keycb.tmp_buf[keycb.PYBuf_bak][i][0]+1]=*pPY;
            keycb.tmp_buf[keycb.PYBuf_bak][i][0]+2]=0;
            if(FindMatchStr(keycb.tmp_buf+1))
            {
                keycb.tmp_buf[0]++;
                for(j=0;j<8;j++)
                    keycb.PYBuf_Pool[keycb.valid_input_sum].PYBuf[match_count][j]=keycb.tmp_buf[j];
                match_count++;
                if(*(pPY+1)==0)
                    break;
                else
                {
                    keycb.tmp_buf[0]--;
                    pPY++;
                    continue;
                }
            }

            else
                pPY++;
        }
    }
        
    if(match_count>0)
        keycb.PYBuf_Pool[keycb.valid_input_sum++].match=match_count;
    
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            keycb.PYBuf_bak[i][j]=0;
    }
}
/*得到声母*/

void GetPYHeader(unsigned char Key)//reentrant
{
    unsigned char i,j;
    unsigned char *p;
    p=&KeyPY[Key][0];
    for (i=0,j=0;*(p+i)!=0;i++)
    {
        if (*(p+i)=='i' ||*(p+i)=='u' ||*(p+i)=='v') 
            continue;
        else
        {
            keycb.PYBuf_Pool[0].PYBuf[j][0]=1;
            keycb.PYBuf_Pool[0].PYBuf[j][1]=*(p+i);
            keycb.PYBuf_Pool[0].match++;
            j++;
        }
    }
    keycb.valid_input_sum++;
}
/*拼音输入处理*/
void PYInputProcess(void)//reentrant
{
    unsigned char i,j;
    unsigned char * p;
    
    DispPy(0,0);//type:0反显第一个拼音//direction:0 no direction

⌨️ 快捷键说明

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