基于单片机的IC卡读写.doc

上传人:知****量 文档编号:12107958 上传时间:2022-04-23 格式:DOC 页数:32 大小:1.68MB
返回 下载 相关 举报
基于单片机的IC卡读写.doc_第1页
第1页 / 共32页
基于单片机的IC卡读写.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《基于单片机的IC卡读写.doc》由会员分享,可在线阅读,更多相关《基于单片机的IC卡读写.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、- -基于单片机的IC卡读写系统实验目的:1.学会并掌握可keil软件的使用;2.学会并掌握protues软件的使用;3.实现基于单片机的IC卡读写;4.通过实验稳固单片机相关知识和检验自身动手能力实验要求:掌握单片机相关知识,利用单片机控制和射频模块组合来读写IC卡,并实现软硬件的仿真模拟。lC卡读卡器以MCS-51系列单片机作为核心构成,主要用于家庭和机构门锁的开关,具有平安稳定的特点,在识别,删除,添加,自动开锁时,用于对IC卡进展读写操作。实验设备和仪器:1.89c51单片机最小系统2.射频模块RC522,智能IC卡以及其他附加电路实验容:本次实验设计是由小组五个成员共同完成基于单片机

2、的IC卡读写系统并完成实物搭建和撰写实验报告。方案一:实验步骤:1.利用protues画电路图,电路图如图1所示:图1:方案一电路图2.模拟刷卡后显示,如图二:图2:方案一实现图3.根据电路图编写C语言代码:代码如下:#include reg52.h#include main.h#include mfrc522.h#include #include LCD1602.h#include DS1302.h#define uchar unsigned char#define uint unsigned intsbit Speak = P27;/蜂鸣器sbit RED = P34; /红色指示灯sbi

3、t GREEN = P33;/绿色指示灯sbit Relay = P32; /继电器sbit KEY1 = P13;/小时加按键sbit KEY2 = P14; /小时减按键sbit KEY3 = P15; /分钟加按键sbit KEY4 = P16; /分钟减按键sbit KEY5 = P17; /添加删除卡sbit KEY = P26; /开门unsigned char idata RevBuffer30;unsigned char Card_Num; void iccardcode();/系统初始化void InitializeSystem()/IC卡初始化 PcdReset(); /I

4、C卡初始化 PcdAntennaOff(); /IC卡初始化 PcdAntennaOn(); /IC卡初始化 M500PcdConfigISOType( A );/IC卡初始化unsigned char idata UID4,Temp4;/读取卡号数组unsigned char Table3;/显示数组unsigned char Num;unsigned char Count,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;/卡序号void Auto_Reader(void) /自动寻卡 if(PcdRequest(0x52,Temp)=0)

5、/找到卡 if(PcdAnticoll(UID)=0) Speak=0;delay_10ms(20);Speak=1;/蜂鸣器提示Table0=UID0/100+0x30; /卡号显示Table1=UID0/10%10+0x30; /卡号显示Table2=UID0%10+0x30; /卡号显示LCD1602_Disp_ZF(0x80+0x40,Num: ,16); /卡号显示LCD1602_Disp_ZF(0x84+0x40,Table,3); /卡号显示Count = UID0; /判断卡是不是有效if(Count=Count1)|(Count=Count2)|(Count=Count3)|

6、(Count=Count4)|(Count=Count5)LCD1602_Disp_ZF(0x88+0x40,Wele,7); /卡有效GREEN = 0;Relay=0;delay_10ms(200);Relay=1;GREEN = 1; /绿灯亮,翻开继电器C_flag=1;elseLCD1602_Disp_ZF(0x88+0x40,Error ,7);/卡无效RED = 0;delay_10ms(500);RED = 1; /红灯亮C_flag=2;delay_10ms(200); LCD1602_Disp_ZF(0x80+0x40,Please Swipecard,16);/显示初始界

7、面uchar DS1302_Table7=0;/读取时间值void Display_LCD2(uchar Dis_Hour,uchar Dis_Min,uchar Dis_Sec)/显示时间值uchar Dis_Table8=11:22:33;Dis_Table0 = Dis_Hour/10+0x30;Dis_Table1 = Dis_Hour%10+0x30;Dis_Table3 = Dis_Min/10+0x30;Dis_Table4 = Dis_Min%10+0x30;Dis_Table6 = Dis_Sec/10+0x30;Dis_Table7 = Dis_Sec%10+0x30;LC

8、D1602_Disp_ZF(0x85,Dis_Table,8);/显示时间值void Run_DS1302(void)uchar sec, 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,

9、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_Table0=year; DS1302_Table1=month; DS1302_Table2=day; DS1302_T

10、able3=week; DS1302_Table4=hour; DS1302_Table5=min; DS1302_Table6=sec;Display_LCD2(DS1302_Table4,DS1302_Table5,DS1302_Table6);/显示时间值void main(void) InitializeSystem();LCD1602_init();/Money_1=x24c02_read(0X01);/x24c02_write(0X03,Money_3);LCD1602_Disp_ZF(0x80,Time:,5); /0123456789abcdefLCD1602_Disp_ZF(

11、0x80+0x40,Please Swipecard,16);/LCD1602_Disp_ZF(0x80+0x40,Num:,4);/ISP_ERASE(0x2c00);/注意:字节编程时必须要先要擦除整个扇区/for(i=0;i0) states-; else states=0; if(key=13) if(+states3) states=3; ctrl_process(); #include #include #define uchar unsigned char#define uint unsigned int#define LCD_data P0 /数据口sbit LCD_RS =

