?? t9py.h
字號:
/******************************************************************************
// 按鍵是根據通用手機鍵盤設置的,全部在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 + -