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

📄 chnpyime.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 2 页
字号:
                 //if(hz_num*2<=20)                  //如果更改后汉字数小于等于10,则一定要刷新显示
                 {
			      memset(disp_buf,0,50);
		          sprintf(disp_buf,"名称:");
                  strcpy(disp_buf+5,chinese_string);
                  clear_lcd(2,2);
		          lcd_disp(2,0,disp_buf);
                  //clear_lcd(2,1);
                  //lcd_disp(2,0,chinese_string);
                 }
                /* else
                 //lcd_disp(2,0,&chinese_string[(hz_num-10)*2]);     //如果汉字数大于10个,则只显示后最后10个字
                 {
			   
                   clear_lcd(2,1);
                   lcd_disp(2,0,chinese_string); 
                  }
			     */
				 
                }	
              //else 
              // beep(50);
             		
              clear_lcd(1,1);
              //clear_lcd(3,1);
              input_complete=0;
              continue;
		}
		if((inputideal==0)||(inputideal==2)||(inputideal==3))//拼音输入
		{
			if(!input_complete)//输入拼音没有完成
			{
			//send_char(key_buf);
			if(key_buf>='a'&&key_buf<='z')
			{//输入的是小写字母
                while(strlen(input_string)<6)//显示输入的拼音
                {
					if((inputideal==2)||(inputideal==3))
					{
						if(hz_num==input_maxlen)                     //如果已经达到最大字数,
                        {
                          sprintf(disp_buf,"对不起,不能再输入");
      		              clear_lcd(3,1);
      		              lcd_disp(3,0,disp_buf);
     		              if(low_pwr) return CANCEL;               //如果断电了,则EXIT
                          openbacklight();
     		              clear_err=1;
						  input_string[0]=key_buf;
						  hz_str_len=0;
                          break;
	                     
                        }
					  if(inputideal==2)key_buf-=32;
					  chinese_string[hz_num]=key_buf;
					  hz_num++;
					  chinese_string[hz_num]=0;
					  memset(disp_buf,0,50);
		              sprintf(disp_buf,"名称:");
                      strcpy(disp_buf+5,chinese_string);
                      clear_lcd(2,1);
		              lcd_disp(2,0,disp_buf);
					  input_string[0]=0;
					 //send_char(0xbb);
					 // continue;
					 }
				  else{
                       input_string[strlen(input_string)]=key_buf;
				       memset(disp_buf,0,50);
		               sprintf(disp_buf,"输入的拼音为:");
                       strcpy(disp_buf+13,input_string);
			           lcd_disp(1,0,disp_buf);//lcd_disp(1,1,input_string);
                      
				  }
				   break;
                }
          }      
          else if(key_buf==PY_ENTER)//PY_SUBTOTAL)//确认输入的拼音
          {
          	if((hz_num>(input_maxlen-2))&&(input_string[0]))//
			//if(hz_num==Max_length)                     //如果已经达到最大字数,
    		{
			  
			  //if(strlen(input_string)==0)return 0;//输入汉字完成,结束操作
      		  sprintf(disp_buf,"对不起,不能再输入");
      		  clear_lcd(3,1);
      		  lcd_disp(3,0,disp_buf);
     		  if(low_pwr) return CANCEL;               //如果断电了,则EXIT
              openbacklight();
     		  clear_err=1;
			  input_string[0]=1;
			   hz_str_len=0;
               break;//继续等待下一个汉字的拼音输入continue;
     		  //return 0;
	        }
			else if((key_buf==PY_ENTER)&&chinese_string[0]&&(!input_string[0])&&(!clear_err)) //直接回车输入完毕 
                 return 0;//输入汉字完成,结束操作
            if((sequence = pinyin(input_string))==0x20)//if((sequence = py_ime(input_string))==PY_SEQUENCE_error)
 		       {
                 sprintf(disp_buf,"对不起,无此汉字!!!");
                 lcd_disp(3,0,disp_buf);
                 clear_err=1;
				 input_string[0]=1;
                 continue;
                }
                input_complete=1;
                for(i=0;i<211;i++) chi_str_tmp[i] = 0;
                strcpy(chi_str_tmp,pinyin(input_string));
                for(i=0;i<7;i++) input_string[i] = 0;
                ChStrLen = strlen(chi_str_tmp);  //汉字的个数
                //send_char(ChStrLen);
				//send_str(20,chi_str_tmp);
                ChLnNum = ChStrLen/HZ_DISP_NUM;  
                if(!(ChStrLen%HZ_DISP_NUM)) ChLnNum-=1;
                for(j=0;j<ChLnNum+1;j++)
                {
                  for(k=0;k<HZ_DISP_NUM+1;k++)output[j][k]=0;
                  memcpy(output[j],&chi_str_tmp[HZ_DISP_NUM*j],HZ_DISP_NUM);
                  if(j==ChLnNum)for(k=strlen(output[j]);k<HZ_DISP_NUM;k++) {output[j][k]=0;}
                }
                page = 0;
                no=0;
                clear_lcd(1,1);
                con_disp2(1,no*2,2,output[page]);  
                //lcd_disp(1,0,output[page]);//显示第0页
                //con_disp1(1,no*2,2,&output[page][no*2]);  
	  	              
              }
             
            }
            else if(input_complete==1)//已经输入完拼音,开始选择汉字
            {	
                  switch(key_buf)
                  {
                        case UP_ARROW:
                                //前翻页,'0'
                                //向前翻一页并显示
                                
                                if(page==0) {break;}
                                else
                                {
                                  page-=1;
                                  no=0;
								  clear_lcd(1,1);
                    		      break;
                                }

                        case DOWN_ARROW://后翻页
                                if(page==ChLnNum) {break;}
                                else
                                {
                                  page+=1;
                                  no=0;
								  clear_lcd(1,1);
                                  break;
                                }
                     
                        case LEFT_ARROW:
                        	if(!no) 
							 {
							  if(page>0)
							   {
							    page-=1;
								no=0;
								clear_lcd(1,1);
								}
							  break;
							  }
                        	no--;
                        	break;
                        case RIGHT_ARROW:
                         	disp_num=strlen(output[page]);
						    disp_num/=2;
							//send_char(no);
                        	if(no==(disp_num-1)) 
							 {
							  //send_char(ChLnNum);
							  if((disp_num==12)&&(page<(ChLnNum-1)&&(ChLnNum>0))){page+=1;clear_lcd(1,1);}
							  else if(page>0){page-=1;clear_lcd(1,1);}
							  no=0;
							  break;
							 }
                            no++;
                        	break;
                        	
                        case PY_ENTER:
                        	memcpy(hz,&output[page][no*2],2);
                        	input_complete=2;
                        	break;  
                   }  
                   //clear_lcd(1,1);
				   con_disp2(1,no*2,2,output[page]);
                  // lcd_disp(1,0,output[page]);
                   //con_disp1(1,no*2,2,&output[page][no*2]);
  				 
        }
	   }
	   else if((inputideal==1)||(inputideal==4))//区位输入法
	    {
		 if(key_buf>='0'&&key_buf<='9')
          {//输入的是小写字母
                while(strlen(input_string)<6)
                {
				  if(inputideal==4)
				     {
					  if(hz_num==input_maxlen)                     //如果已经达到最大字数,
                        {
                          sprintf(disp_buf,"对不起,不能再输入");
      		              clear_lcd(3,1);
      		              lcd_disp(3,0,disp_buf);
     		              if(low_pwr) return CANCEL;               //如果断电了,则EXIT
                          openbacklight();
     		              clear_err=1;
						  input_string[0]=key_buf;
						hz_str_len=0;
                          break;
	                     
                        }
					  chinese_string[hz_num]=key_buf;
					  hz_num++;
					  chinese_string[hz_num]=0;
					  memset(disp_buf,0,50);
		              sprintf(disp_buf,"名称:");
                      strcpy(disp_buf+5,chinese_string);
                      clear_lcd(2,1);
		              lcd_disp(2,0,disp_buf);
					  input_string[0]=0;
					 }
				  else{
                  input_string[strlen(input_string)]=key_buf;
				  memset(disp_buf,0,50);
		          sprintf(disp_buf,"输入的区位码为:");
                  strcpy(disp_buf+13,input_string);
			      lcd_disp(1,0,disp_buf);//lcd_disp(1,1,input_string);
                  
				 }
				 break;
                }
          }      
          else if(key_buf==PY_ENTER)//PY_SUBTOTAL)
          {
          	if((hz_num>(input_maxlen-2))&&(input_string[0]))//Max_length)                     //如果已经达到最大字数,//Alan 03-10-17
    		{
			  
			  //if(strlen(input_string)==0)return 0;//输入汉字完成,结束操作
      		  sprintf(disp_buf,"对不起,不能再输入");
      		  clear_lcd(3,1);
      		  lcd_disp(3,0,disp_buf);
     		  if(low_pwr) return CANCEL;               //如果断电了,则EXIT
              openbacklight();
			  clear_err=1;
			  input_string[0]=1;
			  hz_str_len=0;
               break;//继续等待下一个汉字的拼音输入continue;
     		  //return 0;
	        }
		   else if((key_buf==PY_ENTER)&&chinese_string[0]&&(!input_string[0])&&(!clear_err))return 0;//输入汉字完成,结束操作 //直接回车输入完毕 
                 
		   else if (strlen(input_string)>3)
		      {
			   if(getquweiHZ(input_string,hz))
			     {
                 sprintf(disp_buf,"对不起,无此汉字!!!");
                 lcd_disp(3,0,disp_buf); 
                 clear_err=1;
				 input_string[0]=1;
                 continue;
                }
               input_complete=2;
			   }
		  }
		  
		}
        if(input_complete==2)//选到一个汉字,显示出选到的汉字 
        {
           memcpy(&chinese_string[hz_num],hz,2);
    	   hz_num+=2;
	       chinese_string[hz_num]=0;
	       chi_str_tmp[0]=0;
		   memset(disp_buf,0,50);
		   sprintf(disp_buf,"名称:");
           strcpy(disp_buf+5,chinese_string);
           clear_lcd(2,1);
		   lcd_disp(2,0,disp_buf);
           break;//继续等待下一个汉字的拼音输入
        } 
      }//while(1) 
   }//for
   //send_char(0xaa);
   return 0;

}

⌨️ 快捷键说明

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