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

2019-04-22 08:32

基于单片机的IC卡读写系统

实验目的:

1.学会并掌握可keil软件的使用; 2.学会并掌握protues软件的使用; 3.实现基于单片机的IC卡读写;

4.通过实验巩固单片机相关知识和检验自身动手能力

实验要求:

掌握单片机相关知识,利用单片机控制和射频模块组合来读写IC卡,并实现软硬件的仿真模拟。lC卡读卡器以MCS-51系列单片机作为核心构成,主要用于家庭和机构门锁的开关,具有安全稳定的特点,在识别,删除,添加,自动开锁时,用于对IC卡进行读写操作。

实验设备和仪器:

1.89c51单片机最小系统

2.射频模块RC522,智能IC卡以及其他附加电路

实验内容:

本次实验设计是由小组五个成员共同完成基于单片机的IC卡读写系统并完成实物搭建和撰写实验报告。 方案一:实验步骤:

1.利用protues画电路图,电路图如图1所示:

图1:方案一电路图

2.模拟刷卡后显示,如图二:

图2:方案一实现图

3.根据电路图编写C语言代码: 代码如下:

#include \#include \#include \#include

#include \#include \

#define uchar unsigned char #define uint unsigned int

sbit Speak = P2^7;//蜂鸣器 sbit RED = P3^4; //红色指示灯 sbit GREEN = P3^3;//绿色指示灯 sbit Relay = P3^2; //继电器

sbit KEY1 = P1^3;//小时加按键 sbit KEY2 = P1^4; //小时减按键 sbit KEY3 = P1^5; //分钟加按键 sbit KEY4 = P1^6; //分钟减按键 sbit KEY5 = P1^7; //添加删除卡

sbit KEY = P2^6; //开门

unsigned char idata RevBuffer[30]; unsigned char Card_Num; void iccardcode(); //系统初始化

void InitializeSystem()//IC卡初始化 {

PcdReset(); //IC卡初始化

PcdAntennaOff(); //IC卡初始化 PcdAntennaOn(); //IC卡初始化

M500PcdConfigISOType( 'A' );//IC卡初始化 }

unsigned char idata UID[4],Temp[4];//读取卡号数组 unsigned char Table[3];//显示数组 unsigned char Num; unsigned Count,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;//卡序号void Auto_Reader(void) //自动寻卡 {

if(PcdRequest(0x52,Temp)==0) //找到卡 {

if(PcdAnticoll(UID)==0) {

char Speak=0;delay_10ms(20);Speak=1;//蜂鸣器提示

Table[0]=UID[0]/100+0x30; //卡号显示 Table[1]=UID[0]/10+0x30; //卡号显示 Table[2]=UID[0]+0x30; //卡号显示

LCD1602_Disp_ZF(0x80+0x40,\卡号显示

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,\卡有效

GREEN = 0;Relay=0;delay_10ms(200);Relay=1;GREEN = 1; //绿灯亮,打开继电器

C_flag=1; } else {

LCD1602_Disp_ZF(0x88+0x40,\卡无效 RED = 0;delay_10ms(500);RED = 1; //红灯亮 C_flag=2; }

delay_10ms(200); LCD1602_Disp_ZF(0x80+0x40,\Swipecard\显示初始界面

} } }

uchar DS1302_Table[7]={0}; //读取时间值

void Display_LCD2(uchar Dis_Hour,uchar Dis_Min,uchar Dis_Sec)//显示时间值 {

uchar Dis_Table[8]=\

Dis_Table[0] = Dis_Hour/10+0x30; Dis_Table[1] = Dis_Hour+0x30;

Dis_Table[3] = Dis_Min/10+0x30; Dis_Table[4] = Dis_Min+0x30;

Dis_Table[6] = Dis_Sec/10+0x30;

Dis_Table[7] = Dis_Sec+0x30;

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(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]);//显示时间值 }

void main(void) {

InitializeSystem(); LCD1602_init();

//Money_1=x24c02_read(0X01); //x24c02_write(0X03,Money_3); LCD1602_Disp_ZF(0x80,\

//0123456789abcdef

LCD1602_Disp_ZF(0x80+0x40,\


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

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

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

马上注册会员

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