📄 main.c
字号:
else
{
CALL_isr_T0() ;
};
break;
case RECV_ADDR3:
if (c == 0x49)//Pos_ID[3])
{
//ED_LED = ~RED_LED;
En485 = SEND;
//Ir_En = SEND;
SBUF = DLE ;
RecvState = RECV_DATA_DLE_ETX;
DataDleReceived = FALSE;
Index = 0;
Cmdok = FALSE;
while( !TI );
TI = FALSE;
En485 = RECV;
//Ir_En = RECV;
START_T0(T_533_ms);
}
else
{
CALL_isr_T0() ;
};
break;
case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX and answer DLE
if (c == DLE)
{
if (!DataDleReceived) //如果上一个不是DLE 丢掉
{
DataDleReceived = TRUE;
RecvState = RECV_DATA_DLE_ETX;
START_T0(T_533_ms);
break;
}
else //如果上一个是DLE
{
DataDleReceived = FALSE; //留下
};
}
else if (c == ETX)
{
if (DataDleReceived) //如果是结束标记 处理
{
DataDleReceived = FALSE;
bcc = 0;
for (i = 0; i < Index; i++)
{
bcc ^= SerBuffer[i];
};
if( bcc == 0)
{
En485 = SEND;
//Ir_En = SEND;
Cmdok = TRUE;
SBUF = DLE ;
while( !TI );
TI = FALSE;
En485 = RECV;
//Ir_En = RECV;
}
else
{
En485 = SEND;
//Ir_En = SEND;
Cmdok = FALSE;
SBUF = NAK ;
while( !TI );
TI = FALSE;
En485 = RECV;
//Ir_En = RECV;
};
break;
}
else
{
DataDleReceived = FALSE; //如果不是结束标记 留下
};
};
if (Index < SERBUFLEN) //将数据写入SerBuffer[]
{
SerBuffer[Index++] = c;
};
RecvState = RECV_DATA_DLE_ETX;
START_T0(T_533_ms);
break;
case RECV_DLE: //Recieve answer from HOST
if ( c == DLE)
{
En485 = SEND;
//Ir_En = SEND;
//Delay50us(2);
for (i = 0; i < (3 + SerBuffer[2] +1); i++) //send data
{
SBUF = SerBuffer[i];
while (!TI);
TI = FALSE;
if ( SerBuffer[i] == DLE ) //send DLE two
{
SBUF = DLE;
while (!TI);
TI = FALSE;
};
};
SBUF = DLE; //send END
while (!TI);
TI = FALSE;
SBUF = ETX;
while (!TI);
TI = FALSE;
RecvState = RECV_DLE_OR_NAK ;
START_T0(T_533_ms);
En485 = RECV;
//Ir_En = RECV;
}
else
{
CALL_isr_T0() ;
};
break;
case RECV_DLE_OR_NAK: //Recieve answer from HOST
if ( c == DLE)
{
SendOk = TRUE;
SendReady = FALSE;
RecvReady = TRUE;
RecvState = RECV_STX;
}
else
{
SendOk = FALSE;
SendReady = TRUE;
RecvReady = FALSE;
CALL_isr_T0() ;
};
En485 = RECV;
//Ir_En = RECV;
break;
default:
CALL_isr_T0() ;
break;
};//end of case
};//end of if(RecvReady)
};//end of if(RI)
if ( TI && !RI )
{
TI = 0 ;
if ( SendReady )
{
SendReady = FALSE ;
bcc = SerBuffer[0]; //计算BCC
for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
{
bcc = bcc ^ SerBuffer[i] ;
};
SerBuffer[SerBuffer[2]+3] = bcc;
En485 = SEND;
//Ir_En = SEND;
//Delay50us(2);
SBUF = STX ; //发送起始位}
RecvReady = TRUE ;
RecvState = RECV_DLE ; //准备接收应答
// GREEN_LED = ~GREEN_LED;
while(!TI) ;
TI = FALSE ;
En485 = RECV;
//Ir_En = RECV;
START_T0(T_533_ms) ; //chao shi
};
};
}
//****************************************************************************
void SetPosNum(unsigned char xdata *dat)
{
//ByteWrite_Check (124,dat[0]);
Wr1307(20,dat[0]);
ADDR=dat[0];
num_suss=1;
}
/****************************************************************************
* cmd_execution(); *
* Function: *
* *
* Input: *
* Output: - *
* *
* Description: *
****************************************************************************/
void cmd_execution(void)
{ unsigned char len ,i;//, adr ;
//unsigned int e;
//unsigned char idata size , tt[2];
//WatchDog();
len = SerBuffer[2] ;
SerBuffer[2] = 0 ;
link=1;
switch ( SerBuffer[1] )
{
case 0x80: //Write time
SetTime(&SerBuffer[3]);
time_set=1;
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x81: //green LED
//if ( SerBuffer[3] == 1) {LED_GREEN = 1;}
// else if( SerBuffer[3] == 0) { LED_GREEN = 0;};
//lage_car=((int)SerBuffer[3])*256+SerBuffer[4];
///if(lage_car>999)lage_car=999;
//small_car=((int)SerBuffer[5])*256+SerBuffer[6];
//if(small_car>999)small_car=999;
for(i=0;i<10;i++)
{
ledtem[i]= SerBuffer[3+i];
}
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x82: //red RED
// if ( SerBuffer[3] == 1) {LED_RED = 1;}
// else if( SerBuffer[3] == 0) { LED_RED = 0;};
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x83: //Transfer Record
// recordint.chrX[1]=SerBuffer[4];
// recordint.chrX[0]=SerBuffer[5];
// Status = TransferRecord(SerBuffer[3],recordint.intX);
if(Keyinput_ok)
{
Keyinput_ok=0;
for(i=0;i<5;i++)
SerBuffer[3+i]= input_pc[i];
if( in_outFlg )
{
SerBuffer[8]=0x88;//进入标志
}
else
{
SerBuffer[8]=0x99;
}
memcpy(&SerBuffer[9],psnr,4);//卡号
mainstate=0; //数据取走
}
else
{
for(i=0;i<10;i++)
SerBuffer[3+i]=0;
if(ban)
{
ban=0;
if(keyin==1)
{
SerBuffer[8]=0xaa;
}
if(keyin==2)
{
SerBuffer[8]=0xcc;
}
memcpy(&SerBuffer[9],psnr,4);//卡号
}
if(sta)
{
SerBuffer[8]=0xbb;
sta=0;
}
}
SerBuffer[1] =0;// Status;
SerBuffer[2] = 10;
break;
case 0x85: //Config FeeRate
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x86: //return ocuppy or vacance
SerBuffer[2] = 0;
break;
case 0x87: //Set Meter Number
/* MeterNum.chrX[3] = SerBuffer[3];
MeterNum.chrX[2] = SerBuffer[4];
MeterNum.chrX[1] = SerBuffer[5];
MeterNum.chrX[0] = SerBuffer[6]; */
SetPosNum(&SerBuffer[3]); //add
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
default:
SerBuffer[1] = 250; //command error
SerBuffer[2] = 0;
break;
};
}
//*********************************************************************
void beep(unsigned char times)
{
char i;
if(times==1)
{
outbyte=outbyte|0X10;
SendStr_MAX7219(ms);
Delay1ms(20);
outbyte=outbyte&0XEF;
SendStr_MAX7219(ms);
return ;
}
for(i=0;i<times;i++)
{
outbyte=outbyte|0X10;
SendStr_MAX7219(ms);
Delay1ms(30);
outbyte=outbyte&0XEF;
SendStr_MAX7219(ms);
Delay1ms(20);
}
}
//***********************************************************8
unsigned char write_card(unsigned char *p)
{
uchar pa[6],pkeys[12],rbuf[16];
uchar status,i;
status=PcdRequest(PICC_REQIDL);//PICC_REQALL); //寻卡
if(status!=MI_OK)
{
status=PcdRequest(PICC_REQIDL);//PICC_REQALL);
}
if(status==MI_OK)
{ // printf("request ok\n ");
if((status=PcdAnticoll(psnr))==MI_OK) //防冲撞
{ if((status=PcdSelect(psnr))==MI_OK) //选定卡
{
pa[0]=0xff;
pa[1]=0xff;
pa[2]=0xff;
pa[3]=0xff;
pa[4]=0xff;
pa[5]=0xff;
if((status=ChangeCodeKey(pa,pkeys))==MI_OK) //转换密钥格式
{ if((status=PcdAuthKey(pkeys))==MI_OK) //传送密钥到RC500FIFO
{
status=PcdAuthState(PICC_AUTHENT1A,3,psnr); //验证密钥
// printf("auth ok\n ");
}
status=PcdRead(1,rbuf); //读出第0块的内容
if(status==0)
{ // printf("read sector 0 ok \n");
//sprintf(ms,"1234567890");
if(rbuf[0]==00) //空卡
{
for(i=15;i>0;i--)
{
p[i]=p[i-1];
}
p[0]=0x55;
PcdWrite(1,p);
PcdWrite(1,p);
}
else //已经进入的卡
{
return 0;
}
PcdRead(1,rbuf); //读出第0块的内容
if( memcmp(rbuf,p,12)==0)
{
PcdHalt();
return 1;
}
else
return 0;
//SendStr_MAX7219(ms);
// Delay100ms(5);
//printf("\n");
}
}
return 0;
}
return 0;
}
return 0;
}
return 0;
}
//***********************************************************8
unsigned char Read_card()
{
uchar pa[6],pkeys[12],rbuf[16];
uchar status,i;
status=PcdRequest(PICC_REQIDL);//PICC_REQALL); //寻卡
if(status!=MI_OK)
{
status=PcdRequest(PICC_REQIDL);//PICC_REQALL);
}
if(status==MI_OK)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -