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

📄 declare.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
		//if((memcmp(&invoice_roll.issue_start_date[1],date,3)>=0)&&(memcmp(&invoice_roll.issue_end_date[1],&date[3],3)<=0))	
		
		//2005.12.5
		if(memcmp(&date[0],&invoice_roll.issue_end_date[1],3)>0)continue;   
		if(
		//(memcmp(&invoice_roll.issue_start_date[1],date,3)>=0)&&
		(memcmp(&invoice_roll.issue_end_date[1],&date[0],3)>=0)&&
		(memcmp(&date[3],&invoice_roll.issue_start_date[1],3)>=0))
		//if((memcmp(date,&invoice_roll.issue_start_date[1],3)>=0)&&(memcmp(&invoice_roll.issue_end_date[1],&date[0],3)>=0)
		//&&(memcmp(&date[3],&invoice_roll.issue_start_date[1],3)>=0))
		{
			if(!find_head)
			{
				//send_str(4,"9999"); 
				no=i;
				//no++;
				find_head=1;
			}
			vol_num++;
		}
		else if(memcmp(&invoice_roll.issue_start_date[1],&date[3],3)>0)
		{
			break;
		}
	}
	invc_vol[3]=no>>8;
	invc_vol[4]=no;
	invc_vol[5]=vol_num;
	
	return 0;
}
/*==================================================================
函数功能:向MODEM发送数据并监视是否成功
Ins_Data 存放数据的内存指针
出口参数:无
返回值:  0 成功   !0 设置失败
编制人:       
日    期:2003-12-31 11:33
==================================================================*/
/*uchar send_data(uchar *Ins_Data)
{
	uchar i,len,error;
	uchar xdata buf[100];
	clear_lcd(0,4);
	memset(buf,0,30);
	error=1;	
	strcpy(buf,Ins_Data);
	len=strlen(buf);
	buf[len]=0x0d;	
	clear_rece_buffer();		//新加入
	len = strlen(buf);
	send_str(len,buf);
	memset(buf,0,25);
	for(i=0;i<20;i++)
	if (!rece(1,buf)) break;
	len=1;
	while(1)
	{
	if(rece(1,buf+len))	break;
	len++;
	}
	if((buf[len-4]==0x4f)||(buf[len-3]==0x4b)) return 0;  //如果返回OK则设置成功
	else  return 1;		
}

*/

/*==================================================================
函数功能:MODEM设置 打开端口,设置波特率,初始化MODEM
入口参数:无
出口参数:无
返回值:  0 成功   !0 设置失败
编制人:       
日    期:2003-12-31 11:33
==================================================================*/
/*uchar modem_setup()
{
	uchar ret,buf[20],dbuf[50];
	clear_lcd(0,4);  
	Load_Dis(0,0,"设置MODEM中,请稍侯...\0");	
	//#ifdef C8_VER
	//open_moden(1);	   //上电
	//#endif
	//enable_dtr();
	select_com(0);
	modify_rate(3);
	delayms(250);
	strcpy(buf,"ATF");
	ret=send_data(buf);
	if(!ret) return 0;
	else     return 1;
}


*/
/*==================================================================
函数功能:通过MODEM发送汇总数据
入口参数:
出口参数:
返回值:  0 成功   !0 设置失败
编制人:       
日    期:2003-12-31 11:33
==================================================================*/
/*uchar send__duty_report(uchar *start_date,uchar *end_date)
{
  uchar error;
  ulong normal_money[CATALOG_NUM+1],red_money[CATALOG_NUM+1];
  ulong total_normal_money,total_red_money,normal_num;
  uint red_num,resc_num;
  uchar i,len;
  uchar xdata buf[100];

  total_normal_money=0;
  total_red_money=0;
  //-----统计汇总数据-----------//
   error=calc_stat(start_date,end_date,&normal_num,&red_num,&resc_num,normal_money,red_money);
   if(error) return error;
   for(i=0;i<CATALOG_NUM;i++)
   {
     total_normal_money+=normal_money[i];
     total_red_money+=red_money[i];
   }
  memset(buf,0,100);
  len=(PRINTAL_NUM-20)/2;
  add_blank(len,buf);
  strcat(buf,"发票汇总数据报表");
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  memset(buf,0x20,MODEM_DISP_LEN);
  send_str(MODEM_DISP_LEN,buf);
 
  //-----打印单位名称-------//
  memset(buf,0,100); 
	sprintf(buf,"单位名称:");
	memcpy(&buf[9],g_user_info.tax_payer_name,
				(uint)sizeof(g_user_info.tax_payer_name));
	buf[10+(uint)sizeof(g_user_info.tax_payer_name)]=0;
	len=strlen(buf);
	memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  //-----打印税号-------// 	
  set_value0(buf,(uint)sizeof(buf));
  strcpy(buf,"税号:");
  memcpy(&buf[5],g_user_info.tax_payer_id,(uint)sizeof(g_user_info.tax_payer_id));	
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  //-----打印机器号-------//
  sprintf(buf,"机器号:%02bx%02bx%02bx%02bx%02bx%02bx%02bx%02bx",
  		g_manufacturer_info.machinery_no[0],g_manufacturer_info.machinery_no[1],
        	g_manufacturer_info.machinery_no[2],g_manufacturer_info.machinery_no[3],
        	g_manufacturer_info.machinery_no[4],g_manufacturer_info.machinery_no[5],
        	g_manufacturer_info.machinery_no[6],g_manufacturer_info.machinery_no[7]);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
   
  sprintf(buf,"开票时间:%04x/%02bx/%02bx至%04x/%02bx/%02bx",start_date[0],//0x2000+start_date[0],
     start_date[1],start_date[2],0x2000+end_date[0],end_date[1],end_date[2]);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
  sprintf(buf,"正常发票份数:%lu",normal_num);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
  strcpy(buf,"正常发票开具金额:");
  pri_format(total_normal_money,7,&buf[18]);
  
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
  sprintf(buf,"废票份数:%u",resc_num);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
  sprintf(buf,"退票份数:%u",red_num);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
  
  strcpy(buf,"退票金额:");
  pri_format(total_red_money,7,&buf[10]);
  len=strlen(buf);
  memset(buf+len,0x20,MODEM_DISP_LEN-len);
  send_str(MODEM_DISP_LEN,buf);
   memset(buf,0x20,MODEM_DISP_LEN);
  send_str(MODEM_DISP_LEN,buf);
  
  return 0;
}

*/


