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

📄 t9py.h

📁 msp430的中文输入程序
💻 H
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
//   按键是根据通用手机键盘设置的,全部在PC的小键盘操作):                    //
//   NumLock   /:上一拼音? *:下一拼音                                        //
//   7:pqrs    8:tuv       9:wxyz   -:前翻页                                 //
//   4:ghi     5:jkl       6:mno    +:后翻页                                 //
//   1:?       2:abc       3:def    回车键:输入状态和选字状态切换            //
//   0:?                   '.'和空格及回车键:输入状态和选字状态切换          //
//   串口依次输入: 9466*.1    486*.3   64*.6    426***.5 试试:-)             //
//   程序在IAR中用软件模拟调试可以执行                                       //
******************************************************************************/

#ifndef __T9PY_H__
#define __T9PY_H__

#include <msp430x14x.h>
#include <string.h>
#include <stdio.h>
#include "t9py_indexa.h"
#include "ocmj12232c-1(并口).h"

extern char x1,y1,x2,y2;//定位lcd显示位置 

void clr_cpt9PY_Mb(void);
unsigned char T9PY_Get_Match_PY_MB(char *p_PadInput,const struct t9PY_index ** List_match_PY_Mb);
void t9PY_Test(void);
void lcd_test(unsigned char * input_string);

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

#define T9PYPTRMAX 16
unsigned char cpt9PY_Mblen;//保存调用函数 T9PY_Get_Match_PY_MB()的返回值,获取到完全匹配拼音数量
const struct t9PY_index * cpt9PY_Mb[T9PYPTRMAX];//主要用于存放匹配的拼音码表地址,
//只有cpt9PY_Mb[0]存放的是一个不匹配的拼音码表地址.
//匹配并不是指相比较的字符长短一样,不是完全匹配.例如:34跟346是匹配的,
//34跟34是完全匹配(在这里我们不需要使用完全匹配)

//====================================================================================
//语法格式:unsigned char T9PY_Get_Match_PY_MB(char *p_PadInput,\
//                                           struct t9PY_index code  ** List_match_PY_Mb)
//实现功能:获取与输入相匹配的T9拼音列表
//参数:    p_PadInput:	       输入的按键序列,由'0'~'9'组成的字符串
//	    List_match_PY_Mb:      存储"获取到的拼音索引地址"的数组
//返回值:  获取到完全匹配拼音数量
//移植注意:List_match_PY_Mb 所指向的存储结构,即用于存放匹配的拼音码表地址的存储结构.
//              第一个元素存放的是一个不匹配的拼音码表地址.其他为匹配的拼音码表地址
//=====================================================================================

unsigned char T9PY_Get_Match_PY_MB(char *p_PadInput,const struct t9PY_index ** List_match_PY_Mb)
{
    const struct t9PY_index *p_PY_CurrentIndex;
    const struct t9PY_index *p_PY_LastIndex;
    struct t9PY_index PY_TempIndex;
    unsigned char T9PY_Match_NUM=0;      //完全匹配拼音数量
    char temp_t9PY_T9[8],*str;//保存输入的数字 字符串
    int kk;
    if(*p_PadInput == '\0')
      return(0);         //如果输入空字符返回0//
    clr_cpt9PY_Mb();
    p_PY_CurrentIndex = (&t9PY_index2[1]); //首索引地址赋值,p_PY_CurrenIndex为当前拼音索引地址
    kk = sizeof(t9PY_index2)/sizeof(struct t9PY_index);
    p_PY_LastIndex = t9PY_index2 + kk;
    //最后索引地址之后的地址(作下一语句比较用)
    //程序注释:sizeof(t9PY_index2[num]); //6(字节) = 3(个指针)*2(字节/指针)
    //          sizeof(t9PY_index2);      //2400(字节)= 400(项)*6(字节)
    //所以:    p_PY_LastIndex = &t9PY_index2[0] + 400;
    //str=p_PadInput;
    while(p_PY_CurrentIndex < p_PY_LastIndex)  //遍历字母索引表.或者使用语句: while((p_PY_CurrenIndex->t9PY_T9[0])!='\n')                       
    {
	memcpy((void *)&PY_TempIndex,(const void *)p_PY_CurrentIndex,sizeof(struct t9PY_index)); 
        strcpy(temp_t9PY_T9,(PY_TempIndex).t9PY_T9);//复制输入的数字串
	str=strstr(temp_t9PY_T9,p_PadInput);//查找输入的数字串是否在 *t9PY_index2[]中
	if( (str == temp_t9PY_T9) && (T9PY_Match_NUM < T9PYPTRMAX))//指针比较
        {
	  List_match_PY_Mb[T9PY_Match_NUM]=p_PY_CurrentIndex;//
          T9PY_Match_NUM++;//完全匹配数增加
	}
        p_PY_CurrentIndex ++;
    }
    return (T9PY_Match_NUM);                //输出完全匹配组数,0为无果而终//
}
//==========================================================================================
//测试程序
//==========================================================================================

void t9PY_Test(void)
{
  //PYEnter:输入拼音状态和选字状态(功能选择状态)切换 标志位 
  //0x00:输入拼音状态   0xff:选字状态
  unsigned char PYEnter=0;
  //HZok   :汉字是否选定标志位
  //0x00:汉字没有选定  0xff:汉字选定
  unsigned char HZok=0;
    int temp,i=0;
    int out_temp;
    unsigned char t9PYn=0;
    unsigned char * tempMB;//指向汉字的指针
    char oneline[8]={0x00} ;//输入的拼音码 
    char pyma[8];//拼音码临时变量
    unsigned char chinese_word[3]="  ";//保存选中的汉字
    char tempchar;
    signed char Add=0;
    struct t9PY_index cpTemp = t9PY_index2[0];//存放字库里面数据的临时变量
    puts("按键    /:上一拼音  *:下一拼音  .:输入状态和选字状态切换");
    puts("请按键:2-abc 3-def 4-ghi 5-jkl 6-mno 7-pqrs 8-tuv 9-wxyz ");
    while(!HZok)//HZok 初始值为 0。汉字没有ok
    {           //汉字选定,则退出程序
        tempchar=getchar();//接收串口发送来的数据
        switch (tempchar)
        {   //拼音输入只对 2~9 处理
            //case '0':拼音输入状态对'0','1'屏蔽
            //case '1':.
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                  if (!PYEnter)//PYEnter = 0x00:输入拼音状态
                  {
                    oneline[i]=tempchar;
                    i++;
                    t9PYn=0;
                    Add=0;//Add:汉字定位位置
                    cpt9PY_Mblen=T9PY_Get_Match_PY_MB(oneline,cpt9PY_Mb);//获取与输入相匹配的T9拼音列表(该函数比较完整了)
                  }
                  break;
            case '/'://上一拼音
                if (t9PYn > 0) t9PYn --;//上下拼音指示标志位
                break;
            case '*'://下一拼音
                t9PYn ++;//上下拼音指示标志位
                if (t9PYn >= cpt9PY_Mblen) //cpt9PY_Mblen :匹配的拼音数目
                  t9PYn = 0;//循环
                break;
            
            //汉字显示在这里溢出 ===== 在这里进行处理
            case '-'://上一页 汉字 定位
                if (Add >= 18) 
                  Add -= 18;//Add:汉字定位位置
                break;
            
            case '+'://下一页 汉字
                if(strlen((const char *)(cpTemp.PY_mb)) < 18)
                  break;
                else if ((Add < strlen((const char *)(cpTemp.PY_mb)) - 18))
                  Add += 18;
                break;
            case BACKSPACE://????删除一个拼音字母
                if (i>0) i--;
                oneline[i]=0x00;
                Add=0;
                
                //获取与输入相匹配的T9拼音列表,存入 *cpt9PY_Mb[16]中
                cpt9PY_Mblen=T9PY_Get_Match_PY_MB(oneline,cpt9PY_Mb);
                break;
            case '.':                        //输入状态和选字状态切换
            case '\n':
                Add = 0;
                PYEnter ^= 0xff;//PYEnter = 0xff:选字状态
                break;
            case ' '://扩充为汉字拼音,英文字母输入法切换 --- 未加入
                
                break;
            case '=':
                break;
            default :
                break;
        }

        if (PYEnter)
        {//PYEnter = 0xff:选字状态
	    memcpy(&cpTemp,cpt9PY_Mb[t9PYn],sizeof(struct t9PY_index));
            if((tempchar >= '1') && (tempchar <= '9'))//选择汉字
            {
                HZok=1;
                t9PYn=0;
                //printf ("                                                 \n");
		printf ("Target of Chinese word you had selected :  ");
		tempMB = (unsigned char *)cpTemp.PY_mb;
		tempMB += (Add + (tempchar - '1')*2);
                memcpy((void *)chinese_word,(const void *)tempMB,2);
		puts ((const char *)chinese_word);//显示最后选择的一个汉字
                printf ("\n");
            }
            else
            {
		printf ("The spell of your Selection : ");
		strcpy (pyma,cpTemp.PY);

⌨️ 快捷键说明

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