📄 duxiexitongrc500.c
字号:
//PCON = 0x80;
//REN = 1;
//TI = 0; //发送中断标志位置零
///RI = 0; //接收中断标志位置零
//TR1 = 1;
//TR0=1;
NCS = FALSE;
P14=1;
ET0=1;
ES=0;
EA = 1;
while(1)
{
RI=0;
//Commu_test();
start:
for (i=0;i<30;i++) //循环次数超过最大数据长度
{
//RI=0;
while(!RI); //当没有串口信息时等待
shuju[i]=SBUF; //启动速度初值
if (shuju[i]==0x81) i--; //高手标志
RI=0;
//判断接收的数据,根据不同情况进行不同处理
//如果开头不是0x3c就返回重新接收数据
if (shuju[0]!=0x3c)goto start;
// sen(i);
//如果第二个字节不是合法字符就返回重新接收数据
if ( (i==1) && ( shuju[1]!=0x04 && shuju[1]!=0x08 && shuju[1]!=0x0a && shuju[1]!=0x13 && shuju[1]!=0x03 )) {goto start;};
//根据第三个字节进行不同的处理
if( (i>=1) && (shuju[1]==0x04 ))
{
//如果第3位不是0x01 就返回重新接收数据
if ( (i==2) && (shuju[2]!=0x00 && shuju[2]!=0x01 )) goto start;
//如果第3位是0x00 就进行通讯测试,问RC500工作正常吗?
if ( (i>=2) &&(shuju[2]==0x00) )
{
//如果数据指令正确则进行通讯测试,否则重新接收数据
if ( (i==7) && ((shuju[3]==0x60) && (shuju[4]==0x00) && (shuju[5]==0x00) && (shuju[7]==0x0d)))
{
//通讯测试返回信息
Commu_test();//1
for (j=0;j<5;j++)
sen(tongxunceshixinxi[j]);
goto start;
//goto tongxunceshi;
}
else if (i==7)
{sen(0x22); goto start;};
};
//如果第3位是0x01 就寻卡、关闭卡片或者读卡操作
if ( (i>=2) &&(shuju[2]==0x01) )
{
if ( (i==3) && ((shuju[3]!=0x70) && (shuju[3]!=0x66) && (shuju[3]!=0x68))) goto start;
//寻卡
if ( (i>=3) &&(shuju[3]==0x70))
{
//如果数据指令正确则进行寻卡操作,否则重新接收数据
if ( (i==7) && ( (shuju[5]==0x00) && (shuju[7]==0x0d)))
{ Commu_test();
xunka();//2
if (CardStatus)
{ // for (j=0;j<9;j++)
//sen(xunkaxinxi[j]);
sendata[0]=0x3C;
sendata[1]=0x05;
sendata[2]=UID[0];
sendata[3]=UID[1];
sendata[4]=UID[2];
sendata[5]=UID[3];
sendata[6]=0x00;
sendata[7]=0;
for(j=0;j<6;j++) sendata[7]^=sendata[j];
sendata[8]=0x0d;
for(j=0;j<9;j++)
sen(sendata[j]);
//DelayMS(10);
//P14=0;
//DelayMS(1000); //控制小喇叭
//P14=1;
//DelayMS(10);
//P14=0;
//DelayMS(1000); //控制小喇叭
//P14=1;
goto start;
}
else
for(j=0;j<5;j++)
sen(cuowufanhui[j]);
goto start;
//for (j=0;j<9;j++)
//sen(xunkaxinxi[j]);
//goto xunka;
// goto start;
}
else if (i==7)
{ goto start;};
};
//读卡
if ( (i>=3) &&(shuju[3]==0x66))
{ //if ( (i==4) && (shuju[4]!=0x01 && shuju[4]!=0x04 )) goto start;
//如果数据指令正确则进行寻卡操作,否则重新接收数据
// if ( (i>=4) &&(shuju[4]==0x01) ){//
if ( (i==7) && ( (shuju[5]==0x00) && (shuju[7]==0x0d)))
{ //Commu_test();
HL_Read(buffer,shuju[4],KEYA);
//MIF_READ(buffer,shuju[4]);
if (CardStatus)
{ sendata[0]=0x3C;
sendata[1]=0x12;
sendata[2]=0x00;
sendata[3]=buffer[0];
sendata[4]=buffer[1];
sendata[5]=buffer[2];
sendata[6]=buffer[3];
sendata[7]=buffer[4];
sendata[8]=buffer[5];
sendata[9]=buffer[6];
sendata[10]=buffer[7];
sendata[11]=buffer[8];
sendata[12]=buffer[9];
sendata[13]=buffer[10];
sendata[14]=buffer[11];
sendata[15]=buffer[12];
sendata[16]=buffer[13];
sendata[17]=buffer[14];
sendata[18]=buffer[15];
sendata[19]=0;
for(j=0;j<18;j++) sendata[19]^=sendata[j];
sendata[20]=0x0d;
for(j=0;j<21;j++)
sen(sendata[j]);
//Powerdown();
//playone();
goto start;
}
else
for(j=0;j<6;j++)
sen(cuowufanhui[j]);
//playtwo();
goto start;
//for (j=0;j<21;j++)
//sen(dukaxinxi[j]);
//goto start;
//goto duka;
}else if (i==7)
{ goto start;};
//};
//if ( (i>=4) &&(shuju[4]==0x04) )
// { if ( (i==7) && ( (shuju[5]==0x00) && (shuju[7]==0x0d)))
// {
// for (j=0;j<21;j++)
// sen(dukaxinxi2[j]);
//goto duka;
//}
//else if (i==7)
//{ goto start;};
// };
};
//关闭卡片
if ( (i>=3) &&(shuju[3]==0x68))
{
//如果数据指令正确则进行关卡操作,否则重新接收数据
if ( (i==7) && ( (shuju[4]==0x00) && (shuju[5]==0x00) && (shuju[6]==0x51) && (shuju[7]==0x0d)))
{
TurnOff_Card();
if (CardStatus)
{sendata[0]=0x3C;
sendata[1]=0x02;
sendata[2]=0x00;
sendata[3]=0x00;
sendata[4]=0;
for(j=0;j<3;j++) sendata[4]^=sendata[j];
sendata[5]=0x0D;
for(j=0;j<6;j++)
sen(sendata[j]);
goto start;
}
else
for(j=0;j<5;j++)
sen(cuowufanhui[j]);
goto start;
//for (j=0;j<6;j++)
//sen(gonggongxinxi[j]);
// goto start;
//goto guanbikapian;
}
else if (i==7)
{sen(0x22); goto start;};
};
};
};
if( (i>=1) && (shuju[1]==0x08 ))
//密码验证程序
{
//如果数据指令正确则进行密码验证操作,否则重新接收数据
if ( (i==11) && ( (shuju[2]==0x01) && (shuju[3]==0x6a) && (shuju[4]==0x00) && (shuju[11]==0x0d)))
{
//for (j=6;j<10;j++)
//UID[j]=shuju[j];
Commu_test();
xunka();//2
xiamima(shuju[5],shuju[4]);
if(shuju[5]>=0x10)
{shuju[5]=shuju[5]%16;}
mimarenzheng(UID, shuju[5],shuju[4]);
if (CardStatus)
{sendata[0]=0x3C;
sendata[1]=0x02;
sendata[2]=0x00;
sendata[3]=0x00;
sendata[4]=0;
for(j=0;j<3;j++) sendata[4]^=sendata[j];
sendata[5]=0x0D;
for(j=0;j<6;j++)
sen(sendata[j]);
goto start;
}
else
for(j=0;j<5;j++)
sen(cuowufanhui[j]);
goto start;
//for (j=0;j<6;j++)
//sen(gonggongxinxi[j]);
//goto start;;
}
else if (i==11 && shuju[i+1] != 0x81) //高手标志
{sen(0x22); goto start;};
};
if( (i>=1) && (shuju[1]==0x0a ))
//下载密码
{
//如果数据指令正确则进行下载密码操作,否则重新接收数据
if ( (i==13) && ( (shuju[2]==0x01) && (shuju[3]==0x69) && (shuju[4]==0x00) && (shuju[13]==0x0d)))
{
Commu_test();
//xunka();//2
//Select_Card();
// buffer[0]=shuju[6]^0xf0; buffer[1]=shuju[7]^0xf0;
// buffer[2]=shuju[8]^0xf0;
// buffer[3]=shuju[9]^0xf0;
// buffer[4]=shuju[10]^0xf0;
// buffer[5]=shuju[11]^0xf0;
// for(j=0;j<6;j++)
//sen(buffer[j]);
//for(j=0;j<12;j++)
// buffer[j]=0x0f;
xiamima(shuju[5],shuju[4]);
if (CardStatus)
{sendata[0]=0x3C;
sendata[1]=0x02;
sendata[2]=0x00;
sendata[3]=0x00;
sendata[4]=0;
for(j=0;j<3;j++) sendata[4]^=sendata[j];
sendata[5]=0x0D;
for(j=0;j<6;j++)
sen(sendata[j]);
goto start;
}
else
for(j=0;j<5;j++)
sen(cuowufanhui[j]);
// for (j=0;j<6;j++)
// sen(gonggongxinxi[j]);
//goto xiazaimima;
goto start;
}
else if (i==13 && shuju[i+1] != 0x81) //高手标志
{ goto start;};
};
if( (i>=1) && (shuju[1]==0x13 ))
//写卡
{
//如果数据指令正确则进行写卡操作,否则重新接收数据
if ( (i==22) && ( (shuju[2]==0x01) && (shuju[3]==0x67) && (shuju[22]==0x0d)))
{
HL_Active(shuju[4],KEYA);
buffer[0]=shuju[5];
buffer[1]=shuju[6];
buffer[2]=shuju[7];
buffer[3]=shuju[8];
buffer[4]=shuju[9];
buffer[5]=shuju[10];
buffer[6]=shuju[11];
buffer[7]=shuju[12];
buffer[8]=shuju[13];
buffer[9]=shuju[14];
buffer[10]=shuju[15];
buffer[11]=shuju[16];
buffer[12]=shuju[17];
buffer[13]=shuju[18];
buffer[14]=shuju[19];
buffer[15]=shuju[20];
MIF_Write(buffer,shuju[4]);
if (CardStatus)
{ sendata[0]=0x3C;
sendata[1]=0x02;
sendata[2]=0x00;
sendata[3]=0x00;
sendata[4]=0;
for(j=0;j<3;j++) sendata[4]^=sendata[j];
sendata[5]=0x0D;
for(j=0;j<6;j++)
sen(sendata[j]);
// xiangsheng();
goto start;
}
else
for(j=0;j<6;j++)
sen(cuowufanhui[j]);
goto start;//*/
// for (j=0;j<6;j++)
//sen(gonggongxinxi[j]);
goto start;
}
else if (i==22 && shuju[i+1] != 0x81) //高手标志
{sen(0x22); goto start;};
};
if( (i>=1) && (shuju[1]==0x03 ))
{
//如果第3位不是0x01 就返回重新接收数据
if ( (i==2) &&(shuju[2]!=0x01) ) goto start;
//如果第3位是0x01 就根据情况进行处理
if ( (i>=2) &&(shuju[2]==0x01) )
{
if ( (i>=3) &&(shuju[3]==0x6d))
//如果第4位是0x6d,则说明是亮灯指令
{
// if (shuju[6]!=0x0d)goto start;
// if (shuju[6]==0x0d)
// {
for (j=0;j<6;j++)
sen(gonggongxinxi[j]);
goto start;
//goto liangdeng
// }
//else if (i==6 && shuju[i+1] != 0x81) //高手标志
// { goto start;};
};
if ( (i>=3) &&(shuju[3]==0x6b))
//如果第4位是0x6b,则说明是响声指令
{
// if (shuju[6]!=0x0d)goto start;
//if (shuju[6]==0x0d)
//{
xiangsheng();
goto start;
//for (j=0;j<6;j++)
//sen(gonggongxinxi[j]);
goto start;
//goto xiangsheng;
//}
//else if (i==6 && shuju[i+1] != 0x81) //高手标志
// { goto start;};
};
if ( (i>=3) &&(shuju[3]==0x72))
//如果第4位是0x72,则说明是关卡和唤醒指令
{
if ( (i==6) &&(shuju[6]!=0x0d))goto start;
if ( (i==6) && (shuju[6]==0x0d))
{
if (shuju[4]!=0x00 && shuju[4]!=0x01 )goto start;
if (shuju[4]==0x00)
{
for (j=0;j<6;j++)
sen(gonggongxinxi[j]);
goto start;
// goto guansheshepin;
};
if (shuju[4]==0x01)
{
for (j=0;j<6;j++)
sen(gonggongxinxi[j]);
goto start;
//goto huanxing;
};
};
};
};
};
};
};
} //main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -