📄 taxcommon.c
字号:
if(*Ch == NumArr[i]) break; if(i < 10) *Ch = 0x30+i; else *Ch == 0xff; */ if( Ch >= 0x30 && Ch <= 0x39 ) NumFlag = 1; else NumFlag = 0; return NumFlag; } /*// extern void LCD_DisplayOneLine(int Row,int Col,BYTE str[],char SorD,char WorB,int ClrFlag,int VoiceAct); //输入 数字串,返回 8_BCD //return 0x1b->0表示取消输入,<CR>表示结束输入/<F8>表示继续输入->strlen(Str)int GetMoneyStr(BYTE Str[],int row,WORD *InKey){ int DispCol = 0; BYTE BCDstr[20]; BYTE MoneyStr[18]={" 0.00"}; int DotFlag=0,DotCnt=0,IntCnt=0; //进入小数点处理=1,小数点后位数,整数位数 int Key=0,cc;//,LastKey=0; //int err = 0; memset(BCDstr,0,20); memset(BCDstr,'0',16); LCD_DisplayOneLine(row,DispCol,MoneyStr,'D','W',1,0); while( !(Key == 0x1b || Key == 0x0d) ) { WatchdogReset(); //Resets the watchdog timer periodically to prevent timeout. Key = (BYTE)(getch()); if(Key==0) { Key = (BYTE)(getch()); //LastKey = 0xff; Key = 0x4200; } //printf("\n%x",Key); switch(Key) { case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9': if(DotFlag==0) //未进入小数处理 { if(IntCnt==12) ; else if(IntCnt==0 && Key=='0') ; else { if(IntCnt==0) MoneyStr[11]=0x20; for(cc=0;cc<11;cc++) MoneyStr[cc]=MoneyStr[cc+1]; //整数数字前移 MoneyStr[11]=(BYTE)Key; IntCnt++; } }else { //已进入小数处理 if(DotCnt==2) ; else {if(DotCnt<2) DotCnt++; if(DotCnt<=2) MoneyStr[12+DotCnt]=(BYTE)Key; } } break; case '.': DotFlag=1; break; case 0x08: if(DotFlag==1) { MoneyStr[12+DotCnt]=0x30; DotCnt--; if(DotCnt==0) DotFlag=0; //取消小数状态 } else { for(cc=11;cc>0;cc--) MoneyStr[cc]=MoneyStr[cc-1]; //整数数字回退 MoneyStr[0]=0x20; IntCnt--; if(IntCnt==0) MoneyStr[11]='0'; } break; case 0x1b: IntCnt = 0; DotCnt = 0; *InKey = 0x1b; break; case 0x4200: //[F8] case 0x0d: //<CR> ByteMove((char*)&BCDstr[14-IntCnt],(char*)&MoneyStr[15-IntCnt-2-1],IntCnt); ByteMove((char*)&BCDstr[14],(char*)&MoneyStr[13],2); DotCnt = 0; memset(Str,0,9); for(cc=0;cc<8;cc++) { Str[cc] = IntToBCD((WORD)(10*(BCDstr[DotCnt]-0x30)+(BCDstr[DotCnt+1]-0x30))); DotCnt+=2; } if(Key==0x4200) { *InKey = 0x4200; Key = 0x0d; } else *InKey = 0x0d; break; } //end switch //显示 LCD_DisplayOneLine(row,DispCol,MoneyStr,'D','W',1,0); } if((IntCnt + DotCnt)==0) //0x1b IntCnt = 0; else { IntCnt += 2; } return IntCnt;}*/ //从x1,y1,到y2范围,输入数字字符串StrNum[] //数字串长度为Len //PW_Flag==1->按密码串显示,==0->按ASC数字显示 //返回: -1->用户按下ESC,==Len输入数字串长度int KB_NumStrInput(int x1,int y1,int y2,char SorD,int Len,int PW_Flag,BYTE StrNum[],int CR_need) { int StrLen,CursorCnt=0; int CursorMode,ExitFlag; WORD KBch; BYTE Hch,Lch; Lch = 0; StrLen = 0; CursorMode = 0x01; ExitFlag = 0; //清屏幕,从X1,Y1--X1,Y2 //显示光标(x1,y1,CursorMode); CursorMode = !CursorMode; LCD_CursorDiplay(x1,y1,CursorMode,SorD); //CursorMode = !CursorMode; do { //读键入 KBch = ; if(KB_GetStatus()) //得到键盘状态,无键入时函数返回0x0011 { //有键入 KBch = KB_GetValue(); //得到键盘输入码 if(IsNumeric( KBch ) && StrLen < Len) { Hch = (BYTE)(KBch & 0xff); if(PW_Flag==1) //显示 X,x1,y1+StrLen,SorD //显示一字 (x,y,Hch,Lch) x (0-7), y(0-127) LCD_DisplayOneChr(x1,(y1+StrLen)*6,'X',Lch,SorD,'W'); else //显示 数字,x1,y1+StrLen,SorD LCD_DisplayOneChr(x1,(y1+StrLen)*6,Hch,Lch,SorD,'W'); StrNum[StrLen] = Hch; StrLen ++; if(CR_need==0 && StrLen==Len) ExitFlag = 1; }else { switch(KBch) { case K_CR1: case K_CR2: if(CR_need!=0 && StrLen==Len) ExitFlag = 1; break; case K_ESC: //处理清除键 StrLen = -1; StrNum[0] = 0; break; case K_BS: //处理退格键 if(StrLen > 0) { //清本位置上的光标 //显示 空格,x1,y1+StrLen,SorD Hch = 0x20; Lch=0; //LCD_DisplayOneLine( x1,(y1+StrLen-1)*6 ," ",'D',0,0 ); LCD_DisplayOneChr(x1,(y1+StrLen-1)*6,Hch,Lch,SorD,0); //清 输入缓冲区 StrNum[StrLen]=0; StrLen --; //显示 左边光标 LCD_CursorDiplay(x1,y1+StrLen,CursorMode,SorD); CursorMode = (CursorMode==0x01)? 0x02:0x01; } break; } } }else //无键入 usleep(800000); //delay(500); if(StrLen==-1) break; //显示光标(x1,y1+StrLen,CursorMode); CursorMode = !CursorMode; LCD_CursorDiplay(x1,y1+StrLen,CursorMode,SorD); CursorCnt ++; if( CursorCnt==10 ) { CursorCnt=0; CursorMode = ( CursorMode==0x01)? 0x02:0x01; } }while(ExitFlag==0); //}while(StrLen!=Len); // || (emuKB_ch!=K_CR1 || emuKB_ch!=K_CR2)); if(StrLen!=-1) StrNum[StrLen]=0; //返回数字串长度 LCD_DisplayOneChr(x1,(y1+StrLen)*6,0x20,0,SorD,0); //清除 光标 return StrLen; }/*int KB_NumStrInput2(int x1,int y1,int y2,char SorD,int Len,int PW_Flag,BYTE StrNum[],int CR_need) { int StrLen; int CursorMode,ExitFlag; WORD KBch; BYTE Hch,Lch; Lch = 0; StrLen = 0; CursorMode = 0x01; ExitFlag = 0; //清屏幕,从X1,Y1--X1,Y2 //显示光标(x1,y1,CursorMode); LCD_CursorDiplay(x1,y1,CursorMode,SorD); //CursorMode = 0x01; do { //读键入 KBch = ; //if( KB_GetStatus() !=0x11) //得到键盘状态,无键入时函数返回0x0011 if( KB_GetStatus() ) //得到键盘状态,无键入时函数返回0x0011 { //有键入 KBch = KB_GetValue(); //得到键盘输入码 printf("KB ch 1 %x \n",KBch); if(IsNumeric(KBch) && StrLen < Len) { Hch = (BYTE)(KBch & 0xff); if(PW_Flag==1) //显示 X,x1,y1+StrLen,SorD //显示一字 (x,y,Hch,Lch) x (0-7), y(0-127) LCD_DisplayOneChr(x1,(y1+StrLen)*6,'X',Lch,SorD,'W'); else //显示 数字,x1,y1+StrLen,SorD LCD_DisplayOneChr(x1,(y1+StrLen)*6,Hch,Lch,SorD,'W'); StrNum[StrLen] = Hch; StrLen ++; if(CR_need==0 && StrLen<=Len&&StrLen>0) ExitFlag = 1; }else{ printf("KB ch 2 %x \n",KBch); switch(KBch) { case K_CR1: case K_CR2: if(CR_need!=0 && StrLen<=Len&&StrLen>0) ExitFlag = 1; break; case K_ESC: //处理清除键 StrLen = -1; StrNum[0] = 0; break; case K_BS: //处理退格键 if(StrLen > 0) { //清本位置上的光标 //显示 空格,x1,y1+StrLen,SorD Hch = 0x20; LCD_DisplayOneChr(x1,(y1+StrLen)*6,Hch,Lch,SorD,'W'); //清 输入缓冲区 StrNum[StrLen]=0; StrLen --; //显示 左边光标 LCD_CursorDiplay(x1,y1+StrLen,CursorMode,SorD); CursorMode = !CursorMode; } break; } } }else{ //无键入 usleep(250000); //delay(500); printf("sm debug here!!\n"); } if(StrLen==-1) break; //显示光标(x1,y1+StrLen,CursorMode); CursorMode = !CursorMode; LCD_CursorDiplay(x1,y1+StrLen,CursorMode,SorD); CursorMode = ( CursorMode==0x01 )? 0x02:0x01; }while(ExitFlag==0); //}while(StrLen!=Len); // || (emuKB_ch!=K_CR1 || emuKB_ch!=K_CR2)); if(StrLen!=-1) StrNum[StrLen]=0; //返回数字串长度 return StrLen; } */ /* //测试 时钟 //char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat" }; struct tm *p; time_t timep; time(&timep); //取得当前时间和日期 p = gmtime(&timep); printf("\n%4d-%2d-%2d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday); printf("%s;%d;%d;%d\n",wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec); */ //日期时间函数//得到系统日期字符串 YYYY-MM-DDvoid TC_GetSysDateStr( char DateStr[] ){ struct tm *p; time_t timep; time( &timep ); //取得当前时间和日期 p = gmtime(&timep); printf("\n%4d-%2d-%2d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday); //memset( DateStr,'-',10 ); //填'-' WordToAsc( (BYTE *)DateStr ,(WORD)(1900+p->tm_year) , 4 ); //YYYY WordToAsc( (BYTE *)&DateStr[5] ,(WORD)(1+p->tm_mon) , 2 ); //-MM WordToAsc( (BYTE *)&DateStr[8] ,(WORD)(p->tm_mday) , 2 ); //-DD DateStr[4]='-'; DateStr[7]='-'; /* memmove( DateStr ,"2004" , 4 ); memmove( &DateStr[5] ,"03" , 2 ); memmove( &DateStr[8] ,"08" , 2 ); */ DateStr[10] = 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -