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

📄 diss_s.c

📁 税控收款机软件。包括底层驱动和上层的应用一起。是一个完整的税控收款机软件方案
💻 C
📖 第 1 页 / 共 5 页
字号:
				p_chip=&CS2DATA_W;
				*p_chip=*(p_dm++);
				p_chip=&CS2STATE_R;
				while(0xff==*p_chip);
			}
			col++;
		}
	}
	if(row>=17&&row<=24)
	{
		for(j=1;j<=2;j++)
		{
			p_chip=&CS3STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS3COM_W;
			*p_chip=col;          //write LINE_adr b8,ba,bc,be
			p_chip=&CS3STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS3COM_W;
			switch(row)
			{
				case 17: *p_chip=0x40;break;  // row_start_adr/hz
				case 18: *p_chip=0x48;break;
				case 19: *p_chip=0x50;break;
				case 20: *p_chip=0x58;break;
				case 21: *p_chip=0x60;break;  // row_start_adr/hz
				case 22: *p_chip=0x68;break;
				case 23: *p_chip=0x70;break;
				case 24: *p_chip=0x78;break;
			}
			for(i=0;i<=7;i++)
			{
				p_chip=&CS3DATA_W;
				*p_chip=*(p_dm++);
				p_chip=&CS3STATE_R;
				while(0xff==*p_chip);
			}
			col++;
		}
	}
}


void DisHz(uchar *p_dm,uchar col,uchar row)
{
	uchar xdata *p_chip;
	uchar data temp,*p;
	uchar data i,j;
    uchar xdata x32[32],y[8];    
	if(row>=1&&row<=7) 
	{	            
		for(j=1;j<=2;j++)
		{
			p_chip=&CS1STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS1COM_W;
			*p_chip=col;          //write LINE_adr b8,ba,bc,be
			p_chip=&CS1STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS1COM_W;
			switch(row)
			{
				case 1: *p_chip=0x40;break;  // row_start_adr/hz
				case 2: *p_chip=0x48;break;
				case 3: *p_chip=0x50;break;
				case 4: *p_chip=0x58;break;
				case 5: *p_chip=0x60;break;  // row_start_adr/hz
				case 6: *p_chip=0x68;break;
				case 7: *p_chip=0x70;break;
				case 8: *p_chip=0x78;break;
			}
			for(i=0;i<=15;i++)
			{
				p_chip=&CS1DATA_W;
				temp=*(p_dm++);
				*p_chip=temp;
				p_chip=&CS1STATE_R;
				while(0xff==*p_chip);
			}
			col++;
		}		
	}
	
	if((row%8)==0)
	{
		for(i=0;i<32;i++)
		{
			temp=*(p_dm++);
			x32[i]=temp;
		}
		memcpy(y,&x32[8],8);
		memcpy(&x32[8],&x32[16],8);
		memcpy(&x32[16],y,8);
		p=x32;
		DisAsc(p,col,row);
		memcpy(x32,&x32[16],16);
		p=x32;
		DisAsc(p,col,row+1);
	}
	if(row>=9&&row<=15)
	{
		for(j=1;j<=2;j++)
		{
			p_chip=&CS2STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS2COM_W;
			*p_chip=col;         
			p_chip=&CS2STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS2COM_W;
			switch(row)
			{
				case 9:  *p_chip=0x40;break;  // row_start_adr/hz
				case 10: *p_chip=0x48;break;
				case 11: *p_chip=0x50;break;
				case 12: *p_chip=0x58;break;
				case 13: *p_chip=0x60;break;  // row_start_adr/hz
				case 14: *p_chip=0x68;break;
				case 15: *p_chip=0x70;break;
				case 16: *p_chip=0x78;break;
			}
			for(i=0;i<=15;i++)
			{
				p_chip=&CS2DATA_W;
				temp=*(p_dm++);
				*p_chip=temp;
				p_chip=&CS2STATE_R;
				while(0xff==*p_chip);
			}
			col++;
		}
	}
	if(row>=17&&row<=23)
	{
		for(j=1;j<=2;j++)
		{
			p_chip=&CS3STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS3COM_W;
			*p_chip=col;          //write LINE_adr b8,ba,bc,be
			p_chip=&CS3STATE_R;
			while(0xff==*p_chip);
			p_chip=&CS3COM_W;
			switch(row)
			{
				case 17: *p_chip=0x40;break;  // row_start_adr/hz
				case 18: *p_chip=0x48;break;
				case 19: *p_chip=0x50;break;
				case 20: *p_chip=0x58;break;
				case 21: *p_chip=0x60;break;  // row_start_adr/hz
				case 22: *p_chip=0x68;break;
				case 23: *p_chip=0x70;break;
				case 24: *p_chip=0x78;break;
			}
			for(i=0;i<=15;i++)
			{
				p_chip=&CS3DATA_W;
				temp=*(p_dm++);
				*p_chip=temp;
				p_chip=&CS3STATE_R;
				while(0xff==*p_chip);
			}
			col++;
		}
	}
}

void PRN_OneLine(uchar line)
{
	uchar *p;
	DL();
    DL();
    DL();
	p=Err_CHK1[line];
	*(p+33)=0;
	PrnCS=0;
	while(!PRN_LIFT_RIGHT);
	Prn_Sp(p);
	PrnCS=1;
}

void AUTO_CHK()
{
	uchar j;
	for(j=0;j<2;j++)
	{
		PRN_OneLine(0);
		PRN_OneLine(1);
		PRN_OneLine(2);
		PRN_OneLine(3);
		DL();
		LCD_CHK();cls();
		DisHzLinYm("  正在自检,请稍候...",Col2);
		PRN_CHK();
		if(P3_0&&P3_1)PRN_OneLine(5);
		else PRN_OneLine(4);
		cls();
	}
	PRN_OneLine(6);
	DisHzLinYm("  自检完成,按ESC键退出",Col2);
}

void CPUCHK()
{
	PrnCS=0;
	FfLine();DL();BfLine();
	while(PRN_LIFT_RIGHT);
	PrnCS=1;
	PRN_OneLine(1);
}

void SelfCHK1(void)
{
	uchar i;
	cls();
	DisHzLinYm(" 按1检测CPU,ESC退出检测",Col1);
	do
	{
		GetKey();
		DisHzLinYm(" 按1检测CPU,ESC退出检测",Col1);
		switch (keyc)
		{
			case 1:
				DisHzLinYm("  1. CPU检测...",Col2);
				CPUCHK();
				DisHzLinYm("OK,按2检测ROM",Col3);
				break;

			case 2:
				cls();
				DisHzLinYm("  2. ROM检测...",Col3);
				PRN_OneLine(2);			
				DisHzLinYm("OK,按3检测RAM",Col3);
				break;

			case 3:
				cls();
				DisHzLinYm("  3. RAM检测...",Col3);
				PRN_OneLine(4);			
				DisHzLinYm("OK,按4检测存储器",Col3);
				break;

			case 4:
				cls();
				DisHzLinYm("  4. 存储器检测...",Col3);
				PRN_OneLine(3);			
				DisHzLinYm("OK,按5检测LCD",Col3);

				for(i=0;i<10;i++)FfLine();
				break;

			case 5:
				LCD_CHK();
				cls();
				DisHzLinYm("OK,按6检测键盘Q键退出",Col1);
				break;

			case 6:
				cls();
				DisHzLinYm("    Q键退出",Col2);
				i=0;
				while(keyc!='q')
				{
					GetKey();
					if(((keyc>=0x20)&&(keyc<=0x7e))||(keyc<=9))
					{
						if(keyc>=10)DisAsc(&PrnVAsc+(keyc-' ')*0x10,Col2+i/24+i/24,i%24);
						else DisAsc(&PrnVAsc+(keyc+0x10)*0x10,Col2+i/24+i/24,i%24);
						i++;
					}
				}
				cls();
				DisHzLinYm("  按7,打印测试",Col3);
				break;	
							
			case 7:
				cls();
				PRN_CHK();
				for(i=0;i<10;i++)FfLine();
				cls();
				DisHzLinYm("  请按8,测试钱箱",Col3);
				break;

			case 8:
				QX_CHK();
				cls();
				DisHzLinYm("  请按9,串口测试",Col3);
				break;

			case 9:
				cls();
				DisHzLinYm("  UART检测...",Col3);		
					
				if((P3_0)&&(P3_1))
                {
                    DisHzLinYm("  UART串口线没有连接",Col3);
                    PRN_OneLine(5);
                }
				else 
                {
                    DisHzLinYm("  UART串口线连接正常",Col3);
                    PRN_OneLine(4);
                }
				break;
		}
	}while(keyc!=KEY_ESC);
}

void LCD_CHK(void)
{
	uchar data i,j,k;
	for(k=0;k<5;k++)
	{
		for(j=0;j<4;j++)
		{
			for(i=0;i<24;i++)
			{
				if(k==0){DisAsc(&FF,0xb8+j+j,i);DL30MS();}
				if(k==1){DisAsc(&PrnVAsc,0xb8+j+j,i);DL30MS();}
				if(k==3)DisAsc(&PrnVAsc+16*(0x21+i+j*5),0xb8+j+j,i);
				if(k==4)DisAsc(&PrnVAsc+(16+i%10)*16,0xb8+j+j,i);
			}
			if(k==2)
			{
				DisHzLinYm(" 国家电子计算机检测中心",0xb8+j+j);
			}
			DL();
		}
	}
}

void QX_CHK(void)
{
	DisHzLinYm("    Q键退出",Col1);
	do
	{
		UPSD_xreg.DATAOUT_A|=0x20;
		DL30MS();
		UPSD_xreg.DATAOUT_A&=0x9f;
		GetKey();
	}while(keyc!='q');
}

void PRN_CHK(void)
{
	uchar i;
	memset(prn_page_buf,'X',sizeof(prn_page_buf));
	prn_page_buf[0][0]=0;
	Prn_Paper1(26);
	PrnCS=0;
	while(PRN_LIFT_RIGHT);
	PrnCS=1;
	for(i=0;i<5;i++)FfLine();
}

uchar fiscal_declare(void)// 报税 ok
{
	uchar data status,i,temp[4];
	uchar *p;
	ulong ii;
	cls();
	DisHzLinYm(" 请确认已插入用户卡",Col2);
	
	memcpy(declare_data.st_date,span.st_date,4);
	
    memcpy(declare_data.id,span.id,6);
	memcpy(declare_data.sam_id,user.sam_id,8);
    GetKey();
    declare_data.zc_count= span.zc_count;
    declare_data.tp_count= span.tp_count;
    declare_data.fp_count= span.fp_count;
    for(i=0;i<6;i++)
    {
        declare_data.total[i]=span.tax2[i].total;
        declare_data.tp_total[i]=span.tax2[i].tp_total;
    }
	
	reinput:
	cls();
    DisHzLinYm("请输入报税的开始日期:",Col1);
    getstr(8,databuf,Col2);
	if(keyc==0x1b)return 1;
    for(i=0;i<4;i++)temp[i]=(databuf[i+i]-48)*16+databuf[i+i+1]-48;
    memcpy(declare_data.st_date,temp,4);

    DisHzLinYm("请输入报税的截止日期:",Col3);
    getstr(8,databuf,Col4);
	if(keyc==0x1b)return 1;
    for(i=0;i<4;i++)temp[i]=(databuf[i+i]-48)*16+databuf[i+i+1]-48;
    memcpy(declare_data.ed_date,temp,4);

	p=Readtime1();

	if(memcmp(&declare_data.ed_date,p,4)>=0)goto reinput;

	status=declare_fiscal();

    if(status!=0)
	{
        cls();
        if(status==1)DisHzLinYm("用户卡不匹配!",Col4);
        else if(status==2)DisHzLinYm("申报数据已汇总!",Col4);
        DisHzLinYm("申报失败!",Col2);
        DL();
        return 1;
	}
	cls();
	DisHzLinYm(" 申报成功!",Col2);
	memcpy(declare_temp,declare_data.ed_date,4);
	memcpy(flash_temp,&declare_data,sizeof(declare_data));
	ii=fiscal_data_index.dcl_index;
	ii=ii*256;
	ii=ii+ST_DCL_ADR;
	if(fiscal_data_index.dcl_index>=1024)fiscal_data_index.dcl_index=0;//1000张报税记录
	if(fiscal_data_index.dcl_index%256==0)er_sector(ii);
	wr_page(ii);
	fiscal_data_index.dcl_index++;
    jinechaoxian=2;
	DL();
	return 0;
}

uchar fiscal_fei()
{   
	uchar i,*p;
	ulong ii;
	cls();
    
	p=Readtime1();
	memset(&inv_prn_cur_info,0, sizeof(inv_prn_cur_info));

	for(i=0;i<6;i++)
	inv_prn_cur_info.tax0[i].id=tax[i].tax_id;//i+1;

	inv_prn_cur_info.id=inv_cur_info.cur_id;
	memcpy(inv_prn_cur_info.invoice.vcode,inv_cur_vol.vcode,10);
    memcpy(inv_prn_cur_info.date,p,4);
	inv_prn_cur_info.invoice_total=0;
    inv_prn_cur_info.type=0x03;

	issue_invoice();
    if(stat!=0)
	{
        cls();
        DisHzLinYm("   税控码错误",Col2);
        memset(&inv_prn_cur_info,0, sizeof(inv_prn_cur_info));
        return 1;
	}
	inv_cur_info.cur_id++; 
	inv_cur_vol.fp_count++;
	inv_cur_day.fp_count++;
	memcpy(&inv_prn_cur_old_info,&inv_prn_cur_info,sizeof(inv_prn_cur_old_info));
	memcpy(flash_temp,&inv_prn_cur_info,sizeof(inv_prn_cur_info));			

	if(fiscal_data_index.prn_h_index>6000)fiscal_data_index.prn_h_index=0;	//5719张发票最小7900张
	ii=fiscal_data_index.prn_h_index;
	ii=ii*256;
	if(fiscal_data_index.prn_h_index%256==0)er_sector(ii);
	wr_page(ii);
	fiscal_data_index.prn_h_index++;

	for(i=0;i<10;i++)FfLine();
	DisHzLinYm("废掉当前发票成功",Col3);
	if(inv_cur_info.cur_id>inv_cur_vol.end_id)
	{		
		memcpy(inv_cur_vol.end_time,inv_prn_cur_info.date,4);
		cls();
		DisHzLinYm("   发票卷打印中,请稍等...",Col3);
		memcpy(&inv_tmp_vol,&inv_cur_vol,256);
		SingleInvoiceTotal();
		memset(flash_temp,0,sizeof(flash_temp));
		memcpy(flash_temp,&inv_cur_vol,sizeof(inv_cur_vol));

		ii=fiscal_data_index.vol_flash_index;
		ii=ii*256;
		ii=ST_VOL_ADR+ii;
		if(fiscal_data_index.vol_flash_index>=1024)fiscal_data_index.vol_flash_index=0;	//1800个日交易记录
		if(fiscal_data_index.vol_flash_index%256==0)er_sector(ii);
		wr_page(ii);
		memset(&inv_cur_vol,0,sizeof(inv_cur_vol));
		fiscal_data_index.vol_flash_index++;
        Prn_Paper1(22);
		invoice_input.index=0;
	}
	memset(&inv_prn_cur_info,0, sizeof(inv_prn_cur_info));
	return 0;
}

void input_inv_pro()//分发发票 ok
{	  
	uchar data i;
	uchar data sstat,temp[2];
	do
	{ 
		cls();
		DisHzLinYm("1.发票卷分发",Col2);
		DisHzLinYm("2.发票录入",Col3);  
        DisHzLinYm("3.发票卷作废",Col4);
		GetKey();
		switch(keyc)
		{ 
			case 1:
				cls();

⌨️ 快捷键说明

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