📄 ime.c
字号:
break;
case K_LJ: if(lastlocation>0) //是订正键
{
disparr[--lastlocation] = ' ';
disparr[4] = ' ';
}
else return val;
break;
case K_HJ: //如果是确认键
case K_UP: //上键
case K_DOWN://下键
case K_TC: //退出键
case K_XJ: //小计
case K_SR: return val; //输入切换
default : continue;
}
}
LcdDisplay(disstartln, instart, disparr, 0x0B); //显示数字
quweival = 0;
for(i=0;i<lastlocation;i++)
{
if(disparr[i]==0 || disparr[i]==' ')break;
quweival = (uint)quweival*10+(uint)disparr[i]-'0';
}
if((1600<quweival) && (quweival<8795))
{//quwei
charout[0] = quweival/100+0xa0;
charout[1] = quweival%100+0xa0;
charout[2] = 0;
LcdDisplay(disstartln,dischinastart,charout,0x0B);
}
else LcdDisplay(disstartln,dischinastart," ",0x0B);
}
}
void Gb18030Hint(uchar x,uchar mode)
{
if(x==2)LcdDisplay(48,2,"1字节编码:20--7F ",mode);
if(x==4)LcdDisplay(48,2,"2字节编码:8140-F7FE ",mode);
if(x==8)LcdDisplay(48,2,"4(B):8139EE39-82358738",mode);
}
uchar Gb18030Input(uchar *buf)
{
uchar bcdlen,k,bcd[10];
uchar key[]={K_HJ,K_SR,K_TC,K_LJ,K_QC,0};
LcdDisplay(32,2,"GB18030编码:",1);
Gb18030Hint(4,1);
DisplayFullRec(31,0,63,182,1);
// DisplayFullRec(47,0,63,182,1);
bcdlen=4;
while(1)
{
memset(bcd,0,sizeof(bcd));
k=GetBcd(32,100,bcd,bcdlen|0x80,key);
bcd[bcdlen]=0;
key[0]=K_HJ;
switch(k)
{
case K_RIGHT: if(bcdlen<8)bcdlen<<=1;
else bcdlen=2;
LcdDisplay(32,100," ",0);
Gb18030Hint(bcdlen,0x0B);
break;
case K_LEFT: if(bcdlen>2)bcdlen>>=1;
else bcdlen=8;
LcdDisplay(32,100," ",0);
Gb18030Hint(bcdlen,0x0B);
break;
case K_HJ:
if(bcd[0]==0)
{
return K_HJ;
}
else k=0;
case K_QC:
case K_LJ:
case K_UP:
case K_DOWN:
case K_SR: strcpy(buf,bcd);
case K_TC: return k;
default: break;
}
}
}
uchar EnglishInput(uchar disstartln, uchar disstartcol,uchar *charout)
{
uchar disparr[20];
uchar lastlocation = 0, instart;
uchar tp[2],i;
uchar const inputlen = 8;
uint val;
LcdDisplay(disstartln,disstartcol+4,"英文",1);
DisplayFullRec(disstartln-1, disstartcol, disstartln+15, disstartcol+116,1); //画框架
DisplayFullRec(disstartln-1, disstartcol+40, disstartln+15, disstartcol+40,1); //画竖线
instart = disstartcol + 44;
charout[0] = 0;
tp[1]=0;
while(1)
{
val = ImeKeyScan(disstartln,instart+lastlocation*8);
if((val>='a' && val<='z') || (val>='0' && val<='9')) //是字母或数字
{
if(lastlocation<inputlen) //在允许输入的长度内
{
disparr[lastlocation++] = val;
disparr[lastlocation] = 0;
}
}
else
{
val-=0x1000;
switch(val)
{
case K_00: disparr[lastlocation++] = '0';
if(lastlocation<inputlen)
disparr[lastlocation++] = '0';
disparr[lastlocation] = 0;
break;
case K_QC: if(lastlocation>0)
{
for(i=0;i<=lastlocation;i++)
disparr[i] = ' ';
disparr[8] = ' ';
lastlocation = 0;
break;
}
else return val;
case K_LJ: if(lastlocation>0)
{
disparr[--lastlocation] = ' ';
disparr[8]=' ';
break;
}
else return val;
case K_HJ:
case K_UP:
case K_DOWN:
case K_SR:
case K_XJ: strncpy(charout,disparr,lastlocation);
case K_TC:
return (uchar)val;
default : continue;
}
}
LcdDisplay(disstartln, instart, disparr, 0x0B); //显示数字
}
}
//--------------------------------------------------------------------
//初始化手写板
//--------------------------------------------------------------------
uchar ManuscriptIni()
{
uchar i=0,y0=0,value=0,str[10],len,num;
uint WaitTime = 1000;
UART1_Mod1_Timer1_9600;
COM1CS;
UARTB;
str[0]=0x01,str[1]=0x93,str[2]=0x02,str[3]=0x01,str[4]=0xff;
for(i=0;i<5;i++)y0+=str[i];
y0%=256;
y0=~y0;
y0+=1;
str[5]=y0;
num=0;
len=6;
while(num<len)
{
SBUF2 = str[num];
while((SCON2 & 0x02)==0);
SCON2 &= 0xFC;
num++;
}
num=0;
len=5;
while(num<len)
{
WaitTime=0;
while((SCON2 & 0x01)==0){ WaitTime++; if(WaitTime>5000) return 0; }
SCON2 &= 0xFC;
str[num]=SBUF2;
num++;
}
if(str[0]==0x01 && str[1]==0x93 && str[2]==0x01 && str[3]==0x93 && str[4]==0xd8)
{
RxdLen=200;
RxdNum=0;
return 1;
}
else return 0;
}
//读取手写板汉字
uchar ManuscriptRead(uchar *str)
{
uchar i=0,y0=0,value=0;
if((RxdBuf[0]==0x01)&&(RxdBuf[1]==0x91) && (RxdNum>RxdBuf[2]+3) )
{
y0=0;
value=RxdBuf[2];
y0+=0x01;y0+=0x91;y0+=value;
value+=3;
for(i=3;i<value;i++)y0+=RxdBuf[i];
y0%=256;
y0=~y0;
y0+=1;
if(y0==RxdBuf[value])//比较校验和是否正确
{
for(i=3;i<value;i++)str[i-3]=RxdBuf[i];//GBK码
str[i]=0;
RxdNum = 0;
RxdBuf[0] = RxdBuf[1] = RxdBuf[2] = 0;
return 1;
}
return 0;
}
}
//手写板输入法
//显示格式:
// -----------------
// | 手写 | 联接成功 |
// -----------------
//uchar QuWeiInput(uchar DisStartLn, uchar DisStartCol,uchar *CharOut)
uchar ManuscriptInput(uchar disstartln, uchar disstartcol, uchar *outbuff)
{
uchar val=0;
LcdDisplay(disstartln,disstartcol+4,"手写",1); //显示 ‘区位’
DisplayFullRec(disstartln-1, disstartcol, disstartln+15, disstartcol+112,1); //画框架
DisplayFullRec(disstartln-1, disstartcol+40, disstartln+15, disstartcol+40,1); //画竖线
outbuff[0] = 0;
if(ManuscriptIni()==1) //设置手写板参数
LcdDisplay(disstartln,disstartcol+45,"联接成功",0x0C);
else
LcdDisplay(disstartln,disstartcol+45,"联接失败",0x0C);
RxdNum=0;
RxdBuf[0] = RxdBuf[1] = RxdBuf[2] = 0;
RxdLen = 5;
while(RxdNum<RxdLen)
{
while((SCON2 & 0x01)==0)
{
val = GetKey();
if(val != 0xff) break;
}
SCON2 &= 0xFC;
RxdBuf[RxdNum]=SBUF2;
if(val==K_HJ) return val; //如果是确认键 返回
if(val==K_UP) return val; //上键
if(val==K_DOWN) return val; //下键
if(val==K_TC) return val; //退出键
if(val==K_QC) return val;
if(val==K_SR) return val; //输入切换
if(val==K_LJ) return val; //退格键
RxdNum++;
if(RxdNum==3)RxdLen=RxdBuf[2]+4;
}
if(ManuscriptRead(outbuff)==1) return K_XJ; //有汉字输入返回`2
else { outbuff[0] = 0; return K_XJ; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -