基于单片机的IC卡读写 - 图文(2)

2019-04-22 08:32

//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所示:


基于单片机的IC卡读写 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:上林湖风景名胜区

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: