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

📄 main.c.bak

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/*-------------------------------------------------------------
功能:主函数:上电初始化、自检
说明:符合国家标准GB18240.1-2003和GB18240.2-2003的税控机软件
日期:2003年6月12日

---------------------------------------------------------------*/
#include  "include.h"

extern void test();

//===============================================================================
void Display_allgrass(void)
{
	uchar xdata c_buf[32],i,x,j;
	memset (c_buf,0xff,32);
	x=0xb8;
	while(x<0xc0)
	{
		for(i=0;i<3;i++)
		{
			select_p(i);
			wrt_lcd_cmd(0xc0);
			wrt_lcd_cmd(x);
			wrt_lcd_cmd(0x40);
		}
		for(i=0;i<32;i++)
		{
			for(j=0;j<3;j++)
			{
				select_p(j);
				wrt_lcd_data(0x55); 
			}
			for(j=0;j<3;j++)
			{
				select_p(j);
				wrt_lcd_data(0xaa); 
			}
		}
		x++;
	}
}
//===================================================================
/*uchar Check_init_machine(uchar len,uchar *buf) //判断机器是否要初始化
{
 uchar i;
 
 for(i=0;i<len;i++){if((buf[i]!=0)||(buf[i]!=0xff))break;}
 if(i==len)return 1;
 else return 0;
}
 */
 //=====================================================================
uchar Format_File(void)
{
    //uchar rlt;
	uchar xdata buf[200];
//	uchar j;
	uint  i;


	
	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;

	EX1 = 0;
	//EEPROM中的其他值做初始化
	clear_lcd(0,MAX_LCD_NUM);
	strcpy(buf,"注册完成!!");
	lcd_disp(0,0,buf);
	strcpy(buf,"正在格式化文件,请稍候...\r已完成:");//开始初始化
	lcd_disp(1,0,buf);
	display_progress(0);
	//发票卷暂存
	set_value0(&invoice_roll,(uint)sizeof(invoice_roll));
	invoice_roll.invoice_start_add=RECORD_START_ADDR;
	invoice_roll.lrc=lrcdata((uint)sizeof(invoice_roll)-1,1,&invoice_roll);
	if(write_eeprom(INVOICE_ROLL,(uint)sizeof(invoice_roll),&invoice_roll)) 
	{
		return(WRITE_EEPROM_FAIL);
	}
	//send_char(0); 
	//日记录暂存
	set_value0(&day,(uint)sizeof(day));
	read_rtc(buf);
	day.date[0]=buf[0];
	day.date[1]=buf[1];
	day.date[2]=buf[2];
	for(i=0;i<CATALOG_NUM;i++)
	day.tax_item_code[i]=g_tax_catalog[i].tax_item;
	day.lrc=lrcdata((uint)sizeof(day)-1,1,&day);
	if(write_eeprom(DAY,(uint)sizeof(day),&day)) //共64个字节
	{
		return(WRITE_EEPROM_FAIL);
	}
	
	//send_char(1); 
	//电子票根当前笔地址
	record_addr.record_addr=RECORD_START_ADDR;
	record_addr.record_sector=RECORD_SECTOR[0];
	record_addr.start_sector=record_addr.record_sector;
	record_addr.crc=crcxdata((uint)sizeof(record_addr)-2,&record_addr);
	if(write_eeprom(RECORD_ADDR1,(uint)sizeof(record_addr),&record_addr)) //共7字节
	{
		return(WRITE_EEPROM_FAIL);
	}
	//send_char(2); 
	if(write_eeprom(RECORD_ADDR2,(uint)sizeof(record_addr),&record_addr)) //共7字节
	{
		return(WRITE_EEPROM_FAIL);
	}//send_char(3); 
	//单卷发票的当前卷地址
	invoice_roll_addr.invoice_roll_addr=INVOICE_ROLL_START_ADDR;
	invoice_roll_addr.invoice_roll_sector=INVOICE_ROLL_SECTOR[0];
	invoice_roll_addr.crc=crcxdata((uint)sizeof(invoice_roll_addr)-2,&invoice_roll_addr);//共8字节
	if(write_eeprom(INVOICE_ROLL_ADDR1,(uint)sizeof(invoice_roll_addr),&invoice_roll_addr)) 
	{
		return(WRITE_EEPROM_FAIL);
	}//send_char(4); 
	if(write_eeprom(INVOICE_ROLL_ADDR2,(uint)sizeof(invoice_roll_addr),&invoice_roll_addr)) 
	{
		return(WRITE_EEPROM_FAIL);
	}//send_char(5); 
	//日记录的当前日地址结构
	day_addr.day_addr=DAY_START_ADDR;
	day_addr.day_sector=DAY_SECTOR[0];
        //day_addr.day_num=0;
        if(low_pwr) return(POWER_OFF);
		day_addr.crc=crcxdata((uint)sizeof(day_addr)-2,&day_addr);//共8字节
		if(write_eeprom(DAY_ADDR1,(uint)sizeof(day_addr),&day_addr))
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(6); 
		if(write_eeprom(DAY_ADDR2,(uint)sizeof(day_addr),&day_addr)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(7); 
		//申报数据的当前期地址结构
		declare_addr.delare_addr=DECLARE_START_ADDR;
		declare_addr.delare_num=0;
		declare_addr.crc=crcxdata((uint)sizeof(declare_addr)-2,&declare_addr);//共8字节
		if(write_eeprom(DECLARE_ADDR1,(uint)sizeof(declare_addr),&declare_addr)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(8); 
		if(write_eeprom(DECLARE_ADDR2,(uint)sizeof(declare_addr),&declare_addr)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(9); 
		//display_progress(10);
		//收款员报表结构
		set_value0(&receiver_report,(uint)sizeof(receiver_report));
		receiver_report.lrc=lrcdata((uint)sizeof(receiver_report)-1,1,&receiver_report);
							
		for (i=0;i<MAX_RECEIVER_NUM;i++)
		{
			if(write_eeprom(RECEIVER_ADDR+i*(uint)sizeof(receiver_report),//112BYTE
					(uint)sizeof(receiver_report),&receiver_report)) 
			{
			    return(WRITE_EEPROM_FAIL);
			}
			if(low_pwr) return(POWER_OFF);
		}//send_char(10); 
		//日报表结构
		set_value0(&day_report,(uint)sizeof(day_report));
		day_report.lrc=lrcdata((uint)sizeof(day_report)-1,1,&day_report);
							
		if(write_eeprom(DAY_ADDR,(uint)sizeof(day_report),&day_report))//共107个字节 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(11); 
		//月报表结构
		set_value0(&month_report,(uint)sizeof(month_report));       //共107个字节
		month_report.lrc=lrcdata((uint)sizeof(month_report)-1,1,&month_report);
							
		if(write_eeprom(MONTH_ADDR,(uint)sizeof(month_report),&month_report)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(12); 
		#ifdef C8_VER
		//营业员报表结构
		set_value0(&trade_report,(uint)sizeof(trade_report));
		trade_report.lrc=lrcdata((uint)sizeof(trade_report)-1,1,&trade_report);
		for (i=0;i<MAX_TRADE_NUM;i++)
		{
			if(write_eeprom(TRADE_ADDR+i*(uint)sizeof(trade_report),
					(uint)sizeof(trade_report),&trade_report)) 
			{
				return(WRITE_EEPROM_FAIL);
			}
			if(low_pwr) return(POWER_OFF);
		}
		#endif
		//报税标志
		i=0;
		if(write_eeprom(DECLARE_TAX_ADDR,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(13); 
		//是否已录入了一卷新发票的标志
		if(write_eeprom(NEW_INVO_ROLL,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(14); 
		//从用户卡分发的发票卷暂存
		set_value0(&distribute_invoice,(uint)sizeof(distribute_invoice));
		for (i=0;i<MAX_DISTRIBUTE_NUM;i++)//一次从用户卡分发的最大发票卷数
		{
			if(write_eeprom(DISTRIBUTE_INVOICE_ADDR+i*(uint)sizeof(distribute_invoice),//23BYTE
					(uint)sizeof(distribute_invoice),&distribute_invoice)) 
			{
				return(WRITE_EEPROM_FAIL);
			}
			if(low_pwr) return(POWER_OFF);
		}//send_char(15); 
		//参数结构
		parameter.fix_discount=0;
		parameter.fix_service=0;
		for(i=0;i<4;i++)
			parameter.bit_rate[i]=100;
		parameter.crc=crcxdata((uint)sizeof(parameter)-2,&parameter);
		if(write_eeprom(PARAMETER,(uint)sizeof(parameter),&parameter)) //共12字节
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(16); 
        
		lnum=MAX_PLU_NUM;
		buf[0]=lnum>>8;
		buf[1]=lnum;
		if(write_eeprom(PLU_NUM,2,buf)) //共2字节 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(17); 
			
		//	return(WRITE_EEPROM_FAIL);
			
		
		set_value0(buf,60);
        if(write_eeprom(AUTHORITY_FLG,3,buf))//营业员的权限默认为普通 1-10
		{
			return(WRITE_EEPROM_FAIL);
		}
		 //单位地址
		if(write_eeprom(CO_ADDRESS,60,buf))//共60字节 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(18); 
		//单位电话
		set_value0(buf,12);
		if(write_eeprom(CO_PHONE_NUMBER_ADDR,12,buf)) //共12字节
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(19); 
		
		//报税电话
		set_value0(buf,36);
		if(write_eeprom(DECLARE_PHONE,36,buf)) //共36字节
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(20); 
		//金额累加
		money_add.add_money=0;
		money_add.retreat_money=0;
		money_add.crc=crcxdata((uint)sizeof(money_add)-2,&money_add);//共10字节
		if(write_eeprom(MONEY_ADD,(uint)sizeof(money_add),&money_add)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(21); 
		//收款员号
		i=0;
		if(write_eeprom(RECEIVER_NO,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(22); 
       if(low_pwr) return(POWER_OFF);
		//display_progress(20);
        strcpy(buf,"888888");    //超级密码
        if(write_eeprom(SUPERPASSWORD,6,buf)) 
			return(WRITE_EEPROM_FAIL);
		//收款员密码
		for(i=0;i<MAX_RECEIVER_NUM;i++)
		{
			strcpy(buf,"999999");
			if(write_eeprom(LOGON_PASSWORD+i*6,6,buf)) 
			{
				return(WRITE_EEPROM_FAIL);
			}
		}//send_char(23);
		
       //收款员中文名称清零
        memset(buf,0,100);
		if(write_eeprom(RECEIVER_CHINESE_NAME,100,buf))
			return(WRITE_EEPROM_FAIL);
        
		//黑标定位
		i=0;
		if(write_eeprom(INVOICE_LOCATE_ADDR,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(24); 
		//库存允许
		i=0;
		if(write_eeprom(STOCK_ADDR,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(25); 
		//PDA选择
		i=0;
		if(write_eeprom(PDA_SELECT,1,&i)) 
		{
			return(WRITE_EEPROM_FAIL);
		}//send_char(26); 
        i=0;
        if(write_eeprom(SELE_PRINTER_FLAG,1,&i)) //报表打印机的选择内置
			{
			return(WRITE_EEPROM_FAIL);
			}//send_char(26); 
		//部门/PLU快捷键切换
		i=0;
		if(write_eeprom(BRANCH_PLU_SWITCH_ADDR,1,&i)) 
			return(WRITE_EEPROM_FAIL);//send_char(27); 
		//报表日期(YYMMDDHHMM)
		read_rtc(buf);
		for(i=0;i<3;i++)
		{
			if(write_eeprom(REPORT_DATE+i*5,5,buf)) 
				return(WRITE_EEPROM_FAIL);
		}
        if(low_pwr) return(POWER_OFF);
		//send_char(28); 
		display_progress(10);
		//擦除Flash
         /*memset(buf,0,50);
         if(write_eeprom(FAU_Quantity,2,buf))return(WRITE_EEPROM_FAIL);//审计记录数清零
		 if(write_eeprom(CLEAR_FAU_Quantity,8,buf))return(WRITE_EEPROM_FAIL); //清除审计记录清除的记录
	     for(i=4;i<8;i++){  //4-7扇区//审计记录清零
		                  if(flash_sector_erase(i)) return(ERASE_FLASH_FAIL);
                          if(low_pwr) return(POWER_OFF);
		 		          }
       */
		for(i=28;i<32;i++)
		{  //审计记录清零
			if(flash_sector_erase(i)) return(ERASE_FLASH_FAIL);
		}

		for(i=0;i<(uchar)sizeof(RECORD_SECTOR);i++)//8-25扇区
		{
			if(flash_sector_erase(RECORD_SECTOR[i]))
				return(ERASE_FLASH_FAIL);
			display_progress(10+i);
            if(low_pwr) return(POWER_OFF);
		}//send_char(29);
		//display_progress(20);
		for(i=0;i<(uchar)sizeof(DAY_SECTOR);i++)//26-31扇区
		{
			//send_char(DAY_SECTOR[i]);
			if(flash_sector_erase(DAY_SECTOR[i]))
				return(ERASE_FLASH_FAIL);
			display_progress(40+i);
            if(low_pwr) return(POWER_OFF);
		}//send_char(30);
 		    
		for(i=0;i<(uchar)sizeof(INVOICE_ROLL_SECTOR);i++)//32-33扇区
		{
			//send_char(INVOICE_ROLL_SECTOR[i]);
			if(flash_sector_erase(INVOICE_ROLL_SECTOR[i]))
				return(ERASE_FLASH_FAIL);
			display_progress(50+i);
			if(low_pwr) return(POWER_OFF);
		}//send_char(31); 

⌨️ 快捷键说明

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