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

📄 query.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
    lcd_disp(0,0,disp_buf); 
    con_disp(0,0,strlen(disp_buf),disp_buf);
	  
    if(step<3) break;
    else 
        {
          clear_lcd(0,4);
          return OK;
        }
      break;
      default:
        error=KEY_ERROR;
      break;  
    }	
  }
  }
//==================================================================================
uchar get_add_password(uchar *buf)
{
	uchar temp[2],i;
	uchar tempbuf0[10],tempbuf1[4];
	if(read_rtc(tempbuf0))return 1;
 
	temp[0]=tempbuf0[0]*tempbuf0[0]+tempbuf0[0]*tempbuf0[2];        //年*年+年*天
	temp[1]=tempbuf0[0]*tempbuf0[1]+tempbuf0[0]*tempbuf0[2]+temp[0];//年*月+年*天+年*年+年*天
 
	tempbuf1[0]=(((temp[0]&0xf0)>>4)>9)? 0x30:(0x30|((temp[0]&0xf0)>>4));
	tempbuf1[1]=((temp[0]&0x0f)>9)? 0x30:(0x30|(temp[0]&0x0f));
	tempbuf1[2]=(((temp[1]&0xf0)>>4)>9)? 0x30:(0x30|((temp[1]&0xf0)>>4));
	tempbuf1[3]=((temp[1]&0x0f)>9)? 0x30:(0x30|(temp[1]&0x0f));
	for(i=0;i<4;i++)*buf++=tempbuf1[i];
	return 0;
}
//===================================================================================
uchar get_super_password(void)
{
 	//uchar tmp_receiver_no;             
	uchar password[PASSWORD_LEN+10];    //密码
	ulong num;
	uchar numkey[15],buf[50];
	uchar key_tmp;//rlt;//,key_num;

//	tmp_receiver_no=0;
	num=0;	
	set_value0(numkey,(uint)sizeof(numkey));
	set_value0(password,(uint)sizeof(password));
	key_tmp=0;
	clear_lcd(0,MAX_LCD_NUM);
	strcpy(buf,"请输入超级密码:");
	lcd_disp(0,0,buf);
   
	while(1)
	{
		
		if(low_pwr) return(POWER_OFF);
		openbacklight();
		key_tmp=get_key();
		if(!key_tmp) continue;//等待按键
	
		if(key_tmp==VOID)//取消退出 
		{
			clear_lcd(0,MAX_LCD_NUM);
			return(CANCEL);
		}
		if(key_tmp==CLEAR)//清除 
		{
			set_value0(numkey,(uint)sizeof(numkey));
			clear_lcd(3,1);
			num=0;	
			continue;
		}
		if(key_tmp>='0' && key_tmp<='9' ) //数字键
			
		{
		   numkey[num++]=key_tmp;
		   memcpy(buf,"*****************",strlen(numkey));
		   buf[strlen(numkey)]=0;
           clear_lcd(3,1);
		   lcd_disp(3,0,buf);		
			continue;
		}
		else //功能键
		{
			//num=numstr_to_long(numkey,0);	
		
			

		switch(key_tmp)
		{
		
		case CASH://现金/确认键
			if(num==0)
			{
				clear_lcd(3,1);
				strcpy(buf,"按键错误,请重新输入");
				lcd_disp(3,0,buf);
				num=0;
				set_value0(numkey,(uint)sizeof(numkey));
				continue;
			}
			//从eeprom中读出该收款员的密码,并比较
			clear_lcd(3,1);
			strcpy(buf,"密码校验中...");
			lcd_disp(3,0,buf);
			if(read_eeprom(SUPERPASSWORD,PASSWORD_LEN,password))
						return(READ_EEPROM_FAIL);
			get_add_password(password+6);
		    password[PASSWORD_LEN+4]=0;
		
			//send_str(10,numkey);
			if(strcmp(password,numkey))
			{
				clear_lcd(3,1);
				strcpy(buf,"密码不符,请重新输入");
				lcd_disp(3,0,buf);
				num=0;
				set_value0(numkey,(uint)sizeof(numkey));
				continue;
			}
			else
			{
			
				clear_lcd(0,MAX_LCD_NUM);
				return(0);
			}
			break;
		default:
			clear_lcd(3,1);
			strcpy(buf,"按键错误,请重新输入");
			lcd_disp(3,0,buf);
			num=0;
			key_tmp=0;
			set_value0(numkey,(uint)sizeof(numkey));
			continue;

		}
      }
	}
	return(0);
}
//====================================================================================
uchar get_start_time_affair(uchar *timebuf,uchar mode)
{
  uchar xdata disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
  uchar key;//键值
  uchar  numkey_buf[15];//输入的数字键字符串缓冲区
  uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
  uchar error;//错误类别
  uchar bit_no;//辅币号
  uchar i;
  uchar xdata rtc[7];
  //uint  year;
  //uchar month,day;
  
  //----------初始化----------------//
  clear_lcd(0,MAX_LCD_NUM);
  error=0;
  for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
  point=0;
  max_key_num=12;

  bit_no=MAX_BIT_TYPE_NUM;
  //----------提示当前功能--------------//
  //get_menu_name_sp(MAX_LAYER_MENU,SET_TIME,disp_buf);
  //lcd_disp(0,0,disp_buf);
  //----------提示下一步操作---------------//
  if(!mode)
  {
   read_rtc(rtc);
   sprintf(disp_buf,"请输入开始日期与时间如:\r20%02bx年%02bx月%02bx日%02bx:%02bx\r输入:20%02bx%02bx%02bx%02bx%02bx\r",
	  rtc[0],rtc[1],rtc[2],rtc[3],rtc[4],rtc[0],rtc[1],rtc[2],rtc[3],rtc[4]);
   lcd_disp(0,0,disp_buf);
   strcpy(disp_buf,"按[确定]键为全部记录");
   lcd_disp(3,0,disp_buf);
   }
   else {strcpy(disp_buf,"请输入事件类型代码:\r");lcd_disp(0,0,disp_buf);}
   
  //----------等待按键---------------//
  while(1)
  {
    if(error) catch_error_display(error,0);//捕获错误	
    if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
	openbacklight();
    key = get_key();
    if(!key) continue;
    //beep(50);
    if(error&&key!=CLEAR&&key!=VOID) continue;//出错后,须即时更正或取消操作
    switch(key)    
    {
      case VOID://取消操作
        clear_lcd(1,2);
        return CANCEL;
      break;
      case CLEAR://即时更正
        if(error)//报错时
        {
          clear_lcd(3,1);//清除错误显示
          error=0;//清除错误标志
        }
        if(numkey_buf[0]!=0)//若有数输入 
        {
          numkey_buf[0]=0;//清除数字输入缓冲区
          clear_lcd(3,1);//清除数字显示
        }
      break;
      //-------取得输入数字键-------//
      case '0' :
      case '1' :
      case '2' :
      case '3' :
      case '4' :
      case '5' :
      case '6' :
      case '7' :
      case '8' :
      case '9' :
      case KEY00://双0
     
	//-------取得输入数字键-------//
    error=get_valid_digit(key,point,max_key_num,numkey_buf);
	if(error)//输入非法 
	{
	  error=KEY_ERROR;
	  break;
	}
	//------显示输入数-------//
	clear_lcd(3,1);
	lcd_disp(3,0,numkey_buf);
      break;  	
      
   case ENTER://最后确定
     
    if(!mode)
	{
	 for(i=0;i<(strlen(numkey_buf)/2-1);i++)
	 rtc[i]=(numkey_buf[i*2+2]-0x30)*0x10+numkey_buf[i*2+3]-0x30;
     for(i=0;i<(strlen(numkey_buf)/2-1);i++)*timebuf++=rtc[i];
	 }
	else
       {
	   if(numkey_buf[1]) *timebuf=(numkey_buf[0]-0x30)*0x10+numkey_buf[1]-0x30;
	   else               *timebuf=numkey_buf[0]-0x30;
	   }
	 return 0;
      break;
      default:
        error=KEY_ERROR;
      break;  
    }	
  }
}
//======================================================================================
uint look_up_fau(uchar *buf,uchar mode,uint temp)
{
	uchar addbuf[10];
	uint  addtemp;
	uint  i;
	uchar lrc;
	ulong fauadd;
	if(read_eeprom(FAU_Quantity,2,&addtemp))return 0;

	if(!mode)   //按时间
	{
		for(i=0;i<addtemp;i++)
		{
			fauadd=FAU_DATA_START_ADD+9*i;
			if(i%yisectorqu)fauadd+=7;
			if(read_flash(fauadd,9,addbuf))return 0;
			lrc=lrcdata(8,1,addbuf);
			if(((addbuf[0]>buf[0])
			||((addbuf[0]==buf[0])&&(addbuf[1]>buf[1]))
			||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]>buf[2]))
			||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]==buf[2])&&(addbuf[3]>buf[3]))
			||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]==buf[2])&&(addbuf[3]==buf[3])&&(addbuf[4]>=buf[4]))
			)&&(lrc==addbuf[8])) return i+1;
		}
	}
	else ////按事件
	{
		for(i=temp;i<addtemp;i++)
		{
			fauadd=FAU_DATA_START_ADD+9*i;
			if(i%yisectorqu)fauadd+=7;
			if(read_flash(fauadd,9,addbuf))return 0;
			lrc=lrcdata(8,1,addbuf);
			if((addbuf[5]==buf[0])&&(lrc==addbuf[8])) return i+1;
		}	  
	}
	return 0xffff;
}
//====================================================================================
void disp_fauqu(uchar fau)
{
	uchar buf[25];
	strcpy(buf,"事件类型为:");
	switch(fau)
	{
			case SYSINTI:
                 strcat(buf,"系统初始化");
				 break;
            case SOLFWAREUPDATE:
			      strcat(buf,"应用软件维护");
 		          break;
			case TIMEUPDATE:
			      strcat(buf,"系统时间更改");
 		          break;
			case USERUPDATE:
 		          strcat(buf,"用户权限更改");
			       break;
			case INTPUTDATA:
 		          strcat(buf,"外部接口通讯");
			       break;
			case CLEARFAUDATA:
			      strcat(buf,"审计记录删除");
			       break;
		   case FAILURREAFFAIRS:
			      strcat(buf,"失败事件记录");
			      break;
 		     
			default:
			        strcat(buf,"其他审计记录");
				    break;
           }
	lcd_disp(1,0,buf);

}
//===================================================================================
void disp_fauresult(uchar *fau)
{
	uchar buf[25];
	uchar buf1[5];
	strcpy(buf,"事件结果为:");
	if(!*fau)strcat(buf,"成功");//0成功
	else    strcat(buf,"失败");//1失败
	lcd_disp(3,0,buf);
	strcpy(buf,"操作用户为:");//1失败
	buf1[0]=(*(fau+1)/10)|0x30;
	buf1[1]=(*(fau+1)%10)|0x30;
	buf1[2]=0;
	strcat(buf,buf1);
	strcat(buf,"号");
	lcd_disp(2,0,buf);
}
//====================================================================================
/*uchar display_faudata(uint start,uchar mode)
{
	uchar addbuf[10];
	uint  addtemp;
	uint  temp,temp0,oldtemp;
	uchar disp_buf[25];
	uchar buf1[5];
	 uchar key_buf;
	uchar lrc;
	ulong fauadd;

	temp=start;
	temp--; 
	if(read_eeprom(FAU_Quantity,2,&addtemp))return 1;
 
	while(1)
	{
		if((temp!=oldtemp)&&(temp!=0xffff))
		{
			clear_lcd(0,MAX_LCD_NUM);                //清最大显示行数4行
			oldtemp=temp;
			fauadd=FAU_DATA_START_ADD+9*temp;
			lrc=temp%yisectorqu;
			if((lrc==0)&&(temp!=0))fauadd+=7;//跨区
			if(read_flash(fauadd,9,addbuf))return 1;
			lrc=lrcdata(8,1,addbuf);
			if(lrc==addbuf[8])
			{
				sprintf(disp_buf,"20%02bx年%02bx月%02bx日%02bx时%02bx分\r"
				,addbuf[0],addbuf[1],addbuf[2],addbuf[3],addbuf[4]);
				lcd_disp(0,0,disp_buf);
				disp_fauqu(addbuf[5]);
				if((addbuf[6]==0)||(addbuf[6]==1))disp_fauresult(&addbuf[6]);
				else 
				{
					//strcpy(disp_buf,"失败的操作为:");
					strcpy(disp_buf,"操作用户为:");//1失败
					buf1[0]=(addbuf[7]/10)|0x30;
					buf1[1]=(addbuf[7]%10)|0x30;
					buf1[2]=0;
					strcat(disp_buf,buf1);
					strcat(disp_buf,"号");
					lcd_disp(2,0,disp_buf);
					catch_error_display(addbuf[6],1);
				}
			}
			else 
			{
				strcpy(disp_buf,"对不起,未查到下一条");
				lcd_disp(3,0,disp_buf);
			}
		}
		if(low_pwr) return POWER_OFF;//如果断电了,则exit 
		openbacklight();
		key_buf= get_key();
		if(key_buf)
		{
			switch(key_buf)
			{
			case UP_ARROW:
                                if(temp<=start-1) {break;}
                                else if(!mode)temp--;
								else if(temp>(start-1))
								  {
								 
								  temp0=look_up_fau(&fau_Affairs,1,temp-1);
                                  temp=temp0-1;
								  } 
                                break;
                        case DOWN_ARROW://后翻页
                                if(temp>=addtemp-1) {strcpy(disp_buf,"对不起,审计类已查完");lcd_disp(3,0,disp_buf);break;}
								else if(!mode)temp++;
                                else 
								{
								 
								 if(mode)
								   {
								   temp0=look_up_fau(&fau_Affairs,1,temp+1);
								   if((temp!=0)||(temp!=0xffff))tem

⌨️ 快捷键说明

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