12、P22; /存放器选择输入sbit LCD_RW = P21; /液晶读/写控制sbit LCD_EN = P20; /液晶使能控uchar code dis0= IC卡读写系统 ;uchar code dis1=1.IC卡输入 ;uchar code dis2=2.密码输入:8位 ;uchar code dis3=3.IC卡登记 ;uchar code dis4=4.密码设置:8位 ;uchar code dis5=成功 ;uchar code dis6=失败 ;uchar code dis7=电子科技大学;uchar code dis8= 控制工程 ;uchar code dis9= 接口

13、实验 ;uchar code dis10= MADE BY:司亚 ;void delay(int ms) /延时xmswhile(ms-) uchar i; for(i=0;i250;i+) _nop_();_nop_();_nop_();_nop_();void delayNOP() /延时4us _nop_(); _nop_(); _nop_(); _nop_();bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(LCD_data&0x80); LCD_EN =

14、 0; return(result); void write_cmd(uchar cmd) unsigned int K=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; void lcd_wdat(uchar dat) unsigned int K=20000; while(lcd_busy() & K-); LCD_R

15、S = 1; LCD_RW = 0; LCD_EN = 0; LCD_data= dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; void lcd_init() write_cmd(0x36); delay(5); write_cmd(0x30); delay(5); write_cmd(0x0C); delay(5); write_cmd(0x01); delay(5);void lcd_pos(uchar X,uchar Y)uchar pos; if (X=0) X=0x80; else if (X=1) X=0x90; else

16、 if (X=2) X=0x88; else if (X=3) X=0x98; pos = X+Y ; write_cmd(pos);void display_all() uchar i; lcd_pos(0,0); /第一行显示数字09 i = 0; while(dis0i != 0) lcd_wdat(dis0i); /显示字母 i+; lcd_pos(1,0); /第二行显示字母 i = 0; while(dis1i != 0) lcd_wdat(dis1i); /显示字母 i+; lcd_pos(2,0); /第三行显示文字 i = 0; while(dis2i != 0) lcd_w

17、dat(dis2i); i+; lcd_pos(3,0); /第四行显示广工无线电社 i = 0; while(dis3i != 0) lcd_wdat(dis3i); i+; void display(uchar a,uchar b,uchar c) uchar i; lcd_pos(a,b); i = 0; switch(c) case 0: while(dis0i != 0) lcd_wdat(dis0i); i+; break; case 1:while(dis1i != 0) lcd_wdat(dis1i);i+;break; case 2: while(dis2i != 0) lc

18、d_wdat(dis2i); i+; break;case 3: while(dis3i != 0) lcd_wdat(dis3i);i+; break; case 4: while(dis4i != 0)lcd_wdat(dis4i); i+;break; case 5: while(dis5i != 0) lcd_wdat(dis5i); i+; break; case 6: while(dis6i != 0) lcd_wdat(dis6i); i+; break; case 7: while(dis7i != 0) lcd_wdat(dis7i); i+; break; case 8:

19、while(dis8i != 0) lcd_wdat(dis8i); i+; break; case 9: while(dis9i != 0) lcd_wdat(dis9i); i+;break; case 10: while(dis10i != 0) lcd_wdat(dis10i); i+; break; default :break; void display2(uchar a,uchar b,uchar *p,uchar num) uchar i; lcd_pos(a,b); for(i=0;inum;i+) lcd_wdat(pi); void display_clear_line(

20、uchar a) uchar i; lcd_pos(a,0); for(i=0;i16;i+) lcd_wdat( ); 4.实物验证结果如图7所示:图7:实物验证结果实物验证可以实现IC卡的读写加密,使用LCD12864中文字幕可以更方便读取信息,对实物验证程序进展了略微的修改,第一次买的射频模块是坏的浪费了太多时间。换了新板子,最终能到达要求。心得体会:通过本次的实验,小组成员都发现自己的知识面还是非常的狭窄,缺少的东西也有很多,在网上查找一些相关的资料以及在图书馆借阅了几本关于单片机方面的书籍,慢慢的懂了一些关于编程和仿真方面的问题。通过这次实验,成员们都发现各自还是存在一些问题。这些不经意的东西虽然看起来不起眼,但是在试验中是不可无视的问题。这次试验,硬件调试让我遇到的困难有很多,例如一开场在编程的时候,IC卡在射频模块上无法读取以及上位机无法显示,失败之后吸取经历最终在同学帮助下实现了读写。这次的实验,学习到的容也有很多,不求在一个试验中就能让我学到很多的东西,但在以后的学习中,会慢慢的一点点改良,熟练的理解以及掌握相关的知识,希望能在这方面学到的越来越多。- - word.zl-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