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

📄 report1.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 2 页
字号:
	}
	if(xzReport == 'Z')
	{
		for(i=0;i<4;i++)
			ClearZero[i]=0;
		i = bh[0];
		Businessdemand(i,ClearZero,xzReport);//将营业员销售金额清零
	}
}

/*-------------------------------------------------------------------------
											机器出厂数据显示与打印函数
flag = 1: 显示
flag = 2:	打印
-------------------------------------------------------------------------*/
void MachineData_LP(uchar flag,uchar *str)
{
	uchar i=0,InitVal[4],PrintBuf[50];

	WindowsSet(7);

	strcpy(&WinHint[0][1],"机器编号:");
	for(i=0;i<16;i++)
		WinHint[1][i+1]=str[i];
	WinHint[1][i+1]=0;//机器出厂数据

	strcpy(&WinHint[2][1],"生产日期:");
	for(i=0;i<8;i++)
		WinHint[2][10+i]=str[i+16];//机器生产日期

	strcpy(&WinHint[3][1],"硬件版本号:");
	for(i=0;i<18;i++)
		WinHint[4][1+i]=str[24+i];

	strcpy(&WinHint[5][1],"软件版本号:");
	for(i=0;i<18;i++)
		WinHint[6][1+i]=str[42+i];

	if(flag == 1)	//显示
	{
		while(1)
		{
			InitVal[0]=K_TC;
			InitVal[1]=0;
			Windows(1,0,InitVal);
			if(*InitVal==K_TC)return;//退出
		}
	}
	else if(flag == 2)//打印
	{
		PrintLine("机器出厂数据");

		strcpy(PrintBuf,&WinHint[0][1]);
		strcpy(&PrintBuf[9],&WinHint[1][1]);
		PrintStr(PrintBuf);

		PrintTime("开票日期:",&str[16],PrintBuf);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[3][1]);
		strcpy(&PrintBuf[11],&WinHint[4][1]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[5][1]);
		strcpy(&PrintBuf[11],&WinHint[6][1]);
		PrintStr(PrintBuf);

		PrintLine("");
		PrintStr("电子存根");
	}
	else;
}


/*-----------------------------------------------------------------
								税种税目信息的显示与打印
flag = 1:显示
flag = 2:打印
-----------------------------------------------------------------*/
void TaxTax(uchar flag,uchar *str)
{
	uchar i=0,InitVal[4],PrintBuf[50];
	gyt2 *xp;


	WindowsSet(7);

	strcpy(&WinHint[0][1],"税种税目索引号:");
	NumToStr(str[0],&WinHint[0][16],0);

	strcpy(&WinHint[1][1],"税种税目代码:");
	BcdToStr(4,&str[1],&WinHint[1][14],0);

	strcpy(&WinHint[2][1],"税率:");
	xp=&str[5];
	NumToStr(xp->dat,&WinHint[2][6],0);

	strcpy(&WinHint[3][1],"经营项目中文名称:");
	for(i=0;i<20;i++)
		WinHint[4][1+i]=str[7+i];

	strcpy(&WinHint[5][1],"经营项目英文名称:");
	for(i=0;i<20;i++)
		WinHint[6][1+i]=str[27+i];

	if(flag == 1)//显示
	{
		InitVal[0]=K_TC;//只有退出键才有效
		InitVal[1]=0;
		Windows(1,0,InitVal);
		if(*InitVal==K_TC)return;//返回
	}
	else if(flag == 2)//打印
	{
		PrintLine("税种税目信息");

		for(i=0;i<3;i++)
			PrintStr(&WinHint[i][1]);

		strcpy(PrintBuf,&WinHint[3][1]);
		strcpy(&PrintBuf[17],&WinHint[4][1]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[5][1]);
		strcpy(&PrintBuf[17],&WinHint[6][1]);
		PrintStr(PrintBuf);

		PrintLine("");
		PrintStr("电子存根");
	}
}
/*-------------------------------------------------------------------------
											已分发的显示与打印
flag = 1:显示
flag = 0:打印
-------------------------------------------------------------------------*/
void FenFademand(uchar flag)
{
	uchar i=0,InitVal[4],str[30],Len=0,Nm=0;
	uint addr=0;
	gyt4 *xp;
	addr=InvoiceNum;//已分发的发票卷数
	I2cRead(addr,1,InitVal);//存放已分发的发票卷数
	addr=InvoCode;//发票地址
	#if !Invofenfa
		Len=InitVal[0];
	#endif
	#if Invofenfa
		Len=10;//测试时使用
	#endif
	if(Len==0)
	{
		LcdDisplay(16,0,"没有分发发票,请返回!",3);
		LcdDisplay(32,0,"按任意键继续!",0);
		KeyScan();
		return;
	}

	while(Len--)
	{
		for(i=0;i<12;i++)
			WinHint[i][0]=1;
		Nm++;
		I2cRead(addr,22,str);

		strcpy(&WinHint[0][1],"第00卷发票");
//		NumToStr(Nm,&WinHint[0][10],0);//在第一行上显示已分发的第几卷
		if(Nm<10)WinHint[0][4]=Nm+'0';
		else
		{
			WinHint[0][3]='1';
			WinHint[0][4]=Nm-10+'0';
		}

		strcpy(&WinHint[1][1],"发票代码:");
		BcdToStr(10,str,&WinHint[2][1],0);

		strcpy(&WinHint[3][1],"发票起始号:");
		xp=&str[10];
		NumToStr(xp->dat,&WinHint[4][1],0);

		strcpy(&WinHint[5][1],"发票终止号:");
		xp=&str[14];
		NumToStr(xp->dat,&WinHint[6][1],0);

		strcpy(&WinHint[7][1],"MAC:");
		xp=&str[18];
		NumToStr(xp->dat,&WinHint[7][5],0);
		for(i=0;i<3;i++)
			WinHint[8+i][0]=0;
		if(flag == 1)// 在LCD上显示
		{
			InitVal[0]=K_TC;
			InitVal[1]=K_HJ;
			InitVal[2]=0;
			Windows(1,0,InitVal);
			if(*InitVal==K_TC)return;// 返回
		}
		else if(flag == 0)//在打印机上打印
		{
			PrintLine("已分发发票");
			for(i=0;i<8;i++)
				PrintStr(WinHint[i]);
			PrintLine("");
			PrintStr("电子存根");
		}
		addr+=22;
	}
}

void Itarr(uchar *str)
{
	*str++ = K_TC;
	*str++ = K_HJ;
	*str = 0;
}

/*-------------------------------------------------------------------------
											显示与打印选择
-------------------------------------------------------------------------*/
uchar ReSelectMode(void)
{
	uchar Ln=0,Initval[5];

//	Itarr(Initval);
	while(1)
	{
		Initval[0]=K_TC;
		Initval[1]=K_HJ;
		Initval[2]=K_JZ;
		Initval[3]=K_TZ;
		Initval[4]=0;
		ReMenu2();
		Ln=Windows(1,0,Initval);
		switch(*Initval)
		{
			case K_TC:	return 0;
			case K_HJ:  return Ln;
			case K_JZ:  PaperControl(1,16);
				continue;
			case K_TZ:  PaperControl(0,16);
				continue;
			default:break;
		}
		if(Ln == 1 || Ln == 2 ) return Ln;
//		if(*Initval == K_TC)//为退出键时退出,返回0
//			return 0;
//		else
//			return Ln;//否则返回行号
	}
}

/*-------------------------------------------------------------------------
											打印提示
-------------------------------------------------------------------------*/
uchar PrintHint(void)
{
	uchar key=0;
	LcdDisplay(0,Col,"提   示",3);
	LcdDisplay(16,0,"请换同规格普通打印纸!",0);
	LcdDisplay(32,0,"否则,后果自负!",0);
	LcdDisplay(48,0,"[退出]     [确认]",0);
//	DisplayFullRec(0,0,63,191,1);
	DisplayFullRec(0,Co,16,120,1);

	while(1)
	{
		key = KeyScan();
		if(key == K_TC)//按的是退出键
			return 0;
		else if(key == K_HJ)//按的确认键
			return 1;
		else;
	}
}



/*--------------------------------------------------------------------------
											营业员销售额查询
--------------------------------------------------------------------------*/
uchar Businessdemand(uchar BianHao,uchar *ReadJE,uchar xzReport)
{
	uint address=0;
	address=SalerStat+(BianHao-1)*4;//获得营业员销售金额的存放地址 为什么要减1是因为营业员编号是从1开始的.而存放是从0开始的
	if(xzReport == 'Z')//Z报表标志
		I2cWrite(address,4,ReadJE);
	else
		I2cRead(address,4,ReadJE);
	return 1;
}


///time 输入的BCD码  格式:年月日
///InputStr :输入的字符串   OutPut 组合输出的数据
void PrintTime(uchar *InputStr,uchar *time,uchar *OutPut)
{
	uchar len,i,n=0;
	uchar Tim[]="年月日";
	len=strlen(InputStr);
	for(i=0;i<len;i++) OutPut[i]=InputStr[i];
	n=len;
	for(i=0;i<4;i++)   OutPut[len+i]=time[i];
	n+=i;
	for(i=0;i<2;i++)	 OutPut[n+i]=Tim[i];			//copy 年 字
	n+=i;
	for(i=0;i<2;i++)	 OutPut[n+i]=time[i+4];
	n+=i;
	for(i=0;i<2;i++)	 OutPut[n+i]=Tim[i+2];   //copy 月 字
	n+=i;
	for(i=0;i<2;i++)	 OutPut[n+i]=time[i+6];
	n+=i;
	for(i=0;i<2;i++)	 OutPut[n+i]=Tim[i+4];   //copy 日 字
	n+=i;
	OutPut[n]=0;
}


/*---------------------------------------------------------------------------
											单卷发票使用使用汇总数据报表
---------------------------------------------------------------------------*/
uchar InvoiceGather(uchar *time,uchar DP)
{
  uchar i,UnitName[45],Use[10],PrintBuf1[50],PrintBuf2[50],timer[10];
	uchar Karat,Quit,Depos,len,InvoDat[40];
	uint n;
	ulong address,KaratMoney,QuitMoney,srs,sre;

	gyt4 *Ips,*Ipe,*Rps,*Rpe,*MoneyKarat,*MoneyQuit;
	gyt2 Len;

	Karat=0;
	Quit=0;
	Depos=0;
	KaratMoney = 0;
	QuitMoney =0;
	I2cRead(InvoStatNum,2,Len.str);		//读出长度

	if(Len.dat==0)
	{
		ReHint("没有相关数据!","请返回!");
		return 0;
	}

	address=InvoStatBegin;

	Ips=&time[0];			//输入的开始时间
	Ipe=&time[4];	//输入的结束时间
	i = 1;
	n=0;
	while(n<=Len.dat)
	{
		SerialFlashRead(FlashDat,address,37,InvoDat);
		Rps=&InvoDat[29];//读出的开始时间
		Rpe=&InvoDat[33];//读出的结束时间
		
//			UartTxd(4,Rps->str);
//			UartTxd(4,Rpe->str);
//			UartRxd(1,&len);
		if((Rps->dat >= Ips->dat) && (Rpe->dat <= Ipe->dat))
		{

			if(i)
			{
				srs = Rps->dat;			//保存第一笔数据的开始时间
				i=0;
			}
			sre = Rpe->dat;			 //保存上一笔数据结束时间

			Karat += InvoDat[18];//正常发票份数
			Quit  += InvoDat[19];//退票份数
			Depos += InvoDat[20];//废票份数
			MoneyKarat = &InvoDat[21];//正常开具金额
			MoneyQuit  = &InvoDat[25];//退票金额
			KaratMoney += MoneyKarat->dat;
			QuitMoney  += MoneyQuit->dat;
		}
		address+=37;
		n++;
	}

	if(i) 
	{
		ReHint("输入时间不存在!","请重试!");
		return 0;			//如果 i 值一直为真,则说明根本没有找到数据
	}
	I2cRead(TaxpayerName,40,UnitName);	//读取单位名称

	WindowsSet(12);
	strcpy(&WinHint[0][1],"单位名称:");
	for(i=0;i<22;i++) WinHint[1][1+i]=UnitName[i];
	for(i=0;i<18;i++)	WinHint[2][1+i]=UnitName[22+i];

	strcpy(&WinHint[3][1],"税号:");
	I2cRead(TaxNumber,20,UnitName);			//读取税号 ==  纳税人编码
	for(i=0;i<20;i++) WinHint[3][5+i]=UnitName[i];

	strcpy(&WinHint[4][1],"机器号:");
	I2cRead(MachineNo,8,Use);
	BcdToStr(8,Use,UnitName,0x81);
	strcpy(&WinHint[4][8],UnitName);

	strcpy(&WinHint[5][1],"开票日期:");
	BcdToStr(4,&srs,UnitName,0x81);
	strcpy(&WinHint[6][1],UnitName);
	strcpy(&WinHint[6][9]," 至 ");
	BcdToStr(4,&sre,UnitName,0x81);
	strcpy(&WinHint[6][13],UnitName);

	strcpy(&WinHint[7][1],"正常发票份数:");
	NumToStr(Karat,&WinHint[7][14],2);

	strcpy(&WinHint[8][1],"正常开具金额:");
	NumToStr(KaratMoney,&WinHint[8][14],7);

	strcpy(&WinHint[9][1],"废票份数:");
	NumToStr(Depos,&WinHint[9][10],2);

	strcpy(&WinHint[10][1],"退票份数:");
	NumToStr(Quit,&WinHint[10][10],2);

	strcpy(&WinHint[11][1],"退票金额:");
	NumToStr(QuitMoney,&WinHint[11][10],7);

	if(DP==1)
	{
		Use[0]=K_TC;
		Use[1]=0;
		Windows(1,0,Use);
		if(*Use==K_TC) return 0;
	}
	else
	{
		PrintLine("发票使用汇总数据报表");

		I2cRead(TaxpayerName,40,UnitName);	//读取单位名称

		strcpy(&PrintBuf1[0],"单位名称:");
		for(i=0;i<40;i++) PrintBuf1[9+i]=UnitName[i];
		PrintBuf1[i]=0;
		PrintStr(&PrintBuf1[0]);

		for(i=3;i<5;i++)
			PrintStr(&WinHint[i][1]);

	 	BcdToStr(4,&srs,&timer[0],0x81);
		PrintTime("开票日期:",&timer[0],&PrintBuf1[0]);
		len=strlen(PrintBuf1);
		strcpy(&PrintBuf1[len]," 至 ");
		len=strlen(PrintBuf1);
		BcdToStr(4,&sre,&timer[0],0x81);
		PrintTime(&PrintBuf1[0],&timer[0],&PrintBuf2[0]);

		PrintStr(&PrintBuf2[0]);

		for(i=7;i<12;i++)
			PrintStr(&WinHint[i][1]);
		PrintLine("");
		PrintStr("电子存根");
		return 1;
	}
}

void PrintLine(uchar *Instr)
{
	uchar i,n,len,OutPut[50];
	len=strlen(Instr);
	for(i=0;i<(40-len)/2;i++)
		OutPut[i]='-';
	n=i;
	for(i=0;i<len;i++)
		OutPut[n+i]=Instr[i];
	n+=i;
	for(i=0;i<(40-len)/2;i++)
		OutPut[n+i]='-';
	n+=i;
	OutPut[n]=0;
	PrintStr(OutPut);
}

⌨️ 快捷键说明

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