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

📄 main.c.bak

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 BAK
📖 第 1 页 / 共 3 页
字号:
		for(i=0;i<(uchar)sizeof(DECLARE_SECTOR);i++)//34扇区
		{
			//send_char(DECLARE_SECTOR[i]);
			if(flash_sector_erase(DECLARE_SECTOR[i]))
			return (ERASE_FLASH_FAIL);
			display_progress(60+i);
            if(low_pwr) return(POWER_OFF);
		}//send_char(32); 
		//SRAM中的PLU、菜单
		//display_progress(30);
		/*set_value0(&plu,(uint)sizeof(plu));
		plu.price=100;
		plu.tax_item=g_tax_catalog[0].tax_item;
		j=0;
		for(i=0;i<MAX_PLU_NUM;i++) //最大PLU数?
		{
			if(i/80>j)
			{
				display_progress(37+i/80);
				j=i/80;
			}
			sprintf(plu.name,"商品%u",i+1);
			plu.branch=DEFAULT_BRANCH;               //缺省为部门1,相当用户输入了部门1
			sprintf(buf,"%06u",i+1);
			memcpy(plu.bar_code,buf,(uint)sizeof(plu.bar_code));
			plu.crc=crcxdata((uint)sizeof(plu)-2,&plu);
			//plu.lrc=lrcdata((uint)sizeof(plu)-1,1,&plu);
			if(write_sramb(PLU_START_ADDR+
					(ulong)i*(uint)sizeof(plu),(uint)sizeof(plu),&plu))
				return(WRITE_SRAM_FAIL);
			if(low_pwr) return(POWER_OFF);
		}//send_char(33); 
		*/
		set_value0(&menu,(uint)sizeof(menu));
		for(i=0;i<MAX_TABLE_NUM;i++) //最大台号数?
		{
			//定金清0
			lnum=0;
			if(write_sramb(MENU_START_ADDR+(ulong)i*((uint)sizeof(menu)+4),4,
				&lnum))
			{
				return(WRITE_SRAM_FAIL);
			}
			//菜单清0
			if(write_sramb(MENU_START_ADDR+
							(ulong)i*((uint)sizeof(menu)+4)+4,
							(uint)sizeof(menu),&menu))
			{
				return(WRITE_SRAM_FAIL);
			}
        
		}//send_char(34); 
		//部门结构
		
		buf[0]=MAX_BRANCH_NUM;
        if(write_eeprom(BRANCH_NUM,1,buf))return(WRITE_EEPROM_FAIL);//部门个数
		set_value0(&branch,(uint)sizeof(branch));
		branch.tax_item=g_tax_catalog[0].tax_item;
        //branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
		for (i=0;i<MAX_BRANCH_NUM;i++)     //最大部门数 60
		{
			sprintf(branch.name,"部门%u",i+1);
			branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);//共28个字节
			//send_char(branch.lrc);
			if(write_eeprom(BRANCH_ADDR+i*(uint)sizeof(branch),
					(uint)sizeof(branch),&branch)) 
				return(WRITE_EEPROM_FAIL);
			if(low_pwr) return(POWER_OFF);
		}//send_char(35); 
		
		display_progress(100);
		g_tax_pin_pass=1;
		//rlt=Writ_ctr_rtc(0xe0,0x20);
        buf[0]=0x12;
        buf[1]=0;
		write_eeprom(PRT_MODE,2,buf);
        //2005.7.30
        buf[0]=0;
        write_eeprom(INVO_ROLL_NUM,1,buf);//清除发票卷的记录
        input_plu_barcode=0;//商品号输入
        //time_mode_buf=1;
		//校准时钟
		//strcpy(buf,"请输入当前的时间\r(如23:59:01输入235901)");
		//rlt=set_time(1);
        //if(rlt!=CANCEL && rlt!=OK){Write_FAU_data(TIMEUPDATE,1); return(rlt);}
      		// 初始化本机上最后一次报税的截止日期(当天的日期减1)
		//Write_FAU_data(TIMEUPDATE,0);
      	read_rtc(buf);
        //send_str(14,buf);
  		calc_date(buf,-1,buf+3);
  		if(write_eeprom(END_DATE_ADDR,3,buf+3)) //上次申报税结束日期3BYTES
		   return(WRITE_EEPROM_FAIL);
       if(write_eeprom(END_DATE_TMP_ADDR,3,buf+3)) //上次申报结束日期暂存3BTYES
		   return(WRITE_EEPROM_FAIL);
	for(i=0;i<5;i++)buf[i]=0;
	if(write_eeprom(FORMATFILE,5,buf))      //清格式化文件标志
		return(WRITE_EEPROM_FAIL);
				
	EX1 = 1;
	
	return(0);
}
//=======================================================================
uchar Get_Info_payer(void)
{
	uchar rlt;
	uchar xdata buf[120];
   
	rlt=0;
	//GetResponse(SAM_CARD,8,buf);//04.11 09改
	//if(SelFile_id(SAM_CARD,0x3F00)) return (SAM_OPERATE_FAIL);
	//send_char(2);
	rlt=SelFile_id(SAM_CARD,0x2F02);//pack="0x60,8,0xda,0,0xa4,0,0,2,0x2f,2,0
	//send_char(testbuf[1]);	
	if(rlt)
	{
		return(rlt);
	}
	//send_char(2);
	 
	rlt=SelFile_id(SAM_CARD,0xEF02);
	//send_char(0xaa);
	if(rlt)
	{
		//testbuf[2]=rlt;
		return(rlt);
	}
	//send_char(3);
	//读税控卡的基本信息文件
	rlt=RW_bin(SAM_CARD,0,0,103,buf);
	//send_char(rlt);
	if(rlt)
	{
		//testbuf[3]=rlt;
		return(rlt);
	}
	//send_char(4);
	//比较税控机编号
      
	if(memcmp(&buf[10],g_manufacturer_info.machinery_no,8)!=0)//机器编号
	{ 	
	  	     return(MACHINE_NO_ERROR);
	}
	else
	{
		//2005.8.15
		//memcpy(g_user_info.register_no,&buf[2],8);                //税控卡号
		memcpy(g_user_info.tax_payer_code,&buf[18],8);            //纳税人编号
		memcpy(g_user_info.tax_payer_id,&buf[26],20);             //纳税人识别号
		memcpy(g_user_info.application_date,&buf[46],4);          //应用启用日期
		memcpy(g_user_info.application_valid_date,&buf[50],4);    //应用有效日期
		memcpy(g_user_info.tax_payer_name,&buf[57],40);           //纳税人单位名称
		memcpy(g_user_info.levy_dept_code,&buf[97],4);            //主管分局代号
		g_user_info.declare_way=buf[101];                         //申报方式   (01:用户卡传递,02:其他)
		g_user_info.pin_using_mode=buf[102];                      //机器使用口令标志(00,用原始口令,01 使用随机口令,每次不同)
	}

	//2005.07.25
	if(memcmp(g_user_info.application_date,g_user_info.application_valid_date,4)>0)return PIN_DATE_ERROR;
	read_rtc(buf);
	if(memcmp(&g_user_info.application_date[1],buf,3)>0)return PIN_DATE_ERROR;
	rlt=SelFile_id(SAM_CARD,0xEF01);
	if(rlt) return(rlt);
	rlt=RW_bin(SAM_CARD,0,0,23,&buf[10]);
	if(rlt) return(rlt);
	if(memcmp(buf,&buf[11],3)>0)return PIN_DATE_ERROR;
	return 0;
}
/*---------------------------------------------------------------
功能:完成机卡认证(或初试化)

输出:成功返回0,否则返回其它错误
-------------------------------------------------------------*/
uchar init_machine_card()
{
	uchar rlt;
	uchar xdata cmd[30],cmd2[30],buf[200];
	//uchar j;
	//uint  num;
	uint  crc;
	//struct manufacturer_info_struct g_manufacturer_info;
	//struct record_addr_struct xdata record_addr;
	//struct invoice_roll_addr_struct xdata invoice_roll_addr;
	//struct day_addr_struct xdata day_addr;
	//struct delare_addr_struct xdata declare_addr;
	//struct branch_struct xdata branch;
	//struct plu_struct xdata plu;
	//struct receiver_report_struct xdata receiver_report;
	//struct day_report_struct xdata day_report;
	//struct month_report_struct xdata month_report;
	#ifdef C8_VER
		struct trade_report_struct xdata trade_report;
	#endif
    //struct parameter_struct xdata parameter;
	//struct money_add_struct xdata money_add;
	//struct menu_struct xdata menu[MAX_MENU_NUM];
	//struct invoice_roll_struct xdata invoice_roll;
	//struct day_struct xdata day;
	//struct distribute_invoice_struct xdata distribute_invoice;
	//ulong lnum;

	rlt=0;
	g_tax_pin_pass=0;
    
	/*rlt=init_var();         //得到出厂信息,包括税控机编号
	
	if(rlt)
	{
	 
	 return(rlt); //0x32 CRC_ERROR
	}
	*/
	//EEPROM中得到税控机使用口令

   
	if(read_eeprom(PIN_TMP1,10,buf))return(READ_EEPROM_FAIL);
	 //send_str(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))
	//if(Check_init_machine(8,buf))
	{
	    //send_char(0xcc);
	   
		clear_lcd(0,MAX_LCD_NUM);
		strcpy(buf,"第一次机卡认证和初始化,\r可能要花几分钟...");
		lcd_disp(2,0,buf);
       
		//sam卡复位应答
		if(atr_sam(buf))
		{
			return(SAM_RESET_FAIL); //0xd SAM_RESET_FAIL
		}
       
        set_value0(&g_user_info,(uint)sizeof(g_user_info));
		rlt=Get_Info_payer();
        if(rlt)   return(rlt);

	    rlt=Writ_ctr_rtc(0xe0,0x20);
       for(rlt=0;rlt<8;rlt++)g_key[rlt]=0;//清掉所有的键值,防止误操作
	   rlt=set_time(1);
        if(rlt!=CANCEL && rlt!=OK){Write_FAU_data(TIMEUPDATE,1); return(rlt);}
      		// 初始化本机上最后一次报税的截止日期(当天的日期减1)
		Write_FAU_data(TIMEUPDATE,0);
	    /*rlt=SelFile_id(SAM_CARD,0x2F02);//pack="0x60,8,0xda,0,0xa4,0,0,2,0x2f,2,0
		
		if(rlt)
		    {
			 
			 return(rlt);
			}
		rlt=SelFile_id(SAM_CARD,0xEF02);
		
		if(rlt)
			{
			
			return(rlt);
			}

		//读税控卡的基本信息文件
		rlt=RW_bin(SAM_CARD,0,0,103,buf);
		
		if(rlt)
			{
			
			return(rlt);
			}
		
		//比较税控机编号
		if(memcmp(&buf[10],g_manufacturer_info.machinery_no,8)!=0)//机器编号
		{ 
			return(MACHINE_NO_ERROR);
		}
		else
		{
		     set_value0(&g_user_info,(uint)sizeof(g_user_info));
		     memcpy(g_user_info.tax_payer_code,&buf[18],8);            //纳税人编号
		     memcpy(g_user_info.tax_payer_id,&buf[26],20);             //纳税人识别号
		     memcpy(g_user_info.application_date,&buf[46],4);          //应用启用日期
		     memcpy(g_user_info.application_valid_date,&buf[50],4);    //应用有效日期
		     memcpy(g_user_info.tax_payer_name,&buf[57],40);           //纳税人单位名称
		     memcpy(g_user_info.levy_dept_code,&buf[97],4);            //主管分局代号
		     g_user_info.declare_way=buf[101];                         //申报方式   (01:用户卡传递,02:其他)
		     g_user_info.pin_using_mode=buf[102];                      //机器使用口令标志(00,用原始口令,01 使用随机口令,每次不同)
		}
		*/
        if(low_pwr) return(POWER_OFF);
		//从税控卡取4字节随机数、8字节税控卡编号和4字节MAC供注册使用
		strcpy(cmd,"DBC0F00000"); 
		rlt=pack_cmd(cmd,cmd2,0,0x10);
		
		if(rlt)
		{
			return(rlt);
		}
		//send_char(5);
		if(sam_iso(cmd))
		{
			 return(SAM_COMM_FAIL);
		}
	    //send_char(6);
		if(get_data(cmd)) //返回0X69,0X01,SAM已经注册
		{
			 return(TAXCARD_MAC_ERROR);
		}
		//send_char(7); 
		memcpy(g_user_info.register_no,&cmd[4],8);
        
		if(atr_cupcard(buf))//复位
		{
			return(CPU_RESET_FAIL);
		}
		
		rlt=SelFile_id(USER_CARD,0x2F02);
		
		if(rlt)
		{
			return(rlt);
		}
		//向用户卡发注册命令
		strcpy(cmd2,"DAC0E4000010");
		rlt=pack_cmd(cmd2,cmd,16,4);//16=4字节随机数+8字节税控卡编号+4字节MAC
	
		if(rlt)
		{
			 return(rlt);
		}
		
		if(id_iso(cmd2))
		    {
			return(USR_COMM_FAIL);
			}
		
		if(get_data(cmd2))   // 6A 80
		    {
			return(USERCARD_MAC_ERROR);
			}
			
		//此时已经得到MAC2号,所以不用再取响应数据,否则卡返回 6F 00,不同的卡也许不一样
		//取响应数据
		
		
		/*if(GetResponse(USER_CARD,4,cmd2))//04.11 09改
		   { 
		   
			return(USERCARD_MAC_ERROR);
			}
		*/	
		//向税控卡发注册命令
		strcpy(cmd,"DAC0F1000004");
		rlt=pack_cmd(cmd,cmd2,4,8);
		if(rlt)
			{
			return(rlt);
			}
		if(sam_iso(cmd))
		    {
			return(SAM_COMM_FAIL);
			}
		
		if(get_data(cmd))
		    {
			return(TAXCARD_MAC_ERROR);
			}
        memcpy(buf,cmd,8);
		/*if(GetResponse(SAM_CARD,8,buf))//04.11 09改
		  {
			return(TAXCARD_MAC_ERROR);
			}
		*/	
		//得到8字节的税控机使用口令,存入EEPROM
		crc=crcxdata(8,buf);//加校验
		memcpy(&buf[8],(uchar*)&crc,2);
		
		if(write_eeprom(PIN_TMP1,10,buf))
 	       {
			return(WRITE_EEPROM_FAIL);
			}
		 //delayms(200);
		if(write_eeprom(PIN_TMP2,10,buf)) 
			{
			return(WRITE_EEPROM_FAIL);
			}
	   		
		memcpy(g_user_info.password,buf,8); //保存该口令为注册口令

⌨️ 快捷键说明

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