📄 实用的源码.c
字号:
counter[1]=0x00;
counter[0]=counter[0]+1;
if(counter[0]==0x64)
{
counter[3]=0x00;
counter[2]=0x00;
counter[1]=0x00;
counter[0]=0x00;
}
}
}
}
}
//T9---输入法---主程序
//========================================主程序体========================================"
unsigned char py_ime(unsigned char code **pchp,unsigned char input_py_val[])
{
unsigned char code (*p1)[8],(*p2)[8],(*p3)[8];
unsigned char i=0;
if (input_py_val[0]==0) return(0); //如果输入空字符返回0"
if (input_py_val[0]=='i') return(0);
if (input_py_val[0]=='u') return(0);
if (input_py_val[0]=='v') return(0);
p1=p2=PY_index_pointer[input_py_val][0]-0x61]; //计算入口树根"
p3=PY_index_pointer[input_py_val][0]-0x60]; //设置指针界限"
if (p1==0) return(0); //查询失败返回0"
i=1;
while (p1<p3){//查找
if(input_py_val[i]==' ') break; //如果找到空格,就不再向下查找
if ((*p1)[i-1]==input_py_val[i]) //条件满足,继续向下找
{
if(i>1){
if ((*p1)[i-2]!=input_py_val[i-1]) break;
} //如果已经比较一个,再比较下一次时,上一个也相等,若不等,则不再比较
p2=p1;
i++;
}
else p1++;
} //查找
*pchp=(unsigned char code *)((*p2)[6]+(*p2)[7]*256+py_mb_begin);
//返回查询结果首地址"
return i; //返回正确匹配个数,当为零时,即一个也没有匹配上
}
void strto20h(unsigned char *buf,unsigned char n){//用于清空字符串,将串清空成空格20
uchar i;
for(i=0;i<n;i++) buf[i]=0x20;
} //用于清空字符串,将串清空成空格20
//将输入的汉字或字符显示在当前LCDX,LCDY的位置返回值为输入字符或汉字长度,一个汉字占两个数
unsigned int pyinput(unsigned char *pbuf,unsigned int len){ //存贮位置,最常输入数
uchar x,y; //用于记录显示地址
uchar pybuf[6]; //用于存贮输入的拼音字母
uint ibuf; //INT型临时变量
uchar pyi; //用于存贮 输入字母指针
uchar keyi; //用于存贮上一次的键值,即指明按的哪一个键,选择字母时用
uchar fxi; //方向记数,当为0时,不显示,也不起作为,当用方向键后,确认键也起作用
uchar fyi; //分页键,用在汉字显示分页用,一页13个汉字
uchar inputlen; //当屏文字长度,记事本,编辑最多只能编一屏,如果有第二屏,第一屏不能修改
uchar bzpy; //用于指明是拼音输入还是英文输入当为0时为数字输入,当为1时,为英文,当为2时,
拼音
if(len>239) {
qdcx();
return 0;
} //当总长度大于一屏时,长响,并返回0
bzpy=0; //初始化为数字
inputlen=0; //初始化为0即本次还未输入一个汉字
linestate=0; //先定义各行状态为0,只有换行时不完成,才置1
x=lcdx;y=lcdy;
xszfhz('_',0); //显示光标
lcdx=0;lcdy=112;
xsstr(pystr1,1,0); //返着显示,长度不受限制显示拼音
bzpyinput1: //当执行了中英文切换,跳到此处
strto20h(pybuf,6); //将输入字母空间清空
pyi=0; //未输入字母时,地址为0
lcdx=0;lcdy=96;
if(bzpy<1) xsstr(pystr2+0,1,2); //当为0时,为数字输入
else if(bzpy<2) xsstr(pystr2+2,1,2); //当为1时,为英文
else xsstr(pystr2+4,1,2); //其它为拼音
lcdx=2;lcdy=96; xsnkb(0); //清掉无用信息,在提示行,其它行不管
if(bzpy<1){//当为0时为数字输入
bzpysz:
key=rbkey(); //等待一个值的输入
switch(key){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
key=key+0x30;
bzpysz1:
if(inputlen>len-1){ //如果已经输入够数,再按数字键,不予处理
qdcx();
goto bzpysz;
} //如果已经输入够数,再按数字键,不予处理
lcdx=x;lcdy=y;
pbuf[inputlen]=key;
xszfhz(key,0); //显示字母
x=lcdx;y=lcdy; //重新取回输入的汉字
xszfhz('_',0); //显示光标
inputlen++; //记数自动加1
goto bzpysz; //输入完数字后,
case 10: //.
key='.';
goto bzpysz1;
case 11: //*
key='*';
goto bzpysz1;
case 12: // /
key='/';
goto bzpysz1;
case 13: //+
key='+';
goto bzpysz1;
case 14: //-
key='-';
goto bzpysz1;
case 15: //=
key='='; //借用KEY暂存符号
goto bzpysz1;
case 16:
if(bzpy<2) bzpy++; //如果小于2,则加1
else bzpy=0; //返回到数字输入
goto bzpyinput1; //重新显示中英文方式
case 17: //取消键,每按一次,当前位置的输入将删除
lcdx=x;lcdy=y;
xszfhz(' ',0); //将原光标清掉
if(inputlen<1) return 0; //如果一个字母也没有输入,取消键退出
inputlen--; //总长度自动减1
if(pbuf[inputlen]>0xa0){
pbuf[inputlen]=0x20; //给一个空格
inputlen--;
pbuf[inputlen]=0x20; //给一个空格
if(x>1) x-=2;
else {
y-=16;
x=28;
key=1;
key=key<<(y/16); //借用KEY暂存位比较值 因后面没有用KEY值
if(linestate&key){
x--; //当有空格时,X值再减1
linestate=linestate^key; //异或,清掉该位
} //当已经清掉了该行,则该位也应该清掉
} //当需要换行时
lcdx=x;lcdy=y;
xszfhz('_',0); //显示光标
xszfhz(' ',0);
} //即要删除的是汉字
else {
pbuf[inputlen]=0x20; //给一个空格
if(x>0) x--;
else {
y-=16;
x=29;
key=1;
key=key<<(y/16); //借用KEY暂存位比较值 因后面没有用KEY值
if(linestate&key){
x--; //当有空格时,X值再减1
linestate=linestate^key; //异或,清掉该位
} //清完一个后,且换行,有空位,清掉该标志
} //当需要换行时
lcdx=x;lcdy=y;
xszfhz('_',0); //显示光标
} //删除的是字母
goto bzpysz;//返回重新输入
case 20:
return inputlen; //当按确认键返回时,返回输入数量
default:
qdcx(); //不是有效的键值,长响
} //键值处理
goto bzpysz;
} //数字输入
else if(bzpy<2){//当为1时,为英文输入
bzpyinputyw: //英文输入跳转位
key=rbkey(); //取出一个键值
switch(key){//键值处理
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
keyi=key; //取出当前键值,进入显示提示信息阶段
fxi=0; //开始时第一个字母返显不处理翻页
break;
case 10: //.
key='.';
goto bzpyinputywt;
case 11: //*
key='*';
goto bzpyinputywt;
case 12: // /
key='/';
goto bzpyinputywt;
case 13: //+
key='+';
goto bzpyinputywt;
case 14: //-
key='-';
goto bzpyinputywt;
case 15: //=
key='='; //借用KEY暂存符号
bzpyinputywt: //特殊符号处理+-*/=等
lcdx=x;lcdy=y;
pbuf[inputlen]=key;
xszfhz(key,0); //显示字母
goto bzpyinputywz1; //直接取出字符,上屏
case 16:
if(bzpy<2) bzpy++; //如果小于2,则加1
else bzpy=0; //返回到数字输入
goto bzpyinput1; //重新显示中英文方式
case 17: //取消键,每按一次,当前位置的输入将删除
lcdx=x;lcdy=y;
xszfhz(' ',0); //显示空格,清掉原来的光标
if(inputlen<1) return 0; //如果一个字母也没有输入,取消键退出
inputlen--; //总长度自动减1
if(pbuf[inputlen]>0xa0){
pbuf[inputlen]=0x20; //给一个空格
inputlen--;
pbuf[inputlen]=0x20; //给一个空格
if(x>1) x-=2;
else {
y-=16;
x=28;
key=1;
key=key<<(y/16); //借用KEY暂存位比较值 因后面没有用KEY值
if(linestate&key){
x--; //当有空格时,X值再减1
linestate=linestate^key; //异或,清掉该位
} //当已经清掉了该行,则该位也应该清掉
} //当需要换行时
lcdx=x;lcdy=y;
xszfhz('_',0); //显示光标
xszfhz(' ',0);
} //即要删除的是汉字
else {
pbuf[inputlen]=0x20; //给一个空格
if(x>0) x--;
else {
y-=16;
x=29;
key=1;
key=key<<(y/16); //借用KEY暂存位比较值 因后面没有用KEY值
if(linestate&key){
x--; //当有空格时,X值再减1
linestate=linestate^key; //异或,清掉该位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -