📄 main.c
字号:
{ // 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]==0x55) //进入卡
{
for(i=0;i<15;i++)
{
rbuf[i]=0;
}
PcdWrite(1,rbuf);
PcdWrite(1,rbuf);
return 1;
}
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_ddcard()
{
// uchar pa[6],pkeys[12],rbuf[16];
uchar status;
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) //选定卡
{
PcdHalt();
return 1;
}
}
return 0;
}
return 0;
}
/****************************************************************************
* *
* Function: main *
* *
* Input: - *
* Output: - *
* *
* Description: *
****************************************************************************/
void main(void)
{
unsigned char idata i,x,keytemp[5];
unsigned char keynum=0,delay_time=5;
bit car_type=0,bancar=0;
AUXR = 0x00 ;
SCONF=0X03;
// dog=!dog;
init_com();
EA=1;
ES=1 ;
ADDR=0XD2;
i=Rd1307(0);
if (Rd1307(0) & 0x80)
{
i &= 0x7F;
Wr1307(0,i);
}
Init_1307(0x90); //*** Init Real Time Clock *** */
//Wr1307(20,0);
//Wr1307(21,0);
if(Rd1307(19)!=0X55)///读设备地址
{
ADDR=0XD2;
Wr1307(19,0x55);
Wr1307(20,0xd2);
}
else
{
ADDR=Rd1307(20);
}
lage_car=ADDR;
beep(1);
sprintf(ms," %3u",lage_car);
SendStr_MAX7219(ms);
Delay100ms(10); //beep
if(Rd1307(21)==0xff)
lage_car=0;
else
lage_car=Rd1307(20);
if(Rd1307(22)==0xff)
small_car=0;
else
small_car=Rd1307(21);
// Flash_Sector_Erase (0);
Rc500Ready();
EX1 = 1 ;//时钟中断
IT1=1;
EA=1;
while(1)
{
//for(i=0;i<100;i++)
//{
if(num_suss)//设置号码成功
{
num_suss=0;
beep(3);
}
if(time_set)//设置时间成功
{
time_set=0;
beep(3);
}
if(tflag)
{
tflag=0;
GetTime(time.a);
//sprintf(ms,"%02bx>%02bx1777",time.a[5],time.a[6]);
//ms[8]=0x30+ Get_key();
//SendStr_MAX7219(ms);
}
switch(mainstate)
{
case 0: //待机状态
if (Cmdok) //通讯
{
Cmdok = FALSE;
RecvReady = FALSE;
SendReady = FALSE;
cmd_execution();
SendReady = TRUE ; //发起始字
TI = 1;
}
//sprintf(ms," %3u %3u",lage_car,small_car);
// ES=0;
if(Read_card())
{
in_outFlg =0;//进场标志
beep(1);
Keyinput_ok=1;
}
//ES=1;
if(link)
{
for(i=0;i<10;i++)
ms[i]=ledtem[i];
}
else
{
sprintf(ms," %3u %3u",lage_car,small_car);
}
SendStr_MAX7219(ms);
x=Get_key();
if(x!=0xff)
{ beep(1);
keynum=0;
for(i=0;i<5;i++)
{
keytemp[i]=0x20;
}
if(x<10)
{
sprintf(ms,"%02bx>%02bx 0",time.a[4],time.a[5]);
SendStr_MAX7219(ms);
mainstate=1;
}
else
{
if(x==CAR)
{
car_type=1;
sprintf(ms,"%02bx>%02bxd ",time.a[4],time.a[5]);
SendStr_MAX7219(ms);
mainstate=1;
}
if(x==0x0b)//交班建//菜单
{
mainstate=2;
keyin=0;
//ban=1;
sprintf(ms,"%02bx>%02bx 0",time.a[4],time.a[5]);
SendStr_MAX7219(ms);
}
if(x==0x0d)//车位信息建//外进
{
sta=1;
}
}
}
break;
case 1: //输入
// GetTime(time.a);
sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]);
x=Get_key();
if((x>=0)&&(x<10))
{
if(car_type)ms[5]=0x64;
else ms[5]=0x20;
keytemp[keynum]=x+0x30;
keynum++;
if( keynum==4) keynum=4;
for(i=0;i<5;i++)
{
ms[i+6]=keytemp[i];
}
// SendStr_MAX7219(ms);
beep(1);
}
if(x==ESC) //清零
{
for(i=5;i<10;i++)
ms[i]=0x20;
for(i=0;i<5;i++)
{
keytemp[i]=0x20;
}
beep(2);
//SendStr_MAX7219(ms);
car_type=0;
keynum=0;
}
if(x==ENTER) //确认
{
// Keyinput_ok=1;
for(i=0;i<5;i++)
{
ms[i+5]=0x20;
}
beep(1);
for(i=1;i<5;i++)
{
input_pc[i]=keytemp[i-1];
if(car_type)input_pc[0]='d';
else input_pc[0]='x';
if(input_pc[i]==0x20)input_pc[i]=0;
}
//mainstate=0;
delay_time=5;
while(1)
{
memcpy(ms, input_pc,5);
memcpy(&ms[5],&time.a[0],6);
// ES=0;
if( write_card(ms))//写卡成功
{
in_outFlg =1;//进场标志
beep(1);
Keyinput_ok=1;
}
//ES=1;
sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]);
if(tflag)
{
delay_time--;
if(delay_time==0){ mainstate=0; beep(1);break;}
tflag=0;
}
for(i=0;i<5;i++)
{
ms[i+5]=0x20;
}
ms[9]=delay_time;
SendStr_MAX7219(ms);
if (Cmdok) //通讯
{
Cmdok = FALSE;
RecvReady = FALSE;
SendReady = FALSE;
cmd_execution();
SendReady = TRUE ; //发起始字
TI = 1;
}
}
}
if(x==CAR) //大车
{
car_type=1;
ms[5]=0x64;
for(i=0;i<5;i++)
{
ms[i+6]=keytemp[i];
}
beep(1);
SendStr_MAX7219(ms);
}
break;
case 2:
sprintf(ms,"%02bx>%02bx0",time.a[4],time.a[5]);
x=Get_key();
if(x==0)//***** 下班
{
sprintf(ms,"%02bx>%02bx0 ",time.a[4],time.a[5]);
beep(1);
keyin=1;
}
if(x==1)//******上班
{
sprintf(ms,"%02bx>%02bx1 ",time.a[4],time.a[5]);
beep(1);
keyin=2;
}
if(x==ENTER) //确认
{
if((bancar==1)&&( keyin!=0))
{
ban=1;
bancar=0;
mainstate=0;
beep(1);
}
else
{
beep(2);
}
}
if(x==ESC) //清零
{
beep(1);
mainstate=0;
keyin=0;
bancar=0;
}
if(Read_ddcard())
{
bancar=1;
beep(1);
}
break;
default:
mainstate=0;
break;
}
if (Cmdok) //通讯
{
Cmdok = FALSE;
RecvReady = FALSE;
SendReady = FALSE;
cmd_execution();
SendReady = TRUE ; //发起始字
TI = 1;
}//Delay100ms(5);
/*ISPFD=0X55;
ISPFD=0XAA;
ISPFD=0X55;
SCONF=0X04; //OPEN ISP
ISPFAH=0X00;
ISPFAL= 00;
ISPFD=0X30+i;
ISPC=0XA0;*/
/* for(j=0;j<10;j++)
ms[j]=j;
Flash_Write (0, ms,10);
SCONF=0X08;
ISPC=0X20;
ms[4]=RemainRec[i]+0x30;
ms[8]=0x38;
SendStr_MAX7219(ms);
Delay100ms(7);
}*/
}
}//end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -