- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.
.
基于单片机的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 reg52.h
#include main.h
#include mfrc522.h
#include string.h
#include LCD1602.h
#include DS1302.h
#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 char Count,Countf,Count1,Count2,Count3,Count4,Count5,C_flag;//卡序号
void Auto_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
文档评论(0)