📄 app.c
字号:
#include "_POS.h"
//#include "AppSjk.h"
#include "AppData.h"
//#include "Modem.h"
//bit ZBHFlag=NOK;
extern int pRecBuf0;
extern int pRecBuf;
//extern uchar xdata _R232Buf0[R232MEMMAX+1];
//extern uchar xdata _S232Buf0[R232MEMMAX+1];
//extern uchar xdata _R232Buf[R232MEMMAX+1];
//extern uchar xdata _S232Buf[R232MEMMAX+1];
bit BalFlag=NOK;
extern bit sbhflag;
extern bit ZBHFlag;
extern bit GLKFlag;
extern uchar XLFlag;
uchar xdata CardType=0xff,PriceTab[6]={1,1,1,1,1,1};
ulong xdata UCardNo=0,UCardNoBak=0;
uint UCardBal_0;//交易金额
uint UCardBal_1=0;
uint UCardBal_1Bak=0;
uint UCardBal_2=0;
//uchar OpCardSnr[4];//操作卡物理卡号
uchar GLCardNum[4]={1,0,0,0};
uchar OpCardNum[2];//承包人卡号
uchar BusNum[2];//车辆自编号
uchar UCardSnr[4];//用户卡物理卡号
uchar UCardNum[4];//用户卡卡号(用于印刷号)
uchar xdata UCardBal1[2];//交易前余额
//uchar UCardBal2[2];//交易后余额
//uchar UCardBal[2];//交易金额
uint LineNum;
uchar xdata xzdate[3];
extern uchar SBH[2];
uchar xdata CardNumBuf[30+1];
uchar xdata NoCardNumBuf[6+1];
uchar xdata keyflag;
uchar Get_Money(uchar *buff);//输入钱数
extern uchar Get_Bal2(uchar num);
bit CheckDate(uchar date1[3],uchar date2[3])
{
if(date1[0]<date2[0])return OK;
if(date1[0]>date2[0])return NOK;
if(date1[1]<date2[1])return OK;
if(date1[1]>date2[1])return NOK;
// if(date1[2]>date2[2])return NOK;
else return OK;
}
void Data16ToData10(uchar *datain,uchar *dataout)
{
uchar i;
for(i=0;i<6;i++)
{
dataout[i]=(datain[i]/16)*10+datain[i]%16;
}
}
void Date6ToDate4(uchar *datein,uchar *dateout)
{
uchar xdata buff[4];
buff[0]=(datein[0]<<2)^(datein[1]>>2);
buff[1]=(datein[1]<<6)^(datein[2]<<1)^(datein[3]>>4);
buff[2]=(datein[3]<<4)^(datein[4]>>2);
buff[3]=(datein[4]<<6)^datein[5];
memcpy(dateout,buff,4);
}
void Date4ToDate6(uchar *datein,uchar *dateout)
{
uchar xdata buff[6];
buff[0]=datein[0]/4;
buff[1]=((datein[0]%4)*4)+(datein[1]/64);
buff[2]=(datein[1]%64)/2;
buff[3]=((datein[1]%2)*16)+(datein[2]/16);
buff[4]=((datein[2]%16)*4)+(datein[3]/64);
buff[5]=datein[3]%64;
memcpy(dateout,buff,6);
}
void display(char line,uchar *buff)
{
_Display(0,line-1,buff,strlen(buff));
}
/*bit TestMif()
{
uchar i,j;
for(i=0;i<5;i++) {
P37=0;_delay_10ms(100);_UART0_Init(57600);
_S232Buf0[CC_ADDRINF]=CC_TEST;_S232Buf0[CC_ADDRINF+1]=CC_TEST;_ComS2320(2);
_delay_1ms(100);
j=_ComR2320();
if(j==CC_TEST) return OK;
}
return NOK;
}*/
/*bit ReadUCPub()
{
uchar i,j;
for(i=0;i<2;i++) {
_S232Buf0[CC_ADDRINF]=CC_RUaO;_ComS2320(1);
for(j=0;j<5;j++) {
_delay_10ms(9);
if(_ComR2320()==CC_RUaO) return OK;
}
}
return NOK;
}*/
bit Get_Ver()
{
uchar i,j;
uchar xdata str[30];
ulong xdata ret1,ret2;
ret1=get_voltage();
P21=0x00;P36=0X0;_delay_10ms(50);_PORT_Init ();_UART0_Init(57600);_pRecBuf0=0;
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_READVER;_S232Buf0[CC_ADDRINF+1]=0;_ComS2320(2);
for(j=0;j<5;j++) {
_delay_10ms(50);
if(_ComR2320()==CC_READVER)
{
_Clr();
sprintf(str,"版本校验:%02x%02x ",(uint)_R232Buf0[CC_ADDRINF+2],(uint)_R232Buf0[CC_ADDRINF+3]);
_Display(0,0,str,16);
ret2=get_voltage();
sprintf(str,"电压1:%02.1fV ",(float)ret1/100.0);
_Display(0,1,str,16);
sprintf(str,"电压2:%02.1fV ",(float)ret2/100.0);
_Display(0,2,str,16);
_GetChar();P21=0x01;P36=0X01;_delay_10ms(50);
return OK;}
}
}
P21=0x01;P36=0X01;
return NOK;
}
bit ReadSnr()
{
uchar i,j;
//uchar xdata str[32];
for(i=0;i<2;i++) {
_S232Buf0[CC_ADDRINF]=CC_ReadSnr;_ComS2320(1);
// keyflag=_GetKey(50);
for(j=0;j<3;j++) {
_delay_10ms(12);
if(_ComR2320()==CC_ReadSnr) {return OK; }
}
}
return NOK;
}
bit ReadUCInc()
{
uchar i,j;
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_RUSERINC;_ComS2320(1);
// keyflag=_GetKey(50);
for(j=0;j<5;j++) {
_delay_10ms(8);
if(_ComR2320()==CC_RUSERINC) return OK;
}
}
return NOK;
}
bit ReadYPKInc()
{
uchar i,j;
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_RYPK;_ComS2320(1);
for(j=0;j<5;j++) {
_delay_10ms(11);
if(_ComR2320()==CC_RYPK) return OK;
}
}
return NOK;
}
bit WriteUCInc(uchar ucsnr[4],uchar opsnr[4],uchar optime[4],uchar opno[4],uint bal)
{
uchar i,j;
//uchar xdata str[32];
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_WUSERVAL;
memcpy(_S232Buf0+CC_ADDRINF+5 ,opsnr ,4 );
memcpy(_S232Buf0+CC_ADDRINF+9 ,optime ,4 );
memcpy(_S232Buf0+CC_ADDRINF+13,ucsnr ,4 );
memcpy(_S232Buf0+CC_ADDRINF+17,opno ,4 );
// _S232Buf0[CC_ADDRINF+20]=bal/0x100;
_S232Buf0[CC_ADDRINF+5]=(uchar)bal;
_S232Buf0[CC_ADDRINF+6]=bal/0x100;
_S232Buf0[CC_ADDRINF+7]=0xff-(uchar)bal;
_S232Buf0[CC_ADDRINF+8]=0xff-bal/0x100;
_S232Buf0[CC_ADDRINF+21]=(uchar)bal;
_S232Buf0[CC_ADDRINF+22]=bal/0x100;
// _pRecBuf0=0;
_ComS2320(23);
for(j=0;j<5;j++) {
_delay_10ms(33);
/* if (_pRecBuf0>0) {sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[0],(uint)_R232Buf0[1],(uint)_R232Buf0[2],(uint)_R232Buf0[3],(uint)_R232Buf0[4],(uint)_R232Buf0[5],(uint)_R232Buf0[6],(uint)_R232Buf0[7]);
_Display(0,0,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[8],(uint)_R232Buf0[9],(uint)_R232Buf0[10],(uint)_R232Buf0[11],(uint)_R232Buf0[12],(uint)_R232Buf0[13],(uint)_R232Buf0[14],(uint)_R232Buf0[5]);
_Display(0,1,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[16],(uint)_R232Buf0[17],(uint)_R232Buf0[18],(uint)_R232Buf0[19],(uint)_R232Buf0[20],(uint)_R232Buf0[21],(uint)_R232Buf0[22],(uint)_R232Buf0[23]);
_Display(0,2,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[24],(uint)_R232Buf0[25],(uint)_R232Buf0[26],(uint)_R232Buf0[27],(uint)_R232Buf0[28],(uint)_R232Buf0[29],(uint)_R232Buf0[30],(uint)_R232Buf0[31]);
_Display(0,3,str,16);_GetChar();}*/
if(_ComR2320()==CC_WUSERVAL) return OK;
}
}
return NOK;
}
bit WriteYPKInc(uchar ucsnr[4],uchar opsnr[4],uchar opno[4],uchar optime[2],uint times)
{
uchar i,j;
//uchar xdata str[32];
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_WYPKInc;
memcpy(_S232Buf0+CC_ADDRINF+1 ,ucsnr ,4 );
memcpy(_S232Buf0+CC_ADDRINF+5 ,opsnr ,4 );
memcpy(_S232Buf0+CC_ADDRINF+9,opno ,4 );
memcpy(_S232Buf0+CC_ADDRINF+13,optime ,2 );
_S232Buf0[CC_ADDRINF+5]=(uchar)times;
_S232Buf0[CC_ADDRINF+6]=times/0x100;
_S232Buf0[CC_ADDRINF+7]=0xff-(uchar)times;
_S232Buf0[CC_ADDRINF+8]=0xff-times/0x100;
_S232Buf0[CC_ADDRINF+15]=(uchar)times;
_S232Buf0[CC_ADDRINF+16]=times/0x100;
// _pRecBuf0=0;//memset(_R232Buf0,0,80);
_ComS2320(17);
for(j=0;j<5;j++) {
_delay_10ms(33);
/*if (_pRecBuf0>0) {sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[0],(uint)_R232Buf0[1],(uint)_R232Buf0[2],(uint)_R232Buf0[3],(uint)_R232Buf0[4],(uint)_R232Buf0[5],(uint)_R232Buf0[6],(uint)_R232Buf0[7]);
_Display(0,0,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[8],(uint)_R232Buf0[9],(uint)_R232Buf0[10],(uint)_R232Buf0[11],(uint)_R232Buf0[12],(uint)_R232Buf0[13],(uint)_R232Buf0[14],(uint)_R232Buf0[5]);
_Display(0,1,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[16],(uint)_R232Buf0[17],(uint)_R232Buf0[18],(uint)_R232Buf0[19],(uint)_R232Buf0[20],(uint)_R232Buf0[21],(uint)_R232Buf0[22],(uint)_R232Buf0[23]);
_Display(0,2,str,16);
sprintf(str,"%02x%02x%02x%02x%02x%02x%02x%02x",(uint)_R232Buf0[24],(uint)_R232Buf0[25],(uint)_R232Buf0[26],(uint)_R232Buf0[27],(uint)_R232Buf0[28],(uint)_R232Buf0[29],(uint)_R232Buf0[30],(uint)_R232Buf0[31]);
_Display(0,3,str,16);_GetChar();}*/
if(_ComR2320()==CC_WYPKInc) return OK;
}
}
return NOK;
}
bit WriteIncAddIn(uchar snr[4],uchar buf[16])
{
uchar i,j;
for(i=0;i<5;i++) {
_S232Buf0[CC_ADDRINF]=CC_WUserAddin;
memcpy(_S232Buf0+CC_ADDRINF+1 ,snr ,4 );
memcpy(_S232Buf0+CC_ADDRINF+5 ,buf ,16 );
_ComS2320(21);
for(j=0;j<5;j++) {
_delay_10ms(33);
if(_ComR2320()==CC_WUserAddin) return OK;
}
}
return NOK;
}
void jrjdms()
{
uchar key;
_Clr(); _Display(0,1,"节电模式,按任意",16);_Display(0,2,"键进入刷卡状态。",16);
while(1){key=_GetKey(111); if(key!=0) break;}
return;
}
bit CheckCardNum(uchar *khbuf,uchar *xztime)
{
uint i;
uint tm1,tm2;
for (i=0;i<5;i++)
{
if(memcmp(khbuf,CardNumBuf+(4-i)*6,4)==0)
{
tm1=(uint)CardNumBuf[(4-i)*6+4]*60+(uint)CardNumBuf[(4-i)*6+5];
tm2=(uint)xztime[0]*60+(uint)xztime[1];
if(tm2>tm1+5)return OK;
else return NOK;
}
}
return OK;
}
void SaveCardNum(uchar *khbuf,uchar *xztime)
{
uint i;
for (i=0;i<4;i++) { memcpy(CardNumBuf+i*6,CardNumBuf+i*6+6,6); }
memcpy(CardNumBuf+24,khbuf,4);
CardNumBuf[28]=xztime[0];
CardNumBuf[29]=xztime[1];
return ;
}
uchar ValidJH(uchar *tm)//检测CRC
{
//uchar xdata crc[2]; //check CRC
uchar xdata allff[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//_Calc_crc(CRC16,36,tm,crc);
//if((crc[0]!=tm[36])||(crc[1]!=tm[37])) return NOK;
if(memcmp(tm,allff,8)==0)return NOK;
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -