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

📄 setup.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
		  memset(buf,0,50);
		   result=wait_usal_key(0);
  	      if(result==POWER_OFF) return POWER_OFF;
  	      else if(result==OK) 
		  {
		  //memset(buf,0x30,50);
		  strcpy(buf,"按[取消]转手工输入\0");
          lcd_disp(0,0,buf);
		  // for(i=0;i<16;i++)buf[i]=0x30+i;send_str(16,buf);
		  while(1)
		  {
		    result=rece(12,&buf[4]);//bar_code(14,buf);
		    if(result==0){memset(buf,0x30,4);buf[16]=0;break;}//自动加4个0
            result = get_key();
			if(result ==VOID){buf[0]=0;break;}
			if(low_pwr) return POWER_OFF;
		   }
		   }
		  if(buf[0]==0)
		  {
		  strcpy(buf,"请输入要设置的机器号:\0");
          lcd_disp(0,0,buf);
          memset(buf,0,50);
          result=get_num(buf);
          if(result) break;
		  }
          key=strlen(buf);
		  if(key==0) break;
          if(!(key>15))
		  {
           for(i=0;i<key;i++)buf[20+i]=buf[i];
           for(i=0;i<(16-key);i++)buf[i]='0';
		   for(i=0;i<key;i++)buf[16-key+i]=buf[i+20];
		   }
		  //send_str(17,buf);
          StrToHex(16,buf);
		 
		if(read_eeprom(MANUFACTURER_INFO+8,((uint)sizeof(g_manufacturer_info)-8),&buf[8]))
		return(READ_EEPROM_FAIL);
		crctemp=crcxdata(sizeof(g_manufacturer_info)-2,buf);
	    buf[12]=crctemp>>8;
		buf[13]=crctemp;
	   if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
		return(WRITE_EEPROM_FAIL);
		clear_lcd(0,4);
		strcpy(buf,"机器号设置成功!\r");//按任意键继续\r
        lcd_disp(2,0,buf);
       /* while(1)
         {
      
         if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
		 openbacklight();
          key=get_key();
         if (!key)  continue;  //如果无键按下则重新扫描
          result=0;//beep(300);
         //if((key==ENTER)||(key==VOID)||(key==CLEAR))
		 break;      //如果按下确认键就退出
         }
		 */
		 break; 
	case SET_ZHIDATE:
	   	   read_eeprom(PIN_TMP1,10,buf);
       if(!((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0  || buf[1]==0xFF) &&
		(buf[2]==0  || buf[2]==0xFF) && (buf[3]==0  || buf[3]==0xFF) &&
		(buf[4]==0  || buf[4]==0xFF) && (buf[5]==0  || buf[5]==0xFF) &&
		(buf[6]==0  || buf[6]==0xFF) && (buf[7]==0  || buf[7]==0xFF)))
 
       {
	    result=253;//CANCE;
        break;        //机器已初始化
       }
	    //result=enter_application_direct(USER_CARD);
        //  if(result) return result;
	    result=check_clear_card(0,&k);
        if(result==POWER_OFF) return POWER_OFF;
  	    else if(result) break;//==CANCEL
        clear_lcd(0,4);
		//strcpy(buf,"请输入机器制造日期:\0");
        
		read_rtc(rtc);
		sprintf(buf,"请输入机器制造日期\r如:20%02bx年%02bx月%02bx日输入20%02bx%02bx%02bx\r",
	    rtc[0],rtc[1],rtc[2],rtc[0],rtc[1],rtc[2]);
	    lcd_disp(0,0,buf);
        memset(buf,0,50);
        result=get_num(buf);
        if(result) break;
        key=strlen(buf);
		if(key!=8)break;
        StrToHex(8,buf);
		for(key=0;key<4;key++)buf[key+8]=buf[key];
		if(read_eeprom(MANUFACTURER_INFO,((uint)sizeof(g_manufacturer_info)-6),buf))
		return(READ_EEPROM_FAIL);
	    crctemp=crcxdata(sizeof(g_manufacturer_info)-2,buf);
	    buf[12]=crctemp>>8;
		buf[13]=crctemp;
	    if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
		return(WRITE_EEPROM_FAIL);
		clear_lcd(0,4);
		strcpy(buf,"机器制造日期设置成功!\r");//按任意键继续\r
        lcd_disp(2,0,buf);
       /* while(1)
         {
      
         if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
		 openbacklight();
          key=get_key();
         if (!key)  continue;  //如果无键按下则重新扫描
         result=0;// beep(300);
         //if((key==ENTER)||(key==VOID)||(key==CLEAR))
		 break;      //如果按下确认键就退出
         }
		 */
		break; 
	   case CLEAR_PINCODE:
	     // result=enter_application_direct(USER_CARD);
        //  if(result) return result;
	      result=check_clear_card(0,&k);
		  //send_char(k);
          if(result==POWER_OFF) return POWER_OFF;
  	      else if(result) break;//==CANCEL
	      clear_lcd(0,4);
		  strcpy(buf,"机器重新初始化\r按[确认]键确定\r");
          lcd_disp(0,0,buf);
		  result=wait_usal_key(1);//接受[取消]键或[确认]键
  		 if(result==POWER_OFF) return POWER_OFF;
  		 else if(result==CANCEL)  break; 
		/*
		  while(1)
         {
      
           if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
		   openbacklight();
           key=get_key();
           if (!key)  continue;  //如果无键按下则重新扫描
           // beep(300);
		   if((key==VOID)||(key==CLEAR))return 0;
           if(key==ENTER)break;//||(key==VOID)||(key==CLEAR))//如果按下确认键就退出
		   else    continue;     
         }
		 */
		 //
		 update_Clear_card(k);
       	for(i=0;i<5;i++)buf[i]=0xaa;     //设置格式化文件的标志
        if(write_eeprom(FORMATFILE,5,buf)) 
				return(WRITE_EEPROM_FAIL);
	   read_eeprom(PIN_TMP1,10,buf);
       if((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0  || buf[1]==0xFF) &&
		(buf[2]==0  || buf[2]==0xFF) && (buf[3]==0  || buf[3]==0xFF) &&
		(buf[4]==0  || buf[4]==0xFF) && (buf[5]==0  || buf[5]==0xFF) &&
		(buf[6]==0  || buf[6]==0xFF) && (buf[7]==0  || buf[7]==0xFF))
 
       {
	   
        break;        //机器未初始化
       }
          memset(buf,0xff,50);
	      if(!(write_eeprom(PIN_TMP1,10,buf)))//break;//清PIN码 
                strcpy(buf,"设定成功!\r请关机重启!");//\r按任意键继续\r
		  else  strcpy(buf,"设定失败!!");//\r按任意键继续\r
		  clear_lcd(0,4);
          lcd_disp(2,0,buf);
		  update_Clear_card(k);
        /*while(1)
         {
      
         if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
		 openbacklight();
          key=get_key();
         if (!key)  continue;  //如果无键按下则重新扫描
		 result=0;
         //beep(300);
         //if((key==ENTER)||(key==VOID)||(key==CLEAR))
		 break;      //如果按下确认键就退出
         }
		 */
	   break;
	  case FORMAT_FILE:

           read_eeprom(PIN_TMP1,10,buf);
       if(!((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0  || buf[1]==0xFF) &&
		(buf[2]==0  || buf[2]==0xFF) && (buf[3]==0  || buf[3]==0xFF) &&
		(buf[4]==0  || buf[4]==0xFF) && (buf[5]==0  || buf[5]==0xFF) &&
		(buf[6]==0  || buf[6]==0xFF) && (buf[7]==0  || buf[7]==0xFF)))
 
       {
	    result=253;//CANCE;
        break;        //机器已初始化
       }
	  //    result=enter_application_direct(USER_CARD);
      //    if(result) return result;
	      result=check_clear_card(0,&k);
          if(result==POWER_OFF) return POWER_OFF;
  	      else if(result) break;//==CANCEL
	      clear_lcd(0,4);
		  strcpy(buf,"机器文件格式化\r按[确认]键确定\r");
          lcd_disp(0,0,buf);
		  result=wait_usal_key(1);//接受[取消]键或[确认]键
  		 if(result==POWER_OFF) return POWER_OFF;
  		 else if(result==CANCEL)  break; 
		// memset(buf,0xff,50);
	     //if(write_eeprom(PIN_TMP1,10,buf))return(WRITE_EEPROM_FAIL);//break;//清PIN码 
	     result=Format_File();
	     if(result==0) result=OK; 
       	 break; 
       	 
		case UPDATE_PROGRAM:
			result=check_clear_card(0,&k);
			if(result==POWER_OFF) return POWER_OFF;
			else if(result) break;//==CANCEL
			clear_lcd(0,4);
			strcpy(buf,"请插入升级工具\r按[确认]键确定\r");
			lcd_disp(0,0,buf);
			result=wait_usal_key(1);//接受[取消]键或[确认]键
			if(result==POWER_OFF) return POWER_OFF;
			else if(result==CANCEL)  break; 

			for(i=0;i<5;i++)buf[i]=0xaa;     //设置升级软件档谋曛?
			if(write_eeprom(UPDATA_PROGRAM_FLAG,5,buf)) 
				return(WRITE_EEPROM_FAIL);
			shut_bat(1);
			
			RestartToBoot();
			break;       	 
	  #endif
        default:
         break;
      }//end of "switch(function_no)"	
      //--------2.2.2 提示操作结果----------//
      catch_error_display(result,0);
      //--------2.2.3 回到上一级菜单----------//
      /*while(1)
      {//等待按键,直到按下"取消"键
        if(low_pwr) return POWER_OFF;//如果断电了,则exit 
    	key = get_key();
    	if(key) beep(100);
        if(key==VOID) break;
      }*/
      //按下"取消"键,回到上一级菜单
            //操作结果完毕后直接退回上一级菜单
      delayms(3000);
      Last_line=0xff;
	  dismode=0;
      layer=MAX_LAYER_MENU;
      display_menu_page(switch_mode,layer,menu_Lmax_ST[last_line-1],cur_line);
    }//end of "FUNCTION_LAYER"
  }//end of "while(1)"  
  
}//end of "setup"
/*==================================================================
函数功能:设置参数结构(固定加成、折扣、辅币兑换率)
入口参数:function--功能号
出口参数:
返回值:   ==POWER_OFF,则表示断电,返回
	   ==OK,成功
	   ==CANCEL,取消操作
全局变量:
编制人:     日期:2003-06-22
==================================================================*/	
uchar set_parameter_struct(uchar function)
{
  uchar xdata disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
  uchar key;//键值
  #define MAX_KEY_LEN	10	//数字键字符串最大长度
  uchar xdata numkey_buf[MAX_KEY_LEN];//输入的数字键字符串缓冲区
  uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
  uchar error;//错误类别
  ulong num;//输入数
  uchar bit_no;//辅币号
  struct parameter_struct xdata para;	//参数结构
  uchar i;
  
  //----------初始化----------------//
  clear_lcd(0,4);
  error=0;
  for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
  point=0;
  max_key_num=2;
  bit_no=MAX_BIT_TYPE_NUM;
  
  //---------读参数结构-----------//
  if(read_eeprom(PARAMETER,PARAMETER_LEN,&para))
  return(READ_EEPROM_FAIL);
  if(crcxdata((uint)sizeof(para)-2,&para)!=para.crc)
  return(CRC_ERROR);
  
  
  
  //----------提示当前功能--------------//
  get_menu_name_sp(MAX_LAYER_MENU,function,disp_buf);
  lcd_disp(0,0,disp_buf);
  //----------提示下一步操作---------------//
  if(function==FIXED_SERVICE)
    strcpy(disp_buf,"请输入固定加成\r取值范围[1,99]\r");
  else if(function==FIXED_DISCOUNT)
    strcpy(disp_buf,"请输入固定折扣\r取值范围[1,99]\r");
  else 
  {
    strcpy(disp_buf,"请输入辅币号\r取值范围[1,4]\r");
    max_key_num=1;
  }
  lcd_disp(1,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;//清除数字输入缓冲区
		  num=0;
          clear_lcd(2,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
      case POINT://小数点
        //-------取得输入数字键-------//
        error=get_valid_digit(key,point,max_key_num,numkey_buf);
	if(error)//输入非法 
	{
	  error=KEY_ERROR;
	  break;
	}
	//------显示输入数-------//
	clear_lcd(2,1);
	lcd_disp(2,0,numkey_buf);
      break; 
 	
   case BIT://功能认可
        if(function==SET_BIT_RATE)//对于辅币率的设置,须先输入辅币号
        {
          if(numkey_buf[0]==0)
          {
            error=KEY_ERROR;
	        break;
	      }
	     num=numstr_to_long(numkey_buf,point,2);//转换输入数为十进制
	     if(!num)
	     {
            error=KEY_ERROR;
	       break;
	     }
	  
	     if(num>(MAX_BIT_TYPE_NUM))//超过最多可管理辅币数  	
          {
	       error=OVER_RANGE_ERROR;
	       break;
	      }	
	     for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
          
	     bit_no = num-1;  //注意:用户输入的1-4对应的数组元素的序号为0-3
	     point = 1;
	     max_key_num = 7;
	     //----------提示下一步操作---------------//
	     //sprintf(disp_buf,"当前为辅币%lu\r请输入兑换率\r",num);
         sprintf(disp_buf,"当前为辅币%lu兑换率1:%lu.%02lu\r请输入兑换率\r",num,para.bit_rate[num-1]/100,
      			para.bit_rate[num-1]%100);
	     clear_lcd(0,1);
	     lcd_disp(0,0,disp_buf);
       }
      else error=KEY_ERROR;
       break;
     case ENTER://最后确定
        if(numkey_buf[0]==0)//未输入任何数字 
        {
			error=KEY_ERROR;
			break;
		}
		if((function==SET_BIT_RATE)&&(bit_no==MAX_BIT_TYPE_NUM))//设置辅币率时,未输入辅币号
	    {
			error=KEY_ERROR;
			break;
	    }
		num=numstr_to_long(numkey_buf,point,2);//转换输入数为十进制
		if(!num)//检查

⌨️ 快捷键说明

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