基于单片机的ic卡读写

上传人:小** 文档编号:90681403 上传时间:2019-06-15 格式:DOC 页数:19 大小:1.63MB
返回 下载 相关 举报
基于单片机的ic卡读写_第1页
第1页 / 共19页
基于单片机的ic卡读写_第2页
第2页 / 共19页
基于单片机的ic卡读写_第3页
第3页 / 共19页
基于单片机的ic卡读写_第4页
第4页 / 共19页
基于单片机的ic卡读写_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《基于单片机的ic卡读写》由会员分享,可在线阅读,更多相关《基于单片机的ic卡读写(19页珍藏版)》请在金锄头文库上搜索。

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; /红色指示灯sb

3、it 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(); /

4、IC卡初始化 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)=

5、0) /找到卡 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=Count

6、3)|(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;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+0

8、x30;LCD1602_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(

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

10、1302_Table3=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_Di

11、sp_ZF(0x80+0x40,Please Swipecard,16);/LCD1602_Disp_ZF(0x80+0x40,Num:,4);/ISP_ERASE(0x2c00);/注意:字节编程时必须要先要擦除整个扇区/for(i=0;i255;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;G

12、REEN = 1; /绿灯亮,打开继电器delay_10ms(200); LCD1602_Disp_ZF(0x80+0x40,Please Swipecard,16);/显示初始界面Run_DS1302(); /时间显示/delay_10ms(200);if(!KEY1) /调节小时加delay_10ms(50);if(!KEY1) /调节小时加DS1302_Table4+; /调节小时加Write_DS1302Init(0,0,0,0,DS1302_Table4,DS1302_Table5,0); /调节小时加if(!KEY2) /调节小时减delay_10ms(50);if(!KEY2) /调节小时减/调节小时减DS1302_Table4-; /调节小时减Write_DS1302Init(0,0,0,0,DS1302_Table4,DS1302_Table5,0);/调节小时减/if(!KEY3) /调节分钟加delay_10ms(50); /调节分钟加if(!KEY3)DS1302_Table5+; /调节分钟加Write_DS1302Init(0,0,0,0,DS1302_Table4,DS1302_Table5,0); /调节分钟加if(!KEY4)/

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

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号