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

📄 ime.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 5 页
字号:
                			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 + -