📄 app.c
字号:
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 + -