首页 基于单片机的IC卡读写修订版

基于单片机的IC卡读写修订版

举报
开通vip

基于单片机的IC卡读写修订版IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】基于单片机的IC卡读写修订版基于单片机的IC卡读写系统实验目的:1.学会并掌握可keil软件的使用;2.学会并掌握protues软件的使用;3.实现基于单片机的IC卡读写;4.通过实验巩固单片机相关知识和检验自身动手能力实验要求:掌握单片机相关知识,利用单片机控制和射频模块组合来读写IC卡,并实现软硬件的仿真模拟。lC卡读卡器以MCS-51系列单片机作为核心构成,主要用于家庭和机构门锁的开关,具有安全稳定的特...

基于单片机的IC卡读写修订版
IBMTstandardizationoffice【IBMT5AB-IBMT08-IBMT2C-ZZT18】基于单片机的IC卡读写修订版基于单片机的IC卡读写系统实验目的:1.学会并掌握可keil软件的使用;2.学会并掌握protues软件的使用;3.实现基于单片机的IC卡读写;4.通过实验巩固单片机相关知识和检验自身动手能力实验要求:掌握单片机相关知识,利用单片机控制和射频模块组合来读写IC卡,并实现软硬件的仿真模拟。lC卡读卡器以MCS-51系列单片机作为核心构成,主要用于家庭和机构门锁的开关,具有安全稳定的特点,在识别,删除,添加,自动开锁时,用于对IC卡进行读写操作。实验设备和仪器:1.89c51单片机最小系统2.射频模块RC522,智能IC卡以及其他附加电路实验内容:本次实验 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 是由小组五个成员共同完成基于单片机的IC卡读写系统并完成实物搭建和撰写实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 一:实验步骤:1.利用protues画电路图,电路图如图1所示:图1:方案一电路图2.模拟刷卡后显示,如图二:图2:方案一实现图3.根据电路图编写C语言代码:代码如下:#include"reg52.h"#include"main.h"#include"mfrc522.h"#include#include"LCD1602.h"#include"DS1302.h"#defineucharunsignedchar#defineuintunsignedintsbitSpeak=P2^7;//蜂鸣器sbitRED=P3^4;//红色指示灯sbitGREEN=P3^3;//绿色指示灯sbitRelay=P3^2;//继电器sbitKEY1=P1^3;//小时加按键sbitKEY2=P1^4;//小时减按键sbitKEY3=P1^5;//分钟加按键sbitKEY4=P1^6;//分钟减按键sbitKEY5=P1^7;//添加删除卡sbitKEY=P2^6;//开门unsignedcharidataRevBuffer[30];unsignedcharCard_Num;voidiccardcode();//系统初始化voidInitializeSystem()//IC卡初始化{PcdReset();//IC卡初始化PcdAntennaOff();//IC卡初始化PcdAntennaOn();//IC卡初始化M500PcdConfigISOType('A');//IC卡初始化}unsignedcharidataUID[4],Temp[4];//读取卡号数组unsignedcharTable[3];//显示数组unsignedcharNum;unsignedcharCount,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;//卡序号voidAuto_Reader(void)//自动寻卡{if(PcdRequest(0x52,Temp)==0)//找到卡{if(PcdAnticoll(UID)==0){Speak=0;delay_10ms(20);Speak=1;//蜂鸣器提示Table[0]=UID[0]/100+0x30;//卡号显示Table[1]=UID[0]/10%10+0x30;//卡号显示Table[2]=UID[0]%10+0x30;//卡号显示LCD1602_Disp_ZF(0x80+0x40,"Num:",16);//卡号显示LCD1602_Disp_ZF(0x84+0x40,Table,3);//卡号显示Count=UID[0];//判断卡是不是有效if((Count==Count1)||(Count==Count2)||(Count==Count3)||(Count==Count4)||(Count==Count5)){LCD1602_Disp_ZF(0x88+0x40,"Welcome",7);//卡有效GREEN=0;Relay=0;delay_10ms(200);Relay=1;GREEN=1;//绿灯亮,打开继电器C_flag=1;}else{LCD1602_Disp_ZF(0x88+0x40,"Error",7);//卡无效RED=0;delay_10ms(500);RED=1;//红灯亮C_flag=2;}delay_10ms(200);LCD1602_Disp_ZF(0x80+0x40,"PleaseSwipecard",16);//显示初始界面}}}ucharDS1302_Table[7]={0};//读取时间值voidDisplay_LCD2(ucharDis_Hour,ucharDis_Min,ucharDis_Sec)//显示时间值{ucharDis_Table[8]="11:22:33";Dis_Table[0]=Dis_Hour/10+0x30;Dis_Table[1]=Dis_Hour%10+0x30;Dis_Table[3]=Dis_Min/10+0x30;Dis_Table[4]=Dis_Min%10+0x30;Dis_Table[6]=Dis_Sec/10+0x30;Dis_Table[7]=Dis_Sec%10+0x30;LCD1602_Disp_ZF(0x85,Dis_Table,8);//显示时间值}voidRun_DS1302(void){ucharsec,min,hour,day,month,week,year;v_W1302(0x8f,0);sec=bcdtodec(uc_R1302(0x81));//读出DS1302中的秒v_W1302(0x8f,0);min=bcdtodec(uc_R1302(0x83));//读出DS1302中的分v_W1302(0x8f,0);hour=bcdtodec(uc_R1302(0x85));//读出DS1302中的小时v_W1302(0x8f,0);day=bcdtodec(uc_R1302(0x87));//读出DS1302中的日v_W1302(0x8f,0);month=bcdtodec(uc_R1302(0x89));//读出DS1302中的月v_W1302(0x8f,0);week=bcdtodec(uc_R1302(0x8b));//读出DS1302中的星期v_W1302(0x8f,0);year=bcdtodec(uc_R1302(0x8d));//读出DS1302中的年DS1302_Table[0]=year;DS1302_Table[1]=month;DS1302_Table[2]=day;DS1302_Table[3]=week;DS1302_Table[4]=hour;DS1302_Table[5]=min;DS1302_Table[6]=sec;Display_LCD2(DS1302_Table[4],DS1302_Table[5],DS1302_Table[6]);//显示时间值}voidmain(void){InitializeSystem();LCD1602_init();//Money_1=x24c02_read(0X01);//x24c02_write(0X03,Money_3);LCD1602_Disp_ZF(0x80,"Time:",5);//0123456789abcdefLCD1602_Disp_ZF(0x80+0x40,"PleaseSwipecard",16);//LCD1602_Disp_ZF(0x80+0x40,"Num:",4);//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,"Welcome",7);//卡有效GREEN=0;Relay=0;delay_10ms(200);Relay=1;GREEN=1;//绿灯亮,打开继电器delay_10ms(200);LCD1602_Disp_ZF(0x80+0x40,"PleaseSwipecard",16);//显示初始界面}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)//添加卡{//0123456789abcdefLCD1602_Disp_ZF(0x80+0x40,"RegisterCard!",16);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)//删除卡{//0123456789abcdefLCD1602_Disp_ZF(0x80+0x40,"CleanCard!",16);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,"PleaseSwipecard",16);C_flag=0;while(!KEY5);}}//////////////////////}}voidiccardcode(){unsignedcharcmd;unsignedcharstatus;cmd=RevBuffer[0];switch(cmd){case1://Haltthecard//终止卡的操作status=PcdHalt();;RevBuffer[0]=1;RevBuffer[1]=status;break;case2://Request,Anticoll,Select,returnCardType(2bytes)+CardSerialNo(4bytes)//寻卡,防冲突,选择卡返回卡类型(2bytes)+卡系列号(4bytes)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;case3://防冲突读卡的系列号MLastSelectedSnrstatus=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;case4://选择卡SelectCard//status=PcdSelect(MLastSelectedSnr);if(status!=MI_OK){RevBuffer[0]=1;RevBuffer[1]=status;break;}RevBuffer[0]=3;RevBuffer[1]=status;break;case5://KeyloadingintotheMFRC500'sEEPROM//status=PcdAuthState(RevBuffer[1],RevBuffer[3],DefaultKey,MLastSelectedSnr);//校验卡密码RevBuffer[0]=1;RevBuffer[1]=status;break;case6:RevBuffer[0]=1;RevBuffer[1]=status;break;case7:RevBuffer[0]=1;RevBuffer[1]=status;break;case8://Readthemifarecard//读卡status=PcdRead(RevBuffer[1],&RevBuffer[2]);if(status==0){RevBuffer[0]=17;}else{RevBuffer[0]=1;}RevBuffer[1]=status;break;case9://Writethemifarecard//写卡下载密码status=PcdWrite(RevBuffer[1],&RevBuffer[2]);RevBuffer[0]=1;RevBuffer[1]=status;break;case10:PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);RevBuffer[0]=1;RevBuffer[1]=status;break;case12://参数设置PcdBakValue(RevBuffer[1],RevBuffer[2]);RevBuffer[0]=1;//contactRevBuffer[1]=0;break;}}4.实物验证结果如图4所示:图4:实物验证结果实物验证可以实现IC卡的读写,由于每个开发板不同,相比仿真程序,对实物验证程序进行了略微的修改,最小系统的LCD1602口不能使用使用外接杜邦线,为了稳定最终选择重新字节焊接板子,最终能达到要求。方案二:实验步骤:1.电路图如图5所示:图5:方案一电路图2.刷卡前后显示以及操作,如下图6:图6:方案一实现图3.根据电路图编写C语言部分主要代码:代码如下:#include"reg52.h"#include"main.h"#include"uart.h"#include"timer.h"#include"rc522.h"#include"ctrl.h"#include"lcd12864.h"#include"beep.h"#include"key.h"#include"EEPROM.h"voidinit_all(void){EA=0;PT1=1;init_timer();Serial_init();init_rc522();lcd_init();EEPROM_READ(0,Card_SN_BUF,4);EEPROM_READ(1,Card_SN_BUF1,4);EEPROM_READ(2,Card_SN_BUF2,4);EEPROM_READ(3,Card_SN_BUF3,4);EEPROM_READ(4,Card_SN_BUF4,4);EEPROM_READ(5,Card_SN_BUF5,4);EEPROM_READ(6,Card_NUM_BUF,1);EEPROM_READ(7,KEY_BUF,8);EA=1;}voidmain(void){INT8Ukey;relay_OFF();Delay_ms(500);init_all();LED_BLINK_1();display(0,0,7);display(1,0,8);display(2,0,9);display(3,0,10);Delay_ms(500);Delay_ms(500);Delay_ms(500);Delay_ms(500);Delay_ms(500);display_clear_line(0);display_clear_line(1);display_clear_line(2);display_clear_line(3);display(0,0,0);while(1){key=key_scan();if(key==12)if(states>0)states--;elsestates=0;if(key==13)if(++states>3)states=3;ctrl_process();}}#include#include#defineucharunsignedchar#defineuintunsignedint#defineLCD_dataP0//数据口sbitLCD_RS=P2^2;//寄存器选择输入sbitLCD_RW=P2^1;//液晶读/写控制sbitLCD_EN=P2^0;//液晶使能控ucharcodedis0[]="IC卡读写系统";ucharcodedis1[]="1.IC卡输入";ucharcodedis2[]="2.密码输入:8位";ucharcodedis3[]="3.IC卡登记";ucharcodedis4[]="4.密码设置:8位";ucharcodedis5[]="成功";ucharcodedis6[]="失败";ucharcodedis7[]="桂林电子科技大学";ucharcodedis8[]="控制 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 ";ucharcodedis9[]="接口实验";ucharcodedis10[]="MADEBY:司亚";voiddelay(intms)//延时xms{while(ms--){uchari;for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}voiddelayNOP()//延时4us{_nop_();_nop_();_nop_();_nop_();}bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(LCD_data&0x80);LCD_EN=0;return(result);}voidwrite_cmd(ucharcmd){unsignedintK=20000;while(lcd_busy()&&K--);//预防没插LCD时候停在这LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();LCD_data=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}voidlcd_wdat(uchardat){unsignedintK=20000;while(lcd_busy()&&K--);LCD_RS=1;LCD_RW=0;LCD_EN=0;LCD_data=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}voidlcd_init(){write_cmd(0x36);delay(5);write_cmd(0x30);delay(5);write_cmd(0x0C);delay(5);write_cmd(0x01);delay(5);}voidlcd_pos(ucharX,ucharY){ucharpos;if(X==0){X=0x80;}elseif(X==1){X=0x90;}elseif(X==2){X=0x88;}elseif(X==3){X=0x98;}pos=X+Y;write_cmd(pos);}voiddisplay_all(){uchari;lcd_pos(0,0);//第一行显示数字0~9i=0;while(dis0[i]!='\0'){lcd_wdat(dis0[i]);//显示字母i++;}lcd_pos(1,0);//第二行显示字母i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);//显示字母i++;}lcd_pos(2,0);//第三行显示文字i=0;while(dis2[i]!='\0'){lcd_wdat(dis2[i]);i++;}lcd_pos(3,0);//第四行显示广工无线电社i=0;while(dis3[i]!='\0'){lcd_wdat(dis3[i]);i++;}}voiddisplay(uchara,ucharb,ucharc){uchari;lcd_pos(a,b);i=0;switch(c){case0:while(dis0[i]!='\0'){lcd_wdat(dis0[i]);i++;}break;case1:while(dis1[i]!='\0'){lcd_wdat(dis1[i]);i++;}break;case2:while(dis2[i]!='\0'){lcd_wdat(dis2[i]);i++;}break;case3:while(dis3[i]!='\0'){lcd_wdat(dis3[i]);i++;}break;case4:while(dis4[i]!='\0'){lcd_wdat(dis4[i]);i++;}break;case5:while(dis5[i]!='\0'){lcd_wdat(dis5[i]);i++;}break;case6:while(dis6[i]!='\0'){lcd_wdat(dis6[i]);i++;}break;case7:while(dis7[i]!='\0'){lcd_wdat(dis7[i]);i++;}break;case8:while(dis8[i]!='\0'){lcd_wdat(dis8[i]);i++;}break;case9:while(dis9[i]!='\0'){lcd_wdat(dis9[i]);i++;}break;case10:while(dis10[i]!='\0'){lcd_wdat(dis10[i]);i++;}break;default:break;}}voiddisplay2(uchara,ucharb,uchar*p,ucharnum){uchari;lcd_pos(a,b);for(i=0;i
本文档为【基于单片机的IC卡读写修订版】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
淑萍
暂无简介~
格式:doc
大小:399KB
软件:Word
页数:0
分类:
上传时间:2021-10-18
浏览量:0