首页 RFID打卡器和射频卡设计报告

RFID打卡器和射频卡设计报告

举报
开通vip

RFID打卡器和射频卡设计报告RFID打卡器和射频卡设计报告 序号:_______ 第四届电子设计竞赛设计报告 参赛题目 RFID打卡器和射频卡设计 队伍名称 逐梦远航 2011 年 06月11日 1 摘 要 【摘要】:随着科学技术的发展和现代生活的需要,电子钱包的使用 越来越频繁,特别是非接触式IC卡的使用。本文主要介绍RFID读卡器的 设计。本设计大体分为 个工作过程:(1)下位机通过菜单选择脱机工作或 联机工作。(2)使用MFRC500对S50射频卡进行读取。(3)上位机发送命令 控制下位机及接收下位机反馈回来的数据。(4...

RFID打卡器和射频卡设计报告
RFID打卡器和射频卡设计报告 序号:_______ 第四届电子设计竞赛设计报告 参赛 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目 RFID打卡器和射频卡设计 队伍名称 逐梦远航 2011 年 06月11日 1 摘 要 【摘要】:随着科学技术的发展和现代生活的需要,电子钱包的使用 越来越频繁,特别是非接触式IC卡的使用。本文主要介绍RFID读卡器的 设计。本设计大体分为 个工作过程:(1)下位机通过菜单选择脱机工作或 联机工作。(2)使用MFRC500对S50射频卡进行读取。(3)上位机发送命令 控制下位机及接收下位机反馈回来的数据。(4)下位机使用12864液晶显示 器显示必要的菜单和数据。 【关键词】: RFID、读卡器、S50射频卡、下位机、上位机 ABSTRAC 【ABSTRAC】: As science and technology development and the needs of modern life, electornic wallet is being used more and more frequent, especially the non-contact IC card. This paper describes the design of RFID reader. The design can be divided into working processes: (1) lower computer through the menu choose to work offline or online. (2) the use of MFRC500 RF card reader for S50. (3) control the host computer to send commands and receive the next crew came back the next crew feedback data. (4) 12864 lower computer use LCD menu and show the necessary data. 【Key words】:RFID、Card Reader、S50 RF Card、MCU、PC 目 录 第一章 前 言 ..................................................................................................................................... 1 第二章 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 论证与比 较 ................................................................................................................. 2 2.1 微控制器选 择 .................................................................................................................... 2 2.2 显示模块选 择 ................................................................................................................... 2 2.3 读卡器模块方案选 择 ....................................................................................................... 2 2.4 天线方案选 择 ................................................................................................................... 3 第三章 系统方案设 计 ..................................................................................................................... 4 3.1 总体系统设 计 .................................................................................................................... 4 3.2 系统各部分方 案 ................................................................................................................ 4 3.2.1 主控模 块 ................................................................................................................. 4 3.2.2 读卡部分模 块 ......................................................................................................... 4 3.2.3 显示警告模 块 ......................................................................................................... 4 3.2.4 通信下载模 块 ......................................................................................................... 4 第四章 硬件设 计 ............................................................................................................................. 5 4.1 下位机部 分 ........................................................................................................................ 5 4.1.1 主控电 路 ................................................................................................................. 5 4.1.2 显示模 块 ................................................................................................................. 6 4.1.3 通信下载模 块 ......................................................................................................... 6 4.1.4 电源模 块 ................................................................................................................. 7 4.2 MFRC500模块电 路 ........................................................................................................... 7 4.3 RFID读卡器天 线 ............................................................................................................... 8 第五章 软件设 计 ............................................................................................................................. 9 5.1 下位机软件设 计 ................................................................................................................ 9 5.1.1主函数部 分 .............................................................................................................. 9 5.1.2 串口通信部 分 ....................................................................................................... 10 5.1.3 MFRC模块功 能 .................................................................................................... 10 5.1.4 液晶显示程 序 ....................................................................................................... 11 5.2 上位机设 计 ...................................................................................................................... 12 5.2.1 MFC核心代 码 ...................................................................................................... 12 5.2.2 上位机主窗口设 置 ............................................................................................... 14 第六章 系统功能、调试与指标参 数 ........................................................................................... 15 6.1 系统功 能 .......................................................................................................................... 15 6.2 系统调 试 .......................................................................................................................... 15 6.2.1 硬件部分调 试 ....................................................................................................... 15 6.2.2 下位机调 试 ........................................................................................................... 16 6.2.3 上位机调 试 ........................................................................................................... 17 6.3 系统指标参 数 .................................................................................................................. 17 6.3.1 工作频 率 ............................................................................................................... 17 6.3.2 识别距 离 ............................................................................................................... 17 6.3.3 天线计 算 ............................................................................................................... 18 6.3.4 输出阻 抗 ............................................................................................................... 19 第七章 设计总 结 ........................................................................................................................... 20 1 参考文 献:..................................................................................................................................... 21 附录A.电路原理 图 ........................................................................................................................ 22 附录B.源程 序 ................................................................................................................................ 24 2 第一章 前言 随着科学技术的发展和电子商务的需要,电子钱包的技术也在不断地 改进和提高。根据不同的环境和要求,又制造出不同需要的IC卡,主要分为接触式IC卡和非接触式IC卡。由于非接触式IC卡的成本和便利,越来越多的非接触式IC卡被应用到生活当中。随着电子商务的发展,电子钱包被广泛地应用到生活的方方面面,例如:学校一卡通、公交储蓄卡、小区管理、企业管理等。 在众多的应用场合中,各种各样的恶劣环境都可能存在,所以非接触式IC卡的优点就越显得突出:无需插拔、免接触、密封性好、能适应各种恶劣环境、操作方便快捷。 随着微电子技术的不断发展,微处理器芯片的集成程度也越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、串行口等多种功能模块,这就很容易将复杂的计算和控制交由MCU(Micro Control Unit)来处理,组成射频卡的读卡系统。本设计中,MCU采用STC12C5A60S2,读卡模块部分采用MFRC500集成芯片,用于测试的射频卡是Miafre 1 S50,数据采用12864LCD显示,使用串口与上位机(PC)进行通信。本设计的主要特点包括: (一)对S50射频卡进行识别并读取数据。 (二)配合上位机进行联机操作。 (三)设计模块化,便于修改、升级。 1 1 第二章 方案论证与比较 2.1 微控制器选择 选择一: STC12C5A60S2是STC的增强型8051CPU,单时钟/机器周期,指令代码完全兼容传统8051,便于开发。工作频率范围0~35MHz,由于是单时钟/机器周期,指令执行速度提升为普通8051的8~12倍。拥有62K可编程Flash存储器,以及1280Byte SRAM空间。使用独立的波特率发生器来产生UART串口需要的时钟频率,同时将定时器1释放供精确延时使用。 选择二: 普通8051CPU,如STC89C52只有8K的Flash存储器以及512Byte RAM空间,时钟采用12分频,指令的执行速度与STC12C5A60S2相比要慢很多。 在本设计中,需较大的Flash空间来烧写程序以及保存数据;同时,需要更高的执行速度来处理MFRC500返回的数据,且能及时接收处理上位机下发的控制指令。综上所述,本设计采用STC12C5A60S作为主要的控制器。 2.2 显示模块选择 选择一: LED数码管,成本低,电路搭建简便;但功耗较大,显示范围仅有“0~F”,。 选择二: 12864液晶显示模块内置字库,接口简单,支持字符汉字及自定义图标显示,具有反白效果,可视范围大,可实现更丰富的窗口设计。 综上,在本设计中,采用LCD12864作为显示模块。 2.3 读卡器模块方案选择 目前,主要有两种方案可供选择,一是使用分立元件搭建读卡模块,二是使用集成芯片来搭建读卡模块。 2 2 射频卡采用曼彻斯特码,使用分立元件搭建读卡模块后,编码解码的工作就交由处理器来进行处理,当中要求开发者对曼彻斯特编码有比较深入的认识了解。而使用集成芯片,如本设计采用的MFRC500,可以将编码解码任务交付集成芯片来完成,并且该芯片还自带了调制解调电路。 因为集成芯片的高度集成,可以大大缩减读卡器的开发周期以及开发难度,故在本设计中,采用集成芯片方案作为读卡器模块的首选方案。 2.4 天线方案选择 因为本设计中,采用的载波频率为13.56MHz,所以天线可以使用PCB导体的形式存在,而不需要另外绕制天线线圈,但需要对天线进行计算。在MFRC500的使用手册中,有相应的计算公式以及匹配电容的配对 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf ,可以通过查表的方式对天线进行绘制。 3 3 第三章 系统方案设计 3.1 总体系统设计 本系统由主控模块对数据进行处理,读卡模块对IC卡进行通信,显示警告模块对异常情况进行分类指示,最后通过上位机模块跟PC建立连接,并进行IC卡操作与信息交换。 3.2 系统各部分方案 3.2.1 主控模块 由主控芯片 STC12C5A60S2 、震荡电路及复位电路组成。 3.2.2 读卡部分模块 使用产于Philips公司的RC500,应用于13.56MHZ非接触式通信中高集成读卡IC,支持ISO14443层,直接匹配天线,接口使用并行口和复用的地址和数据总线。 3.2.3 显示警告模块 由LCD12864、点触按键和蜂鸣器构成。液晶与按键配合,使用反白功能实现菜单动态的效果;LCD12864与CPU直接8-位并行连接;蜂鸣器经NPN三极管触发发出一定频率警报声。 3.2.4 通信下载模块 由MAX232组成的串口电路可以实现TTL与RS232C电平间转换(RS232C电平通信距离更远),组成可靠的串口通信,使核心板与上位机具有良好的交互通道,同时还为STC单片机提供了ISP下载功能 4 4 第四章 硬件设计 4.1 下位机部分 4.1.1 主控电路 图5-1 主控电路 5 5 4.1.2 显示模块 图5-2 显示模块接口电路 4.1.3 通信下载模块 图5-3 通信下载电路 6 6 4.1.4 电源模块 图5-4 稳压电源电路 4.2 MFRC500模块电路 图5-5 MFRC500模块电路 7 7 4.3 RFID读卡器天线 图5-6 天线PCB 8 8 第五章 软件设计 5.1 下位机软件设计 5.1.1主函数部分 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图如下: int main (void) { char idata ssst; System_init(); ssst=M500PcdConfig(); // 配置 RC500 // must be call in the initialisation if(ssst!=MI_OK) // 若初始化不成功,则灯连续闪烁 { while(1) { Beep(1); LED_flash(1); } } 9 9 M500PcdMfOutSelect(mfout); // 选择内部信号到管脚 MFOUT 输出,以便调试 // mfout=2表示按Miller编码的内部调制信号 M500PcdRfReset(0); // Tx2RF-En, Tx1RF-En disable Beep(1); Main_Menu(); //??进入主面板 while(1) { key_temp = key_scan(); switch(key_temp) { case KEY_OK: EventOk(); break; case KEY_UP: Mmenu++; Main_Menu(); break; case KEY_DOWN: Mmenu--; Main_Menu(); break; default: break; } } } 5.1.2 串口通信部分 void UART_INIT() //串口初始化 void Sent_Byte(unsigned char Sdata) //发送一个字节 void Sent_String(unsigned char *pt_send) //发送一个字符串 void PrintSN_UART(unsigned char *SN,unsigned char size) // 打印卡的序列号 void PrintTypes_UART(unsigned char *Types) // 打印卡的型号 void PrintSize_UART(unsigned char Size) // 打印卡的容量 5.1.3 MFRC模块功能 10 10 5.1.4 液晶显示程序 /*---------------------------------LCD12864初始化-------------------------------*/ void init_lcd (void) /*--------------------------------显示汉字或字符 --------------------------------------*/ void chn_disp (uchar code *chn) /*---------------------------------清DDRAM-------------------------------------------*/ void clrram (void) /*-----------------------------LCD12864命令字和数据写入 ---------------------------------*/ void wr_lcd (uchar dat_comm,uchar content) /*-------------------------------任意坐标显示符号或者汉子 --------------------------------------------*/ void LcdDisp(uchar row,uchar column,uchar *temp,uchar length) /*-----------------------------------任意坐标长度实现反白效果 -------------------------------------------*/ void ConDisp(uchar color,uchar row,uchar column,uchar length) 11 11 5.2 上位机设计 5.2.1 MFC核心代码 /*----------------串口初始化----------------------*/ void CSerial_FinalDlg::OnComopen() { // TODO: Add your control notification handler code here Port = GetDlgItemInt(IDC_COMNUM); int Bnd = GetDlgItemInt(IDC_COMBND); switch(Bnd) { case 9600 : Bnd = 0x0c; break; case 57600: Bnd = 0x0f; break; case 115200: Bnd = 0x10; break; default: Bnd = 0x0c; break; } if(SIO_OK!=sio_open(Port)) { MessageBox("打开串口失败~"); } else { sio_ioctl(Port,Bnd,DATABITS|STOPBITS|PARITY); sio_cnt_irq(Port,CntIrq,1); MessageBox("打开串口成功~"); } } /*---------------------串口接收线程----------------------*/ void CSerial_FinalDlg::OnPcomm() { int Str_Len = 0; int time_out=0; CString temp; do { memset(Buf_Rec,'\0',200); 12 12 Str_Len = sio_read(Port,Buf_Rec,100); //读取串口数据至Buf_Rec[200]中 if((Str_Len!=Buf_Rec[0])&&(time_out==0)) //判断所接收的数据个数是否与发送吻合 { // MessageBox("接收错误~"); sio_putch(Port,REC_NO); //不吻合,则向下位机发送接收错误命令 } time_out++; } while((Str_Len!=Buf_Rec[0])&&(time_out<3)); if(Str_Len==Buf_Rec[0]) { sio_putch(Port,REC_OK); //吻合,则向下位机发送接收成功命令 if(Buf_Rec[1]==RC500_INFO) //对相应命令字解析后触发动作 { InfoDisp(Buf_Rec); //显示卡的信息 //MessageBox("查询完毕~"); } else if(Buf_Rec[1]==RC500_RD_BLOCK) { BlockRead(Buf_Rec); //显示返回数据块的信息 } //else //{ // sio_putch(Port,REC_NO); //无效命令,则向下位机发送接收错误命令 // MessageBox("无效命令~"); // } } } 13 13 5.2.2 上位机主窗口设置 图5-1 窗口设置 14 14 第六章 系统功能、调试与指标参数 6.1 系统功能 主控芯片对串口、RC500、液晶初始化,接着通过按键及液晶选择面板菜单进入相应模式,如“测试模式”:旨在测量卡的接受范围;“脱机模式”:控制RC500跟IC卡建立通信交换信息,结果异常或者成功,蜂鸣器 都会做出相应指示,数据返回处理显示与LCD1286上;“联机模式”:通过串口与PC机建立连接,上位机通过一定的通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 进行数据交换并处理,最后显示与窗口中。 6.2 系统调试 6.2.1 硬件部分调试 1. 测试RC500模块初始化是否成功 步骤:软件部分对RC500各个寄存器进行配置;假设初始化成功,led灯亮,TX1/TX2引脚输出13.56MHZ的包络调制能量载波,否则,led灯灭。 结果:灯亮,输出波形如图所示: TX1(无卡状态)输出 TX1(有卡状态)输出 15 15 RX(无卡状态)输出 RX(有卡状态)输出 2. 测试卡接近感应区时,读卡器是否有反应 步骤:初始化RC500,读卡器进行不断轮询操作;将卡放进感应区;假设轮询操作返回成功,则led灯闪烁,表明读卡器能检测到卡;否则,蜂鸣器长鸣 结果:当卡进入感应区时,led灯闪烁;当卡离开感应区后,led灯停止闪烁,蜂鸣器未响。 6.2.2 下位机调试 读卡器对感应区中的卡进行“3-PASS”操作,判断操作是否正常 步骤:初始化RC500,读卡器进行轮询操作,假设成功则进行防冲突操作,用串口输出返回的卡类型、4个字节序列号、卡容量;假设失败则 串口输出“操作有误~” 结果:超级终端输出卡类型、一连串序列号和卡容量,如图所示: 16 16 6.2.3 上位机调试 步骤:自定义通信协议,下位机等待上位机发送命令字(如卡信息查询命令:0x33),下位机接收并差错检测后发出相应动作,如读卡器对卡进行轮询、防冲突、选卡、认证操作,接着将操作放回信息整合成子串,发往上位机;上位机对发来子串进行差错检测,假设无误,则将信息显示在窗口,否则,弹出报警窗口 结果:上位机向下位机发出“卡信息查询”命令0x33,接收到下位机反馈信息正常,最终显示于窗口,如图所示: 6.3 系统指标参数 6.3.1 工作频率 示波器中实测13.56Mhz 6.3.2 识别距离 直尺实测D>7.0CM 17 17 6.3.3 天线计算 图6-1 天线PCB及尺寸 环形天线电感量的公式: ?I?L1[nH]?2?I1[cm]??ln1?k??N1 ?D1? I1 导线环一圈的长度 D1 导线的直径或者PCB导线的宽度 K 天线形状因素(环形天线K=1.07,矩形天线K=1.47) N1 圈数 此天线,I1=52.12cm,D1=1mm,K=1.47,N1=1.5 所以,L1=750nH 18 18 6.3.4 输出阻抗 图6-2 滤波电路 图6-3 LC滤波电路仿真 使用Multisim对LC滤波电路进行仿真测试,可以得出,该滤波电路是10MHz的带通滤波电路,可以有效抑制MFRC500产生的高次谐波。 19 19 第七章 设计总结 本次实践主要针对MFRC500射频卡识别电路的硬件软件设计,着重于每个器件的内部原理和编程实现,系统模块的有效划分,使整个设计思路更为明朗;对异常出现的可能性进行分析,并制定初期解决方案,从而使调试过程更有针对性,时效性。但由于时间紧迫,未能让模块实现更多的功能。 通过本次实践,队员们在电路、软件应用方面知识得到加强与扩展,从而巩固以往所学知识,更好梳理自己的知识结构;再者,提高了对新事物的适应能力,特别是射频模块设计,在基础知识的不扎实和实战经验的不足的情况下,队员们刻苦攻关,充分体现了队员对信息的快速捕获能力、 学习能力以及应变能力。本次实践虽已结束,但是希望队员们继续加强自 己的理论知识,提高实干能力,争取更多的实践机会。 20 20 参考文献: 《基于MF-RC500和Mifare射频卡识别模块的设计》牛斗 常国权 李 丹 《IC卡技术及其应用》杨振野 21 21 附录A.电路原理图 附A-1 MFRC500模块电路 22 22 附A-2 主控电路 23 23 附录B.源程序 #include <reg52.h> #define __SRC #include "main.h" #undef __SRC #include "MFRC500.h" #include "RDIO.h" #include "m500a.h" #include "Lcd12864.h" #include "UART.h" #define KEY_OK 1 #define KEY_UP 2 #define KEY_DOWN 3 sbit RC500RST = P3^5; sbit RC500_CS = P2^7; sbit LED = P1^0; sbit BEEP= P3^3; sbit key_ok = P2^1; sbit key_up = P2^2; sbit key_down = P2^3; unsigned char cmd_data[8] = {0}; unsigned char cmd_count; unsigned char cmd_temp; unsigned char idata mfout=2; unsigned char Keydata[4]; // Serial Number of the Mifare char buf_send[100]; static int Mmenu = 100; static int Smenu1 = 100; static int Smenu2 = 100; static int Smenu3 = 100; uchar key_temp; extern uchar idata card_snr[4]; extern void ReadCardSnr(uchar Keydata[4]); //读卡的序列号 extern char M500PiccSelect(unsigned char *snr, unsigned char *sak); // IC 卡选择 24 24 void System_init () { init_lcd(); // 初始化液晶 RC500RST = FALSE; RC500_CS = TRUE; // 使能RC500 UART_INIT(); // 初始化串行口 IT0 = 1; // 配置外部中断0为沿触发 EX0 = 1; // 允许外部中断0中断 EA = TRUE; // 允许所有的中断 key_ok = 1; key_up = 1; key_down = 1; } /***********************************************/ /********将十进制数转换为十六进制***************/ /***********************************************/ uchar Dec2Hex(uchar temp) { if((temp>=0)&&(temp<=9)) return temp+0x30; else return (temp-10+'A'); } /***********************************************/ /***********将字符串转换为十六进制字符串*/ /***********************************************/ void Str2Hex(char temp[],char result[],char length) { uchar i,j; uchar high_byte,low_byte; for(i=0,j=0;i<length;i++,j=j+2) { high_byte = temp[i]/16; low_byte = temp[i]%16; result[j] = Dec2Hex(high_byte); result[j+1] = Dec2Hex(low_byte); } result[j] = '\0'; } /***********************************************/ /********将 十六进制字符串转换为序列号信息*******/ 25 25 /*******格式:序列号:000000 *******************/ /***********************************************/ void LcdSnr(char temp[],char result[100]) { uchar i; for(i=0;i<6;i++) result[8+i] = temp[i]; result[8+i] = '\0'; } /***********************************************/ /*按键扫描,“功能键”,“方向键上”,“方向键下”*/ /***********************************************/ char key_scan(void) { if(key_ok==0) { delay_10ms(2); if(key_ok==0) { while(key_ok==0); return KEY_OK; } } if(key_up==0) { delay_10ms(2); if(key_up==0) { while(key_up==0); return KEY_UP; } } if(key_down==0) { delay_10ms(2); if(key_down==0) { while(key_down==0); return KEY_DOWN; } } 26 26 return 0; } /****************主面板***************************/ /*************????**************************/ /*********??IC卡模块??*********************/ /*************????*************************/ /***********************************************/ void Main_Menu() { lat_disp(0x0,0x0); LcdDisp(1,2,"????",8); LcdDisp(2,0,"??",4); LcdDisp(2,2,"IC卡模块",8); LcdDisp(2,6,"??",4); LcdDisp(3,2,"????",8); LcdDisp(4,0,"菜单",4); LcdDisp(4,6,"关于",4); if((Mmenu%2)==0) //“菜单”/“关于”之间反白显示 { ConDisp(0,4,6,2); ConDisp(1,4,0,2); } else if((Mmenu%2)==1) { ConDisp(0,4,0,2); ConDisp(1,4,6,2); } } /****************子面板--关于*********************/ void About_Menu() { lat_disp(0x0,0x0); LcdDisp(1,0,"题目:射频卡模块",16); LcdDisp(2,0,"队员:?符勋强?",16); LcdDisp(3,0," ?郭楚灿?",16); LcdDisp(4,0," ?罗春艺?",16); LcdDisp(4,0,"返回",4); ConDisp(1,4,0,2); } /****************子面板--菜单*********************/ void Sub_Menu1() 27 27 { lat_disp(0x0,0x0); LcdDisp(1,0,"返回上一层",10); LcdDisp(2,0,"脱机模式",8); LcdDisp(3,0,"联机模式",8); LcdDisp(4,0,"应用模式",8); if((Smenu1%4)==0) //四个子选项循环反白显示 { ConDisp(1,1,0,5); ConDisp(0,2,0,5); ConDisp(0,3,0,5); ConDisp(0,4,0,5); } else if((Smenu1%4)==1) { ConDisp(0,1,0,5); ConDisp(1,2,0,5); ConDisp(0,3,0,5); ConDisp(0,4,0,5); } else if((Smenu1%4)==2) { ConDisp(0,1,0,5); ConDisp(0,2,0,5); ConDisp(1,3,0,5); ConDisp(0,4,0,5); } else if((Smenu1%4)==3) { ConDisp(0,1,0,5); ConDisp(0,2,0,5); ConDisp(0,3,0,5); ConDisp(1,4,0,5); } } /****************子面板--菜单--脱机模式*********************/ void Sub_Menu2_1() { lat_disp(0x0,0x0); LcdDisp(1,0,"返回上一层",10); LcdDisp(2,0,"查询卡信息",10); LcdDisp(4,0,"?先放卡后操作?",16); if((Smenu2%2)==0) { 28 28 ConDisp(1,1,0,5); ConDisp(0,2,0,5); } else if((Smenu2%2)==1) { ConDisp(0,1,0,5); ConDisp(1,2,0,5); } } /****************子面板--菜单--联机模式*********************/ void Sub_Menu2_2() { lat_disp(0x0,0x0); LcdDisp(1,0,"?通信联接完成?",16); LcdDisp(2,0,"??接收命令??",16); LcdDisp(3,0,"????????",16); LcdDisp(4,2,"按键返回",8); ConDisp(1,4,2,4); } /***************子面板--菜单--脱机模式--卡信息查询*********************/ void Sub_Menu3_1() { int idata status; // 状态 uchar xdata tt[2]; uchar sss[100],ttt[100]="序列号:"; while((status=M500PiccRequest(PICC_REQSTD,tt))!=0); // 请求答复(查询 tt可知道卡的类型:0x20->S70; 0x40->S50 if(status==0) { ReadCardSnr(buf_send); //读取卡的序列号 Beep(1); Str2Hex(card_snr,sss,3); LcdSnr(sss,ttt); } lat_disp(0x0,0x0); if(buf_send[0]==0x02) LcdDisp(1,0,"卡类型:S70",11); else if(buf_send[0]==0x04) LcdDisp(1,0,"卡类型:S50",11); else if(buf_send[0]==0x10) LcdDisp(1,0,"卡类型:Light",13); else LcdDisp(1,0,"卡类型:Unknown",15); LcdDisp(2,0,ttt,14); 29 29 if(buf_send[6]==0x08) LcdDisp(3,0,"卡容量:8KB",11); else if(buf_send[6]==24) LcdDisp(3,0,"卡容量:24KB",12); else LcdDisp(3,0,"卡容量:xxKB",12); LcdDisp(4,0,"返回上一层",10); ConDisp(1,4,0,5); } /****************串口上位机通信*********************/ void SerialComm(void) { int idata status; // 状态 uchar xdata tt[2]; if (cmd_temp == 0x77) { status=M500PiccRequest(PICC_REQSTD,tt); // 请求答复(查询 tt可知道卡的类型:0x20->S70; 0x40->S50) if(status==0) { ReadCardSnr(buf_send); //读取卡的序列号 SendCmd(0x77,buf_send,9); } } } /****************主面板--“确定键”事件*********************/ void EventOk(void) { if((Mmenu%2)==0) { clrram(); Sub_Menu1(); //??进入子面板--菜单 while(1) { key_temp = key_scan(); if(key_temp==KEY_OK) { if((Smenu1%4)==0) { clrram(); Main_Menu(); //??返回主面板 break; 30 30 } else if((Smenu1%4)==1) { clrram(); Sub_Menu2_1(); //??进入子面板--菜单--脱机模式 while(1) { key_temp = key_scan(); if(key_temp==KEY_OK) { if((Smenu2%2)==0) { clrram(); Sub_Menu1(); //??返回子面板--菜单 break; } else { clrram(); Sub_Menu3_1(); //??进入子面板--菜单--脱机模式--卡信息查询 while(1) { key_temp = key_scan(); if(key_temp==KEY_OK) { clrram(); Sub_Menu2_1();//??返回子面板--菜单--脱机模式 break; } } } } else if(key_temp==KEY_UP) { Smenu2++; Sub_Menu2_1(); } else if(key_temp==KEY_DOWN) { Smenu2--; Sub_Menu2_1(); } 31 31 } } else if((Smenu1%4)==2) { clrram(); Sub_Menu2_2(); //??进入子面板--菜单--联机模式 while(1) { SerialComm(); key_temp = key_scan(); if(key_temp == KEY_OK) { clrram(); Sub_Menu1(); //??返回子面 板--菜单 break; } } } } else if(key_temp==KEY_UP) { Smenu1++; Sub_Menu1(); } else if(key_temp==KEY_DOWN) { Smenu1--; Sub_Menu1(); } } } else { clrram(); About_Menu(); //??进入子面板--关于 while(1) { key_temp = key_scan(); if(key_temp==KEY_OK) { clrram(); Main_Menu(); //??返回主面板 break; } 32 32 } } } int main (void) { char idata ssst; System_init(); ssst=M500PcdConfig(); // 配置 RC500 // must be call in the initialisation if(ssst!=MI_OK) // 若初始化不成功,则灯连续闪烁 { while(1) { Beep(1); LED_flash(1); } } M500PcdMfOutSelect(mfout); // 选择内部信号到管脚 MFOUT 输出,以便调试 ? // mfout=2表示按Miller编码的内部调制信号 M500PcdRfReset(0); // Tx2RF-En, Tx1RF-En disable Beep(1); Main_Menu(); //??进入主面板 while(1) { key_temp = key_scan(); switch(key_temp) { case KEY_OK: EventOk(); break; case KEY_UP: Mmenu++; Main_Menu(); break; case KEY_DOWN: Mmenu--; Main_Menu(); break; default: break; } } 33 33 } /******************************************************* ??功能说明:对上位机发送过来的命令做出回应 ??参数说明:cmd命令字,size发送子串长度,date数据包 ********************************************************/ void SendCmd(char cmd,unsigned char *date,unsigned char size) { unsigned char m; unsigned char sn[100]; sn[0] = size; sn[1] = cmd; for(m=2;m<size;m++) { sn[m] = *date++; } sn[m] = '\0'; Sent_String(sn); } void LED_flash(char count) // LED灯 { char i; for(i=0;i<count;i++) { LED = 0; delay_10ms(80); LED = 1; delay_10ms(80); } } void Beep(char count) // 蜂鸣器 { char i; for(i=0;i<count;i++) { BEEP=0; delay_10ms(15); BEEP=1; delay_10ms(15); } } /************************************************/ 34 34 // 延时函数delay 使用定时器0进行精确延时 /************************************************/ void delay_50us (unsigned char _50us) { ET0=0; // Disable timer1 interrupt TMOD &= 0xf0; TMOD |= 0x01; // Timer 0, mode 1, 16-bit counter TH0= 0xff; TL0= 0xd1; TR0= 1; // 启动定时器0 while (_50us--) { while (!TF0); TR0= 0; TF0 = 0; TH0= 0xff; TL0= 0xd1; TR0= 1; } TR0 = 0; } void delay_1ms (unsigned char _1ms) { ET0=0; // Disable timer1 interrupt TMOD &= 0xf0; TMOD |= 0x01; // Timer 0, mode 1, 16-bit counter TH0= 0xfc; TL0= 0x66; TR0= 1; // 启动定时器0 while (_1ms--) { while (!TF0); TR0= 0; TF0 = 0; TH0= 0xfc; TL0= 0x66; TR0= 1; } TR0 = 0; } void delay_10ms (unsigned int _10ms) { 35 35 ET0 = 0; // Disable timer0 interrupt TMOD &= 0xf0; TMOD |= 0x01; // Timer 0, mode 1, 16-bit counter TH0 = 0xdc; TL0 = 0x00; TR0 = 1; // 启动定时器0 while (_10ms--) { while (!TF0); TR0 = 0; TF0 = 0; TH0 = 0xdc; TL0 = 0x00; TR0 = 1; } TR0 = 0; } void UART_ISR() interrupt 4 using 2 // 串行口中断服务程序 { EA = 0; RI = 0; cmd_temp = SBUF; EA = 1; } 36 36
本文档为【RFID打卡器和射频卡设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_601191
暂无简介~
格式:doc
大小:82KB
软件:Word
页数:0
分类:工学
上传时间:2018-09-16
浏览量:9