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

📄 myt9input.c

📁 51单片机上的T9输入法程序
💻 C
📖 第 1 页 / 共 5 页
字号:

    if(keycb.valid_input_sum==0)
    {
        GraphicClearAll();
        DispInputWindow(WIN_INPUT_PY);
        DispName(1);
        keycb.input_level--;
        return;
    }
        
    p=keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[0];
    
    ChnTblReset();
    
    for (i=0,j=0;i<8;i++)
    {        
        if ((*(p+8*i))>0)
        {
            keycb.chn_tbl[j].pmb=FindMatchStr(p+8*i+1);

            keycb.chn_tbl[j].chn_sum=(unsigned char)strlen(keycb.chn_tbl[j].pmb)/((unsigned int)2);

            j++;
        }
    }    
    DispChnTbl(1,0);//type:1正常显示汉字表//direction:0无方向    
}

//phonebook
void subfunc1_1(void)//reentrant
{;//find number
}
void subfunc1_2(void)//reentrant//T9 input add number
{
    unsigned char key;
    unsigned char i,j;
    unsigned char *p;

    WatchDogReset();
    
    switch(keycb.input_level)
    {
        case 0:
            if(keycb.keyon_flag&KEY_CONFIRM_ON)
            {
                //切换到输入电话号码一屏
                keycb.keyon_flag&=~KEY_CONFIRM_ON;
                GraphicClearAll();
                TextClearAll();
                DispInputWindow(WIN_INPUT_NUM);
                keycb.input_level=3;
            }

            else if(keycb.keyon_flag&KEY_CANCEL_ON)
            {
                keycb.keyon_flag&=~KEY_CANCEL_ON;
                //如果输入域不为空,每按一次取消,删除一个汉字
                if(keycb.input_chn_sum>0)
                {
                    keycb.input_chn_sum--;
                    DispName(1);
                    if(keycb.input_chn_sum==0)
                        DispButton1();
                }
                //全部删完,回到上一级菜单
                else
                {
                    DispInitInfo();
                    keycb.menu_level--;
                }
            }
            
            else if(keycb.keyon_flag&0x03FF)
            {
                if(keycb.input_chn_sum<7)
                {       
                    GraphicClearAll(); 
                    DrawInputFrame();
                    DispName(0);
                    DispButton2();
           
                    for(i=0;i<8;i++)
                    {
                        if((keycb.keyon_flag>>(i+2))==0x01)
                        {
                            key=i;
                            break;
                        }
                    }
                    keycb.keyon_flag&=~0x03FF;                   
                    T9Reset();
                    GetPYHeader(key);
                    PYInputProcess();                   
                    keycb.input_level++;
                }
            }
                
        break;

        case 1:
            if(keycb.keyon_flag&KEY_CANCEL_ON)
            {
                keycb.keyon_flag&=~KEY_CANCEL_ON;
                //如果拼音域不为空,每按一次取消,删掉一个拼音
                //全部删完,返回到文本输入域。
                if(keycb.valid_input_sum>0)
                {
                    keycb.PYBuf_Pool[keycb.valid_input_sum-1].match=0;
                    
                    for(i=0;i<8;i++)
                    {
                        for(j=0;j<8;j++)
                            keycb.PYBuf_Pool[keycb.valid_input_sum-1].PYBuf[i][j]=0;
                    }
                    
                    keycb.valid_input_sum--;            
                    PYInputProcess();
                }

                else
                {
                    keycb.menu_level--;
                    return;
                }
            }

            else if(keycb.keyon_flag&KEY_CONFIRM_ON)
            {
                keycb.keyon_flag&=~KEY_CONFIRM_ON;
                DispPy(1,0);//正常显示拼音,无方向
                DispChnTbl(0,0);//反显汉字表中第一个汉字
                keycb.input_level++;
            }

            else if(keycb.keyon_flag&KEY_DOWN_ON)
            {
                keycb.keyon_flag&=~KEY_DOWN_ON;
                if(keycb.scr_py_loc==keycb.PYBuf_Pool[keycb.valid_input_sum-1].match-1)
                    keycb.scr_py_loc=0;
                else
                    keycb.scr_py_loc++;
                PYInputProcess();
            }

            else if(keycb.keyon_flag&KEY_UP_ON)
            {
                keycb.keyon_flag&=~KEY_UP_ON;
                if(keycb.scr_py_loc==0)
                    keycb.scr_py_loc=keycb.PYBuf_Pool[keycb.valid_input_sum-1].match-1;
                else 
                    keycb.scr_py_loc--;
                PYInputProcess();
            }

            else if(keycb.keyon_flag&0x03FF)
            {
                if(keycb.input_chn_sum<7)
                {
                    for(i=0;i<8;i++)
                    {
                        if(keycb.keyon_flag>>(i+2)==0x01)
                        {
                            key=i;
                            break;
                        }
                    }
                    keycb.keyon_flag&=~0x03FF;   
                    GetPYRhyme(key);                
                    PYInputProcess();
                }
            }

            else 
            {
                keycb.keyon_flag=KEY_NONE_ON;
            }
        break;

        case 2:
            if(keycb.keyon_flag&KEY_CANCEL_ON)
            {
                keycb.keyon_flag&=~KEY_CANCEL_ON;
                DispPy(0,0);//反显第一个拼音,无方向
                DispChnTbl(1,0);//正常显示汉字表,无方向
                keycb.input_level--;
            }

            else if(keycb.keyon_flag&KEY_CONFIRM_ON)
            {
                keycb.keyon_flag&=~KEY_CONFIRM_ON;
                //往文本域输入这个汉字
                if(keycb.input_chn_sum<7)
                {
                    p=keycb.chn_tbl[keycb.scr_py_loc].pmb+2*keycb.tbl_chn_loc;
                    keycb.name[2*keycb.input_chn_sum]=*p;
                    keycb.name[2*keycb.input_chn_sum+1]=*(p+1);
                    keycb.input_chn_sum++;
                    GraphicClearAll();
                    TextClearAll();
                    DispInputWindow(WIN_INPUT_PY);
                    DispName(1);
                    keycb.input_level=0;
                }
            }

            else if(keycb.keyon_flag&KEY_DOWN_ON)
            {
                keycb.keyon_flag&=~KEY_DOWN_ON;
                //计算在汉字表中的位置
                if(keycb.tbl_chn_loc==keycb.tbl_chn_sum-1)
                    keycb.tbl_chn_loc=0;
                else
                    keycb.tbl_chn_loc++;
                //计算在屏上的位置
                if(((keycb.tbl_chn_sum%8)!=0)//最后一行,各数不够8
                &&(keycb.tbl_chn_sum-keycb.tbl_chn_loc)<=(keycb.tbl_chn_sum%8))
                {
                    if(keycb.scr_chn_loc==((keycb.tbl_chn_sum%8)-1))
                        keycb.scr_chn_loc=0;
                    else 
                        keycb.scr_chn_loc++;
                }             
                else
                {
                    if(keycb.scr_chn_loc==7)
                        keycb.scr_chn_loc=0;
                    else 
                        keycb.scr_chn_loc++;
                }
                //显示
                DispChnTbl(0,1);//反显汉字,方向down
            }

            else if(keycb.keyon_flag&KEY_UP_ON)
            {
                keycb.keyon_flag&=~KEY_UP_ON;
                //计算在汉字表中的位置
                if(keycb.tbl_chn_loc==0)
                    keycb.tbl_chn_loc=keycb.tbl_chn_sum-1;
                else
                    keycb.tbl_chn_loc--;
                //计算在屏上的位置
                if(((keycb.tbl_chn_sum%8)!=0)//最后一行,各数不够8
                &&(keycb.tbl_chn_sum-keycb.tbl_chn_loc)<=(keycb.tbl_chn_sum%8))
                {
                    if(keycb.scr_chn_loc==0)
                    {
                        if(keycb.tbl_chn_sum<8)
                   

⌨️ 快捷键说明

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