/*==================================================================
函数功能:计算出卡申报的起始时间,用户输入截止时间
入口参数:存放时间的内存指针
出口参数:
返回值:   ==POWER_OFF,则表示断电,返回
全局变量:
编制人:       日期:2003-07-03
==================================================================*/
uchar get_declare_date(uchar *start_date,uchar *end_date)
{
   uchar i,temp_buf[50],temp_date[20],temp_sta[3],temp_key,temp_len;
   clear_lcd(1,2);
   //------申报汇总的起始日期是上一次申报(已做完税处理)的结束日期加1-----//          
   if(read_eeprom(END_DATE_ADDR,3,temp_sta)) 
   return(READ_EEPROM_FAIL);
   calc_date(temp_sta,1,start_date);
   /*start_date[0]=5;
   start_date[1]=0x11;
   start_date[2]=0x15;
   */
   sprintf(temp_buf,"起始日期:20%02bx年%02bx月%02bx日----\0",start_date[0],start_date[1],start_date[2]);
   lcd_disp(1,0,temp_buf);
   strcpy(temp_buf,"请输入截止日期\0");
   lcd_disp(3,0,temp_buf);
   memset(temp_buf,0,50);
   memset(temp_date,0,20);
   strcpy(temp_buf,"截止日期:");
   lcd_disp(2,0,temp_buf);	
   temp_key=0;
   temp_len=0;
   while(1)
   {
      
      openbacklight();
      if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
      temp_key=get_key();
      if (!temp_key)  continue;  //如果无键按下则重新扫描
      //beep(50);
      if(temp_key==ENTER) break;      //如果按下确认键就退出
      if(temp_key==VOID)  return CANCEL;
      if (temp_key==CLEAR) 
      {
       memset(temp_date,0,20);
       temp_len=0;
       clear_lcd(2,1);
      }
           
    if((temp_key>='0')&&(temp_key<='9'))
       {
          temp_date[temp_len]=temp_key;
          temp_len++;
        } 
          temp_buf[9]=0;
          strcat(temp_buf,temp_date);
          lcd_disp(2,0,temp_buf);	
    }	
	
    for(i=0;i<3;i++)        			//将年月日的数据转换成为BCD
    end_date[i]=(temp_date[2+2*i]-0x30)*16+(temp_date[2+2*i+1]-0x30);			
    return OK;
	
	
}




/*==================================================================
函数功能:税控数据的卡申报、打印、核查
入口参数:mach_initialed--机器是否已初始化
出口参数:
返回值:   ==POWER_OFF,则表示断电,返回
全局变量:
编制人:     日期:2003-07-03
==================================================================*/
uchar declare(void)//uchar declare(uchar mach_initialed)
{
  ////////////////////////1、变量说明区///////////////////////////////
  //======================1.1 菜单级变量==============================//	
  uchar switch_mode,layer;//方式锁位置,菜单级别
  uchar last_line,cur_line;//上一级菜单项所在行,当前菜单项所在行(都从1开始)
  uchar menu_num;//某一级中一个子菜单项数
  uchar xdata key,temp_buf[50];//键值temp_key,
  uint    i;//temp_len
 // uint    start_no;
  //uchar   invc_vol_num,j;
  //struct invoice_roll_struct *invoice_roll;
  uchar over_mode;//某项菜单选择操作结束方式
  #define  NO_CHOOSED	0x0	//未选定任何菜单
  #define  IS_CHOOSED	0x1	//选定某项菜单
  #define  EXIT_CHOOSE	0xfe	//返回上一级菜单
  uchar menu_L1_DR[]={DECLARE,0};
  uchar menu_L2_DR[5]={CPU_DECLARE, RPT_DECARE, AUDIT, OTHER_MODE_DECLARE, 0};
  #define ITEM_NUM_L2	sizeof(menu_L2_DR)//第2级菜单项数
  //2005.7.22
  uchar menu_Lmax_DR[ITEM_NUM_L2-1][7]=
  {
    //用户卡申报
    //#ifdef DECLARE_INVOICE  //用户卡报明细
    //{DECLARE_DUTY_CARD, DECLARE_LIST_CARD,DECLARE_INVOICE_ROLL_CARD,FLASH_CARD_DECLARE_LIST, 0},
    //else
    {DECLARE_DUTY_CARD,DECLARE_DUTY_BYMONTH,DECLARE_DUTY_AGAIN,DECLARE_INVOICE_ROLL_CARD,FLASH_CARD_DECLARE_LIST, 0},//DECLARE_DAY_RECORD,
    //#endif
    //报表
    { PRINT_DUTY_RPT, PRINT_DECLARE_RPT, PRINT_LIST_RPT, 0},
       
    //稽查
   {RECORD_AUDIT, DUTY_DATA_AUDIT_BYQI, SET_TIME0, 0},// {LIST_RECORD_AUDIT, DAY_RECORD_AUDIT, DUTY_DATA_AUDIT_BYQI,DUTY_DATA_AUDIT_BYDATE, SET_TIME0, 0},
    //其他方式申报
    {DECLARE_DUTY_USB, DECLARE_DUTY_MODEM,0}   
  };  	
  //===================1.2 功能级变量==================================//
  uchar function_no;//功能号
  uchar result;
  uchar xdata buf[250];
  uchar start_date[3],end_date[3];
  uchar xdata chk_type;//税控管理卡类别
  //2005.8.5
  uint start_period,end_period;
  struct delare_addr_struct declare_addr;
  uchar is_first_enter;//是否第一次进入当前功能菜单
  #define FILE_NAME_LEN 12
  uchar duty_file[FILE_NAME_LEN+1]="duty.dat";
  
  //////////////2、代码执行区///////////////////////////////

	//============2.1 操作菜单,选择某个设置功能=================//
	//------------2.1.1 初始化----------//
	switch_mode=DECLARE;//查询档
	layer=SND_LAYER_MENU;//初始为第一级菜单
	cur_line=1;//初始为第一行
	last_line=1; 
	//  display_menu_page(switch_mode,layer,menu_L1_DR,cur_line);
	menu_num=strlen(menu_L1_DR);
	is_first_enter=1;
	result=0;
	//------------2.1.2 等待按键,选择菜单功能----------//
	while(1)
	{  
		openbacklight();
		if(low_pwr) return POWER_OFF;//如果断电了,则exit 
		key = get_key();
	    if(!key) //未按下任何键
	    {
			if(layer==FST_LAYER_MENU) return 0;//此时若在第1级菜单,则返回主程序,可切换方式锁位置
			if(!is_first_enter) continue;//等待按键
			else is_first_enter=0;
	    }
	    //else beep(50);
	    //HYS620
    if(key==PAPER1) //若按下[走纸]键,则走纸1行
	{
		#ifdef C6_VER
		result=Fast_feed_paper_hang(120);//fpaper(8);
		if(result) return LINE_FEED_FAIL;
		#else
			feed_on_line(1);
		#endif
		continue;
    }
    
    #ifdef HYS620
	else if(key==BACK_PAPER) //响应C8上的退纸键
	{
		back_on_dot(120);
		continue;
	}
	#endif
    //END HYS620
    else 
      over_mode=choose_menu_line(key,menu_num,&cur_line);//否则选择菜单项,当前行将移到新位置
    switch(over_mode)
    {
      case IS_CHOOSED://若选定某项菜单,
        if(layer<MAX_LAYER_MENU)//在最后菜单级之前,则到其对应下一级的首行开始反显页面 
        {
          last_line=cur_line;//保存此级当前项所在行位置
          cur_line=1;//下一级的首行
        }
        else//若此时为最后菜单级时,则取得相应功能号
          function_no=menu_Lmax_DR[last_line-1][cur_line-1];
        layer++;//指到其对应下一级
      break;
      case EXIT_CHOOSE://若选择返回  
        if(layer>FST_LAYER_MENU)//在第1级菜单之前,则回到其对应的上一级菜单项反显 
        {
          layer--;
          cur_line=last_line;
          if(layer==SND_LAYER_MENU) last_line=1;
        }
      break;
      default://未选定,则继续等待按键
      break;
    }    
    //-------------2.1.3 显示当前菜单级页面-----------------------//
    switch(layer)
    {
		case FST_LAYER_MENU:
        //clear_lcd(0,4);
 		//2005.11.2
		//display_menu_page(switch_mode,layer,menu_L1_DR,cur_line);
        menu_num=strlen(menu_L1_DR);
		break;
		
		case SND_LAYER_MENU:
        display_menu_page(switch_mode,layer,menu_L2_DR,cur_line);

⌨️ 快捷键说明

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