📄 app.c
字号:
else {continue;}
//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,"刷卡前:%03u ",UCardBal_1);
//_Display(0,1,"刷卡前: ",16);sprintf(str,"%03u ",UCardBal_1);_Display(8,1,str,7);
ucardbal0=(int)PriceTab[CardType-0x0a];
}
if(UCardBal_1<ucardbal0){_Display(0,1,khstr,16);_Display(0,2,"余额不足! ",16);continue;}
if((fjxx[0]==0xb1)&&(fjxx[1]==0xca)){_Display(0,1,"异常卡,请与IC卡",16);_Display(0,2,"中心联系 ",16);hkbz=1;goto gobreak;}
if(memcmp(NoCardNumBuf,UCardSnr,4)==0)
{
if((NoCardNumBuf[4]==UCardBal_1%0x100)&&(NoCardNumBuf[5]==UCardBal_1/0x100))
{
_Display(0,1,khstr,16);//_Display(0,1,jyqstr,16);
if((CardType==0x0a)||(CardType==0x0c)) sprintf(jyhstr,"刷卡后:%3.1f ",(float)UCardBal_2/10);
else sprintf(jyhstr,"刷卡后:%3u ",UCardBal_2);
_Display(0,2,jyhstr,16);
_Display(0,3,"****刷卡完成****",16);
//sprintf(str,"收费次数:%01u ",(uint)len+1);_Display(0,3,str,16);
SPEAKON;_delay_10ms(250); SPEAKOFF;_LightOff();_delay_10ms(10);_LightOn();goto gobreak;
}
}
memset(NoCardNumBuf,0,sizeof(NoCardNumBuf));
if(CardType==0x0a)
{
//err=0;start:
status=0;
if(UCardBal_1>8000){_Display(0,1,"异常卡,请与IC卡",16);_Display(0,2,"中心联系 ",16);continue;}
if(UCardBal_1Bak!=UCardBal_1)continue;
if(ucardbal0>100)continue;
UCardBal_2=UCardBal_1-ucardbal0;
if(UCardBal_2>8000)continue;
for(i=0;i<3;i++){_pRecBuf0=0;if(WriteUCInc(UCardSnr, "\0\0\0\0","\0\0\0\0","\0\0\0\0",UCardBal_2)==OK) {status=1;break;}}
if(i==3){memcpy(NoCardNumBuf,UCardSnr,4);NoCardNumBuf[4]=UCardBal_2%0x100;NoCardNumBuf[5]=UCardBal_2/0x100;continue;}
//key=0;_pRecBuf0=0;
/*if(ReadUCInc()==NOK)
{
if(status==1)status=2;if(status==0)status=9;
_pRecBuf0=0;
if(ReadUCInc()==NOK)
{
//_Display(0,2," 交易未完 ",16);_Display(0,3,"请正确放置公交卡",16); BELL(5,2);
while(1)
{
_pRecBuf0=0;if(ReadUCInc()==OK)break;
if(_GetKey(111)==KeyB_No)key++;
if(key>=5){if(status==1)status=2;if(status==0)status=9; break;}
}
}
}
if(status==9)continue;
//if(status==9){_Display(0,2," ",16);_Display(0,3," 交易失败 ",16); BELL(5,2);_GetChar();continue;}
if(status==2){UCardBal_2=UCardBal_1-ucardbal0;status=1;}
else {
// memcpy(UCardBal2,_R232Buf0+CC_ADDRINF+1+20,2);//交易后余额
UCardBal_2=(uint)_R232Buf0[CC_ADDRINF+1+20]+(uint)_R232Buf0[CC_ADDRINF+1+21]*0x100;
if((UCardBal_2!=UCardBal_1-ucardbal0)&&(UCardBal_2!=UCardBal_1Bak-ucardbal0))
{
if(UCardBal_1Bak==(uint)UCardBal1[0]+(uint)UCardBal1[1]*0x100) UCardBal_1=UCardBal_1Bak;
err++;if(err<4)goto start;
continue;}
}*/
}
else
{
//err=0;start1:
// status=0;_Display(0,1,jyqstr,16);
if(UCardBal_1Bak!=UCardBal_1)continue;
if(CardType==0x0c)
{if(UCardBal_1>8000){_Display(0,1,"异常卡,请与IC卡",16);_Display(0,2,"中心联系 ",16);continue;}if(ucardbal0>100)continue;
UCardBal_2=UCardBal_1-ucardbal0;if(UCardBal_2>8000)continue;}
else if(CardType==0x0d)
{if(UCardBal_1>720) UCardBal_1=720;UCardBal_1Bak=720;UCardBal_2=UCardBal_1-1;if(UCardBal_2>3000)continue;}
else
{if(UCardBal_1>3000){_Display(0,1,"异常卡,请与IC卡",16);_Display(0,2,"中心联系 ",16);continue;}
UCardBal_2=UCardBal_1-1;if(UCardBal_2>3000)continue;}
if((optime[0]<4)||(optime[1]>0x12)||(optime[1]<0x01)){optime[0]=06;optime[1]=02;}//continue;
//UCardBal_2=4000;//optime[0]=05;optime[1]=0x11;//tttt
for(i=0;i<3;i++){_pRecBuf0=0;if(WriteYPKInc(UCardSnr, "\0\0\0\0","\0\0\0\0",optime,UCardBal_2)==OK){status=1;break;}}
//_Display(0,1,"ok6",3);
if(i==3){memcpy(NoCardNumBuf,UCardSnr,4);NoCardNumBuf[4]=UCardBal_2%0x100;NoCardNumBuf[5]=UCardBal_2/0x100;continue;}
/*key=0;_pRecBuf0=0;
if(ReadYPKInc()==NOK)
{
if(status==1)status=2; if(status==0)status=9;
_pRecBuf0=0;
if(ReadYPKInc()==NOK)
{
_Display(0,2," 交易未完 ",16);_Display(0,3,"请正确放置公交卡",16); BELL(5,2);
while(1)
{
_pRecBuf0=0;if(ReadYPKInc()==OK)break;
if(_GetKey(111)==KeyB_No)key++;
if(key>=5){if(status==1)status=2; if(status==0)status=9; break;}
}
}
}
UCardBal_2=(uint)_R232Buf0[19]*0x100+_R232Buf0[20];
if(status==9)continue;
//if(status==9){_Display(0,2," ",16);_Display(0,3," 交易失败 ",16); BELL(5,2);_GetChar();continue;}
if(status==2){UCardBal_2=UCardBal_1-ucardbal0;status=1;}
else UCardBal_2=(uint)_R232Buf0[19]*0x100+_R232Buf0[20];
if((UCardBal_2!=UCardBal_1-ucardbal0)&&(UCardBal_2!=UCardBal_1Bak-ucardbal0))
{
if(UCardBal_1Bak==(uint)UCardBal1[0]+(uint)UCardBal1[1]*0x100) UCardBal_1=UCardBal_1Bak;
err++;if(err<4)goto start1;
//_Display(0,2," ",16);_Display(0,3," 交易失败 ",16); BELL(5,2);_GetChar();
continue;
}*/
}
_Display(0,1,khstr,16);//_Display(0,1,jyqstr,16);
//_Display(0,2,"刷卡后: ",16);
if((CardType==0x0a)||(CardType==0x0c)) sprintf(jyhstr,"刷卡后:%3.1f ",(float)UCardBal_2/10);
else sprintf(jyhstr,"刷卡后:%3u ",UCardBal_2);
_Display(0,2,jyhstr,16);
_Display(0,3,"****刷卡完成****",16);
//sprintf(str,"收费次数:%01u ",(uint)len+1);_Display(0,3,str,16);
//_Display(0,3," ",16);
SPEAKON;_delay_10ms(250); SPEAKOFF;_LightOff();_delay_10ms(10);_LightOn();
while(1) {
_pRecBuf0=0;if(ReadSnr()==NOK)break;//{_delay_10ms(10);_pRecBuf0=0;if(ReadUCInc()==NOK)break; }// {_delay_10ms(10);_pRecBuf0=0;if(ReadUCInc()==NOK) break;}
memcpy(cardsnr,_R232Buf0+CC_ADDRINF+1+3,4);
if(memcmp(cardsnr,UCardSnr,4)!=0)break;
}
if(CheckHMD(UCardSnr)==NOK)
{
if((fjxx[2]!=0x00)||(fjxx[3]!=0x00))
{fjxx[0]=0xb1;fjxx[1]=0xca;}
else
{memcpy(fjxx+2,SBH,2);}
for(i=0;i<3;i++){if(WriteIncAddIn(UCardSnr,fjxx)==OK)break;}
_Display(0,1,"异常卡,请与IC卡",16);_Display(0,2,"中心联系 ",16);
hkbz=1;
}
gobreak:
len=ReadLen();
if(len<0){ _PORT_Init (); _Clr(); _Display(0,1," 内存错误 ",16); _GetChar(); return; }
if(len>9000){ _PORT_Init ();_Clr();_Display(0,1," POS机已满 ",16); _GetChar(); return;}
if(len>8800){ _PORT_Init (); _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);memcpy(xzdate,str,3);xztime[0]=str[3]/16*10+str[3]%16;xztime[1]=str[4]/16*10+str[4]%16;
Data16ToData10(str,str);
Date6ToDate4(str,str);
memcpy(lsz_buf,str,4);
memcpy(lsz_buf+4,UCardNum,4);//用户卡号
memcpy(lsz_buf+8,SBH,2);//设备号
lsz_buf[10]=LineNum;//线路号
lsz_buf[11]=(LineNum/0x100)%0x10+card_type*0x10;
memcpy(lsz_buf+12,BusNum,2);//车辆自编号
memcpy(lsz_buf+14,OpCardNum,2);//承包人卡号
memcpy(lsz_buf+16,GLCardNum,3);//管理卡发行卡号或用户卡发行卡号
memcpy(lsz_buf+19,UCardSnr,4);//用户卡物理卡号
if(hkbz==1) {lsz_buf[23]=CardType*0x10+0x0f;UCardBal_1=0;UCardBal_2=0;ucardbal0=0;}
else lsz_buf[23]=CardType*0x10+2;//卡种和交易类型
//memcpy(lsz_buf+23,UCardBal1,2);
//memcpy(lsz_buf+25,UCardBal2,2);
lsz_buf[24]=(uchar)UCardBal_1;
lsz_buf[25]=UCardBal_1/0x100;
lsz_buf[26]=(uchar)UCardBal_2;
lsz_buf[27]=UCardBal_2/0x100;
lsz_buf[28]=(uchar)ucardbal0;
lsz_buf[29]=ucardbal0/0x100;
_Calc_crc(CRC16,30,lsz_buf,lsz_buf+30);
for(i=0;i<3;i++)if(WriteLSZ(lsz_buf,beginaddr,LSZLENGTH)==OK){break;}
else {_Clr();_Display(0,1," 内存错误 ",16);_GetChar();return;}
//_Display(0,3,"刷卡完成 ",16);
SaveCardNum(UCardNum,xztime);//UCardNoBak=UCardNo;//UCardBal_0=UCardBal_0_bak;
/*while(1) {
_pRecBuf0=0;if(ReadUCInc()==NOK)break;//{_delay_10ms(10);_pRecBuf0=0;if(ReadUCInc()==NOK)break; }// {_delay_10ms(10);_pRecBuf0=0;if(ReadUCInc()==NOK) break;}
uccardno=(ulong)_R232Buf0[CC_ADDRINF+1]+(ulong)_R232Buf0[CC_ADDRINF+2]*0x100l+(ulong)_R232Buf0[CC_ADDRINF+3]*0x10000l;
if(uccardno!=UCardNo) break;
}*/
}
_delay_10ms(50);P21=1;P36=0X01;_delay_10ms(50);//P34=0x01;P37=0X01;P37=1;_delay_10ms(10);//
}
void LSZ_CX()
{
long xdata len;
ulong xdata flag;
uchar xdata page,key,ret;
ulong xdata beginaddr,uccardno;
uchar xdata str[20],lszbuf[LSZLENGTH+1],tmp[10];
ulong xdata bh,zs;
uchar xdata buffer[16],buff[10];
uint i;
_Clr();
len=ReadLen();
if(len<=0){_Display(0,1," 机内没有纪录 ",16);_GetChar();return;}
flag=len;
while(1)
{
gost:
page=(flag-1)*LSZLENGTH/PAGELENGTH+LSZPAGE;beginaddr=(flag-1)*LSZLENGTH%PAGELENGTH;_FlashRead(page,beginaddr,LSZLENGTH,lszbuf);
if(ValidFlow(lszbuf)!=OK)goto gobr;
Date4ToDate6(lszbuf,tmp);
sprintf(str,"时间:%02d%02d%02d%02d%02d%02d",(ulong)tmp[0],(ulong)tmp[1],(ulong)tmp[2],(ulong)tmp[3],(ulong)tmp[4],(ulong)tmp[5]);
_Display(0,0,str,16);
uccardno=(ulong)lszbuf[4]+(ulong)lszbuf[5]*0x100l+(ulong)lszbuf[6]*0x10000l+(ulong)lszbuf[7]*0x1000000l;
sprintf(str,"表号:%lu ",uccardno);
_Display(0,1,str,16);
uccardno=(ulong)lszbuf[8]+(ulong)lszbuf[9]*0x100l+(ulong)lszbuf[10]*0x10000l+(ulong)lszbuf[11]*0x1000000l;
sprintf(str,"止码:%lu ",uccardno);
_Display(0,2,str,16);_Display(0,3,"*可按上下键翻页*",16);
gobr:
key=_GetChar();
if(key==KeyB_No)return;
else if(key==KeyB_Up) {flag--;if(flag<1) flag=1;}
else if(key==KeyB_Down) {flag++;if(flag>len) flag=len;}
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 gost;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;}
}
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_No)goto gost;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;}
}
_Clr();_Display(0,1,"正在修改请稍候..",16);
lszbuf[4]=(uchar)bh;lszbuf[5]= bh/0x100;lszbuf[6]= bh/0x10000;lszbuf[7]= bh/0x1000000;
lszbuf[8]=(uchar)zs;lszbuf[9]= zs/0x100;lszbuf[10]= zs/0x10000;lszbuf[11]= zs/0x1000000;
_Calc_crc(CRC16,14,lszbuf,lszbuf+14);
_FlashSectormodfiyPage(page,lszbuf,beginaddr,LSZLENGTH);
}
else ;
}
}
//-------------------------------------------------------------------------------------------------
uchar Get_Money(uchar *buff)//输入钱数
{
uchar xdata ret,ret1,buffer[7];
uint xdata i;
ulong xdata int1;
//uchar xdata str[20];
start:
memset(buffer,0,sizeof(buffer));
_Clr();
_Display(0,1,"请输入收费金额 ",16);
ret=_GetStr(0,2,buffer,5);
if (ret==0) {_Clr();_Display(0,1,"确定退出吗? ",16);_Display(0,1,"按<确定>退出 ",16);if(_GetChar()==KeyB_Yes)return NOK;goto start;}
ret=0;
ret1=5;
if((buffer[0]==0x2e)||(buffer[4]==0x2e)||(buffer[0]==0)) {_Clr();_Display(0,1,"非法数据,请重新输入\0",20); _GetChar();goto start; }
for(i=0;i<5;i++)
{
if((buffer[i]>='0')&&(buffer[i]<='9')||(buffer[i]==0)||(buffer[i]==0x2e))
{
if(buffer[i]==0x2e)
{
if((buffer[i+1]>='0')&&(buffer[i+1]<='9')&&(buffer[i+2]==0)||(buffer[i+2]=='0')) {ret=i+1;ret1=i+2;break;}
else {_Clr();_Display(0,1,"非法数据,请重新输入\0",20);_GetChar();goto start; }
}
if(buffer[i]==0) {ret1=i;break;}
}
else {_Clr();_Display(0,1,"非法数据,请重新输入\0",20);_GetChar();goto start;}
}
int1=0;
if(ret==0)
{
for(i=0;i<ret1;i++){int1=(int1*10+buffer[i]-0x30);}
int1=int1*10;
}
else
{
for(i=0;i<ret1-2;i++){int1=int1*10+buffer[i]-0x30;}
int1=int1*10+buffer[ret1-1]-0x30;
}
if(int1>8000){_Clr();_Display(0,1,"金额过大 ",16);_GetChar();goto start;}
else if(int1<=0){_Clr();_Display(0,1,"金额过大 ",16);_GetChar();goto start;}
buff[0]=(uchar)int1;buff[1]=(uchar)(int1/0x100);
UCardBal_0=int1;
return OK;
}
void Init_Sys()
{
char key;
_Clr();
_Display(0,0, "****清空文件****",16);
_Display(0,1, "文件系统初始化 ",16);
_Display(0,2, "会失掉所有文件 ",16);
_Display(0,3, "确定吗 ",16);
key=_GetChar();
if (key==KeyB_Yes)
{
_Clr();
display(3, "正在清空 ");
InitLSZ();
display(3, "清空完毕 ");
_GetChar();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -