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

📄 app.c

📁 抄水表手持POS代码
💻 C
📖 第 1 页 / 共 3 页
字号:

void SB_OP()
{
uchar xdata buffer[16],buff[JHLENGTH+1],lsz_buf[17],str[32];
uchar xdata i,key,ret,page;
ulong xdata bh,zs,syzs,syds,beginaddr,j,yhid;
int xdata len;
uint xdata ts;
uchar xdata allff[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

_Clr();
ts=0;
while(1)
{
gos:
beginaddr=(uint)ts*JHLENGTH%PAGELENGTH;
page=JHPAGE+(uint)ts*JHLENGTH/PAGELENGTH; 
for(j=0;j<JHLENGTH;j++) buff[j]=_FlashByteRead(page,beginaddr+j);
if(ValidJH(buff)==OK)
{
 bh=(ulong)buff[0]+(ulong)buff[1]*0x100+(ulong)buff[2]*0x10000+(ulong)buff[3]*0x1000000;sprintf(str,"表号:%lu            ",bh);_Display(0,0,str,16);
 //_Display(0,0,"表号",4);_Display(4,1,buff,12);
 _Display(0,1,"姓名:           ",16);_Display(4,1,buff+4,8);
 _Display(0,2,buff+12,16);
 syzs=(ulong)buff[28]+(ulong)buff[29]*0x100+(ulong)buff[30]*0x10000+(ulong)buff[31]*0x1000000;
 syds=(ulong)buff[32]+(ulong)buff[33]*0x100+(ulong)buff[34]*0x10000+(ulong)buff[35]*0x1000000;
 sprintf(str,"%lu/%lu          ",syzs,syds);_Display(0,3,str,16);
 //bh=(ulong)buff[0]+(ulong)buff[1]*0x100+(ulong)buff[2]*0x10000+(ulong)buff[3]*0x1000000;sprintf(str,"表号%012lu  ",bh);_Display(0,1,str,16);
 //_Display(0,2,buff+4,16);_Display(0,3,buff+20,12);
}
 start1:
 key=_GetChar();
  if(key==KeyB_No)return;
  else if(key==KeyB_Up) {if(ts>0)ts--;}
  else if(key==KeyB_Down) {if(ts<2000) ts++;}
  else if(key==KeyB_Yes)goto start2;
  else if(key==KeyB_F1)
  {
   start:
	memset(buffer,0,sizeof(buffer));_Clr();_Display(0,1,"请输入表号:     ",16);
	ret=_GetStr(0,2,buffer,12);
	if (ret==0) {_Clr();_Display(0,1,"确定退出吗?    ",16);_Display(0,2,"按<取消>退出    ",16);if(_GetChar()==KeyB_No)goto gos ;goto start;}
	bh=0;
	for(i=0;i<ret;i++)
	{
   if((buffer[i]>='0')&&(buffer[i]<='9')){ bh=bh*10+buffer[i]-0x30;	}
	else{_Display(0,1,"非法数据        ",16);_Display(0,2,"请重新输入      ",16);_GetChar();goto start;}
   }
	buff[0]=(uchar)bh;buff[1]= (uchar)(bh/0x100);buff[2]= (uchar)(bh/0x10000);buff[3]= (uchar)(bh/0x1000000);
	ts=CheckBH(buff);
  }
  else if(key==KeyB_LED)
  {
   yhid=(ulong)buff[36]+(ulong)buff[37]*0x100+(ulong)buff[38]*0x10000+(ulong)buff[39]*0x1000000;
	sprintf(str,"用户号:%lu            ",yhid);_Display(0,0,str,16);
   _Display(0,1,"电话:           ",16);
	if(memcmp(allff,buff+40,12)==0)_Display(5,1,buff+40,12);
	else _Display(5,1,buff+52,12);
	_Display(0,2,"                ",16);_Display(0,3,"                ",16);
	goto start1;
  }
  else if(key==KeyB_Dot)
  {
   start3:
	memset(buffer,0,sizeof(buffer));_Clr();_Display(0,1,"请输入电话号码: ",16);
	ret=_GetStr(0,2,buffer,12);
	if (ret==0) {_Clr();_Display(0,1,"确定退出吗?    ",16);_Display(0,2,"按<取消>退出    ",16);if(_GetChar()==KeyB_No)goto gos ;goto start3;}
	bh=0;
	for(i=0;i<ret;i++)
	{
   if((buffer[i]>='0')&&(buffer[i]<='9')){;	}
	else{_Display(0,1,"非法数据        ",16);_Display(0,2,"请重新输入      ",16);_GetChar();goto start3;}
   }
	beginaddr=(uint)ts*JHLENGTH%PAGELENGTH;
	page=JHPAGE+(uint)ts*JHLENGTH/PAGELENGTH; 
	for(i=0;i<ret;i++)_FlashByteWrite(page,beginaddr+52+i,buffer[i]);
  }
  else ;
}


start2:
memset(buff,0,sizeof(buff));  
_Clr();
_Display(0,1,"请输入本月止码: ",16);
ret=_GetStr(0,2,buff,5);
if (ret==0) {_Clr();_Display(0,1,"确定退出吗?    ",16);_Display(0,2,"按<确定>退出    ",16);if(_GetChar()==KeyB_Yes)goto gos ;goto start2;}
zs=0;
for(i=0;i<ret;i++)
  {
   if((buff[i]>='0')&&(buff[i]<='9')){ zs=zs*10+buff[i]-0x30;	}
	else{_Display(0,1,"非法数据        ",16);_Display(0,2,"请重新输入      ",16);_GetChar();goto start2;}
  }
_Display(0,1,"请稍候...       ",16);
len=ReadLen();
			  if(len<0){ _Clr(); _Display(0,1,"   内存错误       ",16); _GetChar(); return; }
			  if(len>9000){_Clr();_Display(0,1,"   POS机已满     ",16); _GetChar(); return;}
			  if(len>8800){_Clr(); _Display(0,1,"   POS机将满     ",16); _GetChar();}
			  
			  memset(lsz_buf,0xff,sizeof(lsz_buf));
			  beginaddr=(ulong)len*LSZLENGTH; len++; 
			  for(i=0;i<3;i++){if(WriteLen(len)==OK)break;}
			  if(i==3){_Clr();_Display(0,1,"    内存错误       ",16); _GetChar(); return;}
			  _GetTime(str);
			  Data16ToData10(str,str);
			  Date6ToDate4(str,str);
			  memcpy(lsz_buf,str,4);
			  
			  lsz_buf[4]=(uchar)bh;
			  lsz_buf[5]= bh/0x100;
			  lsz_buf[6]= bh/0x10000;
			  lsz_buf[7]= bh/0x1000000;
			  lsz_buf[8]=(uchar)zs;
			  lsz_buf[9]= zs/0x100;
			  lsz_buf[10]= zs/0x10000;
			  lsz_buf[11]= zs/0x1000000;
			  _Calc_crc(CRC16,14,lsz_buf,lsz_buf+14);
			  for(i=0;i<3;i++)if(WriteLSZ(lsz_buf,beginaddr,LSZLENGTH)==OK){break;}
			  else {_Clr();_Display(0,1,"    内存错误    ",16);_GetChar();return;}

 return;
}

void Card_OP()
{
uchar xdata key,yhdate[3],optime[2],xztime[2];
uchar xdata str[30],khstr[30],jyqstr[30],jyhstr[30],lsz_buf[33],fjxx[16+1],cardsnr[4];
long  xdata beginaddr,breakflag=0,ret;
int  xdata len;
uchar m,status,i,yhbl,card_type,hkbz;
ulong xdata n;
uint ucardbal0;
 if(sbhflag==NOK){_Clr();_Display(0,1,"   未设设备号       ",16);_Display(0,2,"    禁止刷卡       ",16); _GetChar(); return; }
 if(ZBHFlag==NOK){_Clr();_Display(0,1,"   未设自编号       ",16);_Display(0,2,"    禁止刷卡       ",16); _GetChar(); return; }
 if(GLKFlag==NOK){_Clr();_Display(0,1," 管理卡信息为空     ",16);_Display(0,2,"    禁止刷卡       ",16); _GetChar(); return; }
 if(BalFlag==NOK){if(Get_Bal2(0)==NOK)UCardBal_0=0;BalFlag=OK;}
 
 gost1:
 _Clr();_Display(0,1,"   正在检测...      ",16);
 for (m=0;m<3;m++)
 {
 P21=0x00;P36=0X0;_delay_10ms(50);
 _PORT_Init ();_UART0_Init(57600);_pRecBuf0=0;
 for(n=0;n<100000;n++){if(_pRecBuf0==3){if((_R232Buf0[0]='1')&&(_R232Buf0[1]='*')&&(_R232Buf0[2]='2')){goto gost;break;}}}
 }
 if(m==3){_Clr();_Display(0,1,"    通讯失败      ",16);_GetChar();  return;}
 gost:
 _GetTime(str);memcpy(xzdate,str,3);xztime[0]=str[3]/16*10+str[3]%16;xztime[1]=str[4]/16*10+str[4]%16;
 _Display(0,1,"                  ",16);
// if (TestMif()==NOK) {P21=1; _delay_1ms(10);P21=0; if (TestMif()==NOK){_Display(0,2,"    通讯失败      ",16);_GetChar();  return;}}
 len=ReadLen();
 if(len<0){   _Clr(); _Display(0,1,"   内存错误       ",16); _GetChar(); return; }
 if(len>9000){ _Clr();_Display(0,1,"   POS机已满     ",16); _GetChar(); return;}
 if(len>8800){ _Clr(); _Display(0,1,"   POS机将满     ",16); _GetChar();}
 if(UCardBal_0==0)_Display(0,0,"收费金额: 未设     ",16);
 else {sprintf(str,"收费金额:%3.1f元      ",(float)UCardBal_0/10);_Display(0,0,str,16);}
 //sprintf(str,"收费次数:%01u         ",(uint)len);_Display(0,3,str,16);
 _Display(0,3,"*****请放卡*****",16);
 while(1) {
           if((breakflag%30)==29){for(i=0;i<2;i++) ret=get_voltage();if(ret<350){_Clr();_Display(0,1,"电压过低,请充电",16); _GetChar(); _PowerOff();}}
           breakflag++;if(breakflag==33)_LightOff();
           if(breakflag>=300){breakflag=0;P21=1;P36=0X1;_delay_10ms(50);jrjdms();goto gost1;}
			  if(UCardBal_0==0)_Display(0,0,"收费金额: 未设     ",16);
			  else {sprintf(str,"收费金额:%3.1f元      ",(float)UCardBal_0/10);_Display(0,0,str,16);}
			  //sprintf(str,"收费次数:%01u         ",(uint)len);_Display(0,3,str,16);
			  _Display(0,3,"*****请放卡*****",16);
           if((breakflag%2)==0)
			  {
			  key=_GetKey(1);
			  if(key==KeyB_No) break;
			  else if(key==KeyB_F1){P21=0x01;P36=0X01;_delay_10ms(50);breakflag=0;Select_Bal();_Display(0,1,"                ",16);_Display(0,2,"                ",16);P21=0x00;P36=0X00;_delay_10ms(50);}
			  //else if(key==KeyB_Dot)Get_Money(str);
			  else if(key==KeyB_LED){P21=0x01;P36=0X01;_delay_10ms(50);PAR_CX2();breakflag=0;P21=0x00;P36=0X00;_delay_10ms(50);}
			  else if(key==KeyB_1) {if(Get_Bal2(0)==NOK)UCardBal_0=0;breakflag=0;}
			  else if(key==KeyB_2) {if(Get_Bal2(1)==NOK);breakflag=0;}
			  else if(key==KeyB_3) {if(Get_Bal2(2)==NOK);breakflag=0;}
			  else if(key==KeyB_4) {if(Get_Bal2(3)==NOK);breakflag=0;}
			  else if(key==KeyB_5) {if(Get_Bal2(4)==NOK);breakflag=0;}
			  else if(key==KeyB_6) {if(Get_Bal2(5)==NOK);breakflag=0;}
			  else if(key==KeyB_7) {if(Get_Bal2(6)==NOK);breakflag=0;}
			  else if(key==KeyB_8) {if(Get_Bal2(7)==NOK);breakflag=0;}
			  else if(key==KeyB_9) {if(Get_Bal2(8)==NOK);breakflag=0;}
			  else if(key==KeyB_0) {if(Get_Bal2(9)==NOK);breakflag=0;}
			  else if(key==KeyB_Up){P21=0x01;P36=0X01;_delay_10ms(50);LSZ_CX();_Clr();breakflag=0;P21=0x00;P36=0X00;_delay_10ms(50);}
			  else if(key==KeyB_Down){P21=0x01;P36=0X01;_delay_10ms(50);LSZ_CX();_Clr();breakflag=0;P21=0x00;P36=0X00;_delay_10ms(50);}
			  else;
			  }
//			  if((breakflag%3)==0)_GetTime(str);xztime[0]=str[3]/16*10+str[3]%16;xztime[1]=str[4]/16*10+str[4]%16;
			  if(UCardBal_0==0) continue;
			  _pRecBuf0=0;hkbz=0;//keyflag=0;
			  if(ReadUCInc()==NOK) continue;
			  _LightOn();
			  if((_R232Buf0[CC_ADDRINF+1+20]!=0xff-_R232Buf0[CC_ADDRINF+1+22])||(_R232Buf0[CC_ADDRINF+1+21]!=0xff-_R232Buf0[CC_ADDRINF+1+23]))continue;
			 // _Display(0,1,"ok1",3);
			  breakflag=0;
			  memcpy(UCardNum,_R232Buf0+CC_ADDRINF+1,4);//发行卡号
			  memcpy(UCardSnr,_R232Buf0+CC_ADDRINF+1+12,4);//物理卡号
//sprintf(str,"%02x%02x%02x%02x                  ",(uint)UCardSnr[0],(uint)UCardSnr[1],(uint)UCardSnr[2],(uint)UCardSnr[3]);
//				_Display(0,3,str,16);_GetChar(); 
			  CardType=_R232Buf0[CC_ADDRINF+1+24];//卡种
			  
			  card_type=_R232Buf0[CC_ADDRINF+38]%0x10;
			  if(CardType!=5){if(card_type!=0x0f-_R232Buf0[CC_ADDRINF+38]/0x10)continue;}
			  if(CardType==0x0a)
			  {
			   UCardBal_1=(uint)_R232Buf0[CC_ADDRINF+1+20]+(uint)_R232Buf0[CC_ADDRINF+1+21]*0x100;
			   memcpy(UCardBal1,_R232Buf0+CC_ADDRINF+1+20,2);//交易前余额
			   memcpy(yhdate,_R232Buf0+CC_ADDRINF+1+29,3);
			   yhbl=_R232Buf0[CC_ADDRINF+33];
				UCardBal_1Bak=UCardBal_1;
			  }
			  memcpy(fjxx,_R232Buf0+CC_ADDRINF+1+25,16);//附加信息
			  if(CardType==0x0c) {yhbl=_R232Buf0[CC_ADDRINF+33]; }
			  if((_R232Buf0[CC_ADDRINF+1+20]!=0xff-_R232Buf0[CC_ADDRINF+1+22])||(_R232Buf0[CC_ADDRINF+1+21]!=0xff-_R232Buf0[CC_ADDRINF+1+23]))continue;
			  UCardNo=(ulong)UCardNum[0]+(ulong)UCardNum[1]*0x100l+(ulong)UCardNum[2]*0x10000l;
			  if(CardType==0x05) {sprintf(khstr,"管理卡:%07ld   ",UCardNo);_Display(0,1,khstr,16);
				                         Set_GLK2();continue;}
			  else if(CardType==0x0a)
			  {
			   if((UCardNo>=1990000)&&(UCardNo<2000000))
			    { sprintf(khstr,"普通卡:%07ld   ",UCardNo);
				 //_Display(0,0,"普通卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 if(CheckDate(xzdate,yhdate)==OK){ucardbal0=(uint)((ulong)UCardBal_0*yhbl/100);if((ulong)UCardBal_0*yhbl%100>=50)ucardbal0++;}else ucardbal0=UCardBal_0;}
			   else if((UCardNo>=5000000)&&(UCardNo<6000000))
			    {//if(UCardNoBak==UCardNo)continue;if(XLFlag==1)continue;
				 sprintf(khstr,"亲情卡:%07ld   ",UCardNo);
				 //_Display(0,0,"亲情卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 if(XLFlag==1)ucardbal0=UCardBal_0;
				 else{
				  if(CheckDate(xzdate,yhdate)==OK){
				   if(CheckCardNum(UCardNum,xztime)==NOK){
					 _Display(0,1,"                ",16);_Display(0,2,"    重复刷卡    ",16);_delay_1ms(300);
					 _Display(0,1,"                ",16);_Display(0,2,"                ",16);continue;}
				   ucardbal0=(uint)((ulong)UCardBal_0*yhbl/100);if((ulong)UCardBal_0*yhbl%100>=50)ucardbal0++;}
				  else ucardbal0=UCardBal_0;
				  }
				 }
			   else if((UCardNo>=8000000)&&(UCardNo<9000000))
			    {//if(UCardNoBak==UCardNo)continue;if(XLFlag==1)continue;
				 sprintf(khstr,"爱心卡:%07ld   ",UCardNo);
				 //_Display(0,0,"爱心卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 if(XLFlag==1)ucardbal0=UCardBal_0;
				 else{
				  if(CheckDate(xzdate,yhdate)==OK){
				   if(CheckCardNum(UCardNum,xztime)==NOK){
					 _Display(0,1,"                ",16);_Display(0,2,"    重复刷卡    ",16);_delay_1ms(300);
					 _Display(0,1,"                ",16);_Display(0,2,"                ",16);continue;}
					ucardbal0=(uint)((ulong)UCardBal_0*yhbl/100);if((ulong)UCardBal_0*yhbl%100>=50)ucardbal0++;}
				  else ucardbal0=UCardBal_0;
				  }
				 }
			   else if((UCardNo>=9000000)&&(UCardNo<10000000))
			    {//if(UCardNoBak==UCardNo)continue;if(XLFlag==1)continue;
				 sprintf(khstr,"纪念卡:%07ld   ",UCardNo);
				 //_Display(0,0,"纪念卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 if(XLFlag==1)ucardbal0=UCardBal_0;
				 else{
				  if(CheckDate(xzdate,yhdate)==OK){ucardbal0=(uint)((ulong)UCardBal_0*yhbl/100);if((ulong)UCardBal_0*yhbl%100>=50)ucardbal0++;}
				  else ucardbal0=UCardBal_0;
				  }
				 }
			   else
			    {
				 sprintf(khstr,"普通卡:%07ld   ",UCardNo);
				 //_Display(0,0,"普通卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 ucardbal0=UCardBal_0;}
				 sprintf(jyqstr,"刷卡前:%3.1f      ",(float)UCardBal_1/10);
				//_Display(0,1,"刷卡前:           ",16);sprintf(str,"%3.1f    ",(float)UCardBal_1/10);_Display(8,1,str,7);
           }
			  else if(CardType==0x0c) 
			   { _pRecBuf0=0;//ReadUCPub();
				 if(CheckCardNum(UCardNum,xztime)==NOK){
					 _Display(0,1,"                ",16);_Display(0,2,"    重复刷卡    ",16);_delay_1ms(300);
					 _Display(0,1,"                ",16);_Display(0,2,"                ",16);continue;}
				 
				 _pRecBuf0=0;if(ReadYPKInc()!=OK) continue;
				 if((_R232Buf0[17]!=_R232Buf0[9])
				  ||(_R232Buf0[18]!=_R232Buf0[10])
				  ||(_R232Buf0[19]!=_R232Buf0[11])
				  ||(_R232Buf0[20]!=_R232Buf0[12]))continue;
				  //_Display(0,1,"ok3",3);
				 if((_R232Buf0[17]!=0xff-_R232Buf0[13])
				  ||(_R232Buf0[18]!=0xff-_R232Buf0[14])
				  ||(_R232Buf0[19]!=0xff-_R232Buf0[15])
				  ||(_R232Buf0[20]!=0xff-_R232Buf0[16]))continue;
				  //_Display(0,1,"ok4",3);
				 if(memcmp(UCardSnr,_R232Buf0+5,4)!=0)continue;
				 //_Display(0,1,"ok5",3);
				 //memcpy(UCardSnr,_R232Buf0+5,4);
				 sprintf(khstr,"学生卡:%07ld   ",UCardNo);
				 if(XLFlag==1){_Display(0,1,khstr,16);_Display(0,2,"郊线此卡不能使用",16);continue;}
				 //_Display(0,0,"学生卡:            ",16);sprintf(str,"%07ld   ",UCardNo);_Display(8,0,str,8);
				 if(_R232Buf0[17]<xzdate[0]){optime[0]=06;optime[1]=02;}//{_Display(0,1,khstr,16);_Display(0,2,"时间超期!        ",16);continue;}
				 if((_R232Buf0[17]==xzdate[0])&&(_R232Buf0[18]<xzdate[1])){optime[0]=06;optime[1]=02;}//{_Display(0,1,khstr,16);_Display(0,2,"时间超期!          ",16);continue;}
				 memcpy(optime,_R232Buf0+17,2);memcpy(UCardBal1,_R232Buf0+19,2);//交易前余额
				 UCardBal_1=(uint)_R232Buf0[19]*0x100+(uint)_R232Buf0[20];UCardBal_1Bak=UCardBal_1;
				 sprintf(jyqstr,"刷卡前:%3.1f      ",(float)UCardBal_1/10);
			    //_Display(0,1,"刷卡前:           ",16);sprintf(str,"%3.1f    ",(float)UCardBal_1/10);_Display(8,1,str,7);
				 ucardbal0=(uint)((ulong)UCardBal_0*yhbl/100);if((ulong)UCardBal_0*yhbl%100>=50)ucardbal0++;
				}
			  else
			  {_pRecBuf0=0;//ReadUCPub();
				if(CheckCardNum(UCardNum,xztime)==NOK){
					 _Display(0,1,"                ",16);_Display(0,2,"    重复刷卡    ",16);_delay_1ms(300);
					 _Display(0,1,"                ",16);_Display(0,2,"                ",16);continue;}
				_pRecBuf0=0;if(ReadYPKInc()!=OK) continue;
				if((_R232Buf0[17]!=_R232Buf0[9])
				  ||(_R232Buf0[18]!=_R232Buf0[10])
				  ||(_R232Buf0[19]!=_R232Buf0[11])
				  ||(_R232Buf0[20]!=_R232Buf0[12]))continue;
				 if((_R232Buf0[17]!=0xff-_R232Buf0[13])
				  ||(_R232Buf0[18]!=0xff-_R232Buf0[14])
				  ||(_R232Buf0[19]!=0xff-_R232Buf0[15])
				  ||(_R232Buf0[20]!=0xff-_R232Buf0[16]))continue;
				if(memcmp(UCardSnr,_R232Buf0+5,4)!=0)continue;
				//memcpy(UCardSnr,_R232Buf0+5,4);
			   if(CardType==0x0b)      {sprintf(khstr,"子女卡:%07ld   ",UCardNo);/*if(XLFlag==1){_Display(0,1,khstr,16);_Display(0,2,"郊线此卡不能使用",16);continue;}*/} 
			   else if(CardType==0x0d) {sprintf(khstr,"优待卡:%07ld   ",UCardNo);
				                         if(XLFlag==1){if((UCardNo>=3900000)||(UCardNo<3800000)){_Display(0,1,khstr,16);_Display(0,2,"郊线此卡不能使用",16);continue;}}}				
			   else if(CardType==0x0e) {sprintf(khstr,"职工卡:%07ld   ",UCardNo);}

⌨️ 快捷键说明

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