//LCD1602_Disp_ZF(0x80+0x40,\
//ISP_ERASE(0x2c00); //注意:字节编程时必须要先要擦除整个扇区 //for(i=0;i<255;i++)
// ISP_PROGRAM(0x2c00+i, 0x00);
while (1) {
////////////////////////// if(!KEY) {
Speak=0;delay_10ms(20);Speak=1;//蜂鸣器提示
LCD1602_Disp_ZF(0x88+0x40,\卡有效
GREEN = 0;Relay=0;delay_10ms(200);Relay=1;GREEN = 1; //绿灯亮,打开继电器
delay_10ms(200); LCD1602_Disp_ZF(0x80+0x40,\Swipecard\显示初始界面 }
Run_DS1302(); //时间显示 //delay_10ms(200); if(!KEY1) //调节小时加 {
delay_10ms(50);
if(!KEY1) //调节小时加 {
DS1302_Table[4]++; //调节小时加
Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0); //调节小时加 } }
if(!KEY2) //调节小时减 {
delay_10ms(50);
if(!KEY2) //调节小时减
{ //调节小时减 DS1302_Table[4]--; //调节小时减
Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0);//调节小时减
} }
//////////////////////////////////
if(!KEY3) //调节分钟加 {
delay_10ms(50); //调节分钟加 if(!KEY3) {
DS1302_Table[5]++; //调节分钟加
Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0); //调节分钟加
} }
if(!KEY4) //调节分钟减 {
delay_10ms(50); //调节分钟减 if(!KEY4) //调节分钟减 {
DS1302_Table[5]--; //调节分钟减
Write_DS1302Init(0,0,0,0,DS1302_Table[4],DS1302_Table[5],0); //调节分钟减 } }
if(!KEY5) //添加删除卡 {
delay_10ms(50);
if(!KEY5) //添加删除卡 {
if(C_flag==2) //添加卡 {
//0123456789abcdef
LCD1602_Disp_ZF(0x80+0x40,\ Countf++;
if(Countf==6)Countf=1;
if(Countf==1) Count1 = Count;//记忆卡号 if(Countf==2) Count2 = Count; //记忆卡号 if(Countf==3) Count3 = Count; //记忆卡号 if(Countf==4) Count4 = Count; //记忆卡号 if(Countf==5) Count5 = Count;//记忆卡号
}
if(C_flag==1)//删除卡 {
//0123456789abcdef
LCD1602_Disp_ZF(0x80+0x40,\ if(Count==Count1)Count1=0;//删除卡号 if(Count==Count2)Count2=0; //删除卡号 if(Count==Count3)Count3=0; //删除卡号 if(Count==Count4)Count4=0; //删除卡号 if(Count==Count5)Count5=0; //删除卡号
}
Speak=0;delay_10ms(200);Speak=1;
LCD1602_Disp_ZF(0x80+0x40,\
C_flag =0; while(!KEY5); } }
////////////////////// } }
void iccardcode() {
unsigned char cmd; unsigned char status;
cmd = RevBuffer[0]; switch(cmd) {
case 1: // Halt the card //终止卡的操作 status= PcdHalt();; RevBuffer[0]=1;
RevBuffer[1]=status; break;
case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
// 寻卡,防冲突,选择卡 返回卡类型(2 bytes)+ 卡系列号(4 bytes)
status= PcdRequest(RevBuffer[1],&RevBuffer[2]); if(status!=0) {
status= PcdRequest(RevBuffer[1],&RevBuffer[2]); if(status!=0) {
RevBuffer[0]=1;
RevBuffer[1]=status; break; } }
RevBuffer[0]=3; RevBuffer[1]=status; break;
case 3: // 防冲突 读卡的系列号 MLastSelectedSnr
status = PcdAnticoll(&RevBuffer[2]); if(status!=0) {
RevBuffer[0]=1; RevBuffer[1]=status; break; }
//memcpy(MLastSelectedSnr,&RevBuffer[2],4); RevBuffer[0]=5;
RevBuffer[1]=status; break;
case 4: // 选择卡 Select Card //status=PcdSelect(MLastSelectedSnr); if(status!=MI_OK) {
RevBuffer[0]=1; RevBuffer[1]=status; break; }
RevBuffer[0]=3;
RevBuffer[1]=status; break;
case 5: // Key loading into the MF RC500's EEPROM
//status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校验卡密码 RevBuffer[0]=1;
RevBuffer[1]=status; break; case 6:
RevBuffer[0]=1;
RevBuffer[1]=status; break; case 7:
RevBuffer[0]=1;
RevBuffer[1]=status; break;
case 8: // Read the mifare card // 读卡
status=PcdRead(RevBuffer[1],&RevBuffer[2]); if(status==0)
{RevBuffer[0]=17;} else
{RevBuffer[0]=1;}
RevBuffer[1]=status; break;
case 9: // Write the mifare card // 写卡 下载密码
status=PcdWrite(RevBuffer[1],&RevBuffer[2]); RevBuffer[0]=1;
RevBuffer[1]=status; break; case 10:
PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]); RevBuffer[0]=1; RevBuffer[1]=status; break;
case 12: // 参数设置
PcdBakValue(RevBuffer[1], RevBuffer[2]); RevBuffer[0]=1; //contact RevBuffer[1]=0; break; } }
4.实物验证结果如图4所示: