基于51单片机的IC卡门禁控制系统设计1.doc
2008届龙岩学院本科毕业生 门禁控制系统设计学院名称:物理与机电工程学院专业:电子信息工程学号:200402204姓名:刘龙瑞指导教师:涂二生(高级工程师)【摘 要】本设计是利用T7122M-I工业级ID读卡模块实现的门禁控制器,具有存储一张管理卡和多张用户卡的功能,同时管理人员还可以通过按键更改管理卡,增加、删除用户卡等操作,门禁刷卡控制刷卡距离约为512CM。 关键词:门禁系统、T7122M-I工业级读卡模块。目 录摘 要2第1章 门禁系统的概述41.1 门禁系统概念41.2 门禁系统的特点4第2章门禁系统的设计要求42.1 设计要求4第3章 门禁系统的方案论证43.1门禁系统的总体方案43.2门禁系统的各个方案论证53.2.1.单片机控制芯片模块53.2.1.键盘控制块5第4章 门禁系统的硬件部分64.1主控芯片部分64.2键盘控制部分74.3蜂鸣器控制部分84.4T7122M-I工业读卡模块8第5章 门禁系统的软件部分9第6章 门禁系统的软、硬件调试126.1硬件调试126.2软件调试126.3软、硬件设计注意事项12结论13致谢13参考文献14ABSTRACT15附录1:系统程序。16第1章 门禁系统的概述1.1 门禁系统概念出入口门禁控制系统采取以感应卡来取代用钥匙开门的方式。使用者用一张卡可以打开多把门锁, 对门锁的开启也可以有一定的时间限制。如果卡丢失了,不必更换门锁,只需将其从控制主机中注销。出入口门禁控制系统是通过对出入口的准入情况进行控制、管理和记录的设备,对何人何时在何地进行详细跟踪,以实现中心对出入口的24小时控制、监视及管理。1.2 门禁系统的特点系统将ID卡技术、计算机控制技术与电子门锁有机结合,用ID卡替代钥匙,配合计算机实现智能化门禁控制和管理,有效的解决了传统门锁的使用繁琐和无法信息记录等不足,利用数据控制器采集的数据实现数字化管理可为内部人力资源的有效管理等带来意想不到的效果。电子钥匙:授权后的ID卡即可当作电子钥匙,将此电子钥匙感应器前一晃, 控制器对该卡进行身份验证,验证合法后即控制电子门锁自动打开。开门权限:按门设置:可以根据持卡人身份权限设定有效开门区域(控制器号码)。系统可设有最高权限卡,该卡可以打开系统辖区内所有电子门锁。自动报警:非法使用卡或强行打开门锁等非正常情况下系统会将自动发出报警信号,系统将自动记录非常状况的时间、门号、状态等详细信息,确保门锁安全和事后查证。第2章门禁系统的设计要求2.1 设计要求(1)读卡功能(2)添加管理卡功能(3)增加、删除用户卡功能(4)更改管理卡(5)清除所有用户卡(6)键盘控制管理卡操作(7)蜂鸣器实现刷卡、按键提示第3章 门禁系统的方案论证3.1门禁系统的总体方案本系统由51系列单片机AT89S52、按键、蜂鸣器、T7122M-I读卡等模块构成。实现了存储一张管理卡和多张用户卡的功能;同时管理人员还可以通过按键更改管理卡,增加用户卡,删除用户卡,清空所有用户卡等。因为门禁刷卡控制刷卡距离随着补尝电容的改变而改变(补尝电容大约300PF),所以最大的刷卡距离约为512CM;对于非管理卡或用户卡,本门禁控制器不与响应;每个按键控制器都有相应的提示音进行提示操作。正常使用时,用户持卡靠近读卡天线,门禁控制器读入卡号,并与存储在内部的卡号比较,如果有相同的卡号,说明此卡合法,门禁机响一长音,提示成功,如果读卡失败,而不响应。总体系统结构图如图3-1蜂鸣器门禁控制器读卡模块下位PC机接口电路 图3-1 门禁系统总体结构框图32门禁系统的各个方案论证321单片机控制芯片模块方案一:PIC16C84单片机芯片。它是8位CMOS EEPROM微控制器。它有高性能的类似于RISC的指令,共有35条单字节的指令,所有的指令除程序分支指令需要两个指令周期外,都只需要一个指令周期。程序指令的宽度为14位,在芯片内有1K×14的EEPROM程序存储器。方案二:At89s52芯片。 它是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。易失性存储与工业80C51 产品指令和引脚完 全兼容。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 基于以上所述,根据系统需要及所学知识我选方案二。322键盘控制模块方案一:独立式键盘,如图3-2。它是利用单片机I/O口读取口的电平高低来判断是否有键按下,这种方式的缺点是占用的I/O 口数较多。且对键盘处理的时候涉及到了一个重要的过程,那就是键盘的抖动问题1。图3-2方案二:基于串并转换电路的键盘形式,如图3-3。7SLS164 是串并转化芯片,它把SDA(P10)上的串行数据转化为8 为的并行数据,S1/S2/S3/S4/S5/S6/S7/S8作为键盘扫描线,P11 为键盘数据回送线。键盘扫描时,从S1S7 一次输出低电平,然后检测P11(回送线),如果P11(回送线)为高电平则表示无键闭合,如果P11(回送线)等于0,将S1S7 上的数据经过简单处理得到对应的键值。5如图3-3方案三:行列扫描的键盘形式,如图3-4。列线通过电阻接正电源,并将行线所接的单片机I/O 口作为输出端,而列线所接的I/O 口则作为输入。当按键没有按下时,所有列的输出端都是高电平,代表没有键按下。行线输出时低电平,一旦有键按下时,则输入线就会被拉低,这样通过读入输入线的状态就可以得知是否有键按下了6。图3-4基于以上所述,根据系统需要我选方案二。第4章 门禁系统的硬件部分41主控芯片部分1、原理图图4-14.2键盘控制部分采用串并转换电路的键盘形式(1)原理图图4-2串并转换电路的键盘形式(2)工作原理7SLS164 是串并转化芯片,它把SDA(P27)上的串行数据转化为8 为的并行数据,S1/S2/S3/S4/S5/S6/S7/S8作为键盘扫描线,P26为键盘数据回送线。键盘扫描时,从S1S7 一次输出低电平,然后检测P26(回送线),如果P26(回送线)为高电平则表示无键闭合,如果P26(回送线)等于0,将S1S7 上的数据经过简单处理得到对应的键值。(3)功能说明KEY1:增加用户卡KEY2:删除用户卡KEY3:删除管理卡KEY4:清除所有用户卡4.3蜂鸣器控制部分1、蜂鸣器原理图如下所示:图4-3蜂鸣器原理图2、工作原理单片机通过P37来控制蜂鸣器的工作与关闭。当P3.7=1时,PNP三极管关闭,蜂鸣器停止工作4。当P3.7=0时,PNP三级管导通,蜂鸣器开始工作4。从而单片机只需要P3.7输出0或者1开控制鉴别鸣器即可。3、功能说明(1)刷卡时蜂鸣器响一声,说明读到用户卡。(2)刷卡时蜂鸣器响两块,说明读到管理卡。(3)相应的按键时给于相应的提示音。(4)蜂鸣器没有响应,说明没有读到卡。4.4T7122M-I工业级读卡模块1、应用电路简图图4-42、数据输出格式共输出48Bits,即6个字节。第一字节为ID卡识别码,第二至第五字节为卡号,最后一个字节为前五个字节的校验和。校验和运算变量类型为BYTE类型,运算过程进位被丢弃。选择同步串行输出方式时,每个字节中高位先输出;选择异步串行输出时,每个字节中低位先输出。输出波特率均为9600 Bits/S。3、数据输出波形图4-54、功能说明(1)通过读卡天线,刷卡时读取ID卡卡号。(2)通过SO脚把卡号传到单片机芯片管脚上。(3)通过CP脚传送低电平说明有卡刷到。第5章 门禁系统的软件部分程序循环中主要工作为判断是否有刷卡,若有刷卡则断判是什么卡,然后进行相应的处理。门禁系统的总流程图5-1: 开始定义堆栈区AT89S52、定时器0、中断初始化是否有刷卡是否是管理卡蜂鸣器响三声是否有管理卡添加该卡为管理卡,蜂鸣器响两声管理卡功能子程序是否是用户卡蜂鸣器响一声图5-1管理卡功能子程序流程图如图5-2是否有卡刷蜂鸣器响一声,定时器T0起动是否有按键蜂鸣器响一声,添加用户卡蜂鸣器响二声,删除用户卡蜂鸣器响三声,删除管理卡蜂鸣器响四声,清空所有用户卡返回定时5秒是否到图5-2第6章 门禁系统的软、硬件调试完成了硬件的设计、制作和软件编程之后,要使系统能够按设计正常运行,必须进行硬件调试和软件调试。6.1硬件调试硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。(1) 脱机检查。按照电路原理图用万用表逐步检测电路板中所有器件的各引脚,尤其是电源的连接是否正确;检查各开关按键是否能正常工作;为了保护芯片,应先对各IC座(尤其是电源端)电位进行检查,确定其无误后再插入芯片检查3。(2) 联机调试。暂时拔掉AT89S52芯片,将仿真器的40芯仿真插头插入AT89S52的芯片插座进行调试,检验键盘电路是否满足设计要求。可以通过一些简单的测试软件来查看接口工作是否正常。例如,我们可以设计一个能过按键控制蜂鸣器声响检测键盘电路的好坏。如果运行测试结果与预期不符,很容易根据故障现象判断故障原因并采取针对性措施排除故障。62. 软件调试软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。调试的基本步骤如下:(1)编写蜂鸣程序程序,调试是蜂鸣器是否会响。(2)编写简单程序调试刷卡时是读卡模块是否有读入。(3)编写键盘控制程序,调试是否有键按下及其按键值。(4)编写添加、删除用户卡程序,调试是否能实现。(5)编写更改管理卡,清除所有用户卡程序,调试是否能实现。(6)总体调试,看能否实现存储一张管理卡,多张用户卡。通过按键能否实现添加、删除用户卡,更改管理卡,清除所有用户卡等设计要求。63软、硬件设计注意事项(1)读卡模块T7122M-I外部电源接触不良或者严重的电磁干扰,则有可能偶然使读卡模块内部软件跑飞。(2)天线周围如果有金属存在,则工作频率将受影响,读卡距离也受影响,严重时读卡反应迟钝,甚至不能读卡。避免的方法是所有的金属材料尽量离开天线线圈,特别是天线前面不能有金属封板。金属封板会屏蔽电磁波,致使读卡完全失效。天线后面如果有金属封板,则应该离开天线线圈至少3厘米以上。(3)读卡模块与模板注意是否有共地。(4)如果使用的电源性能不良,将引起电压不稳,波纹太大,对读卡距离产生影响。(5)外界的电磁杂波也会对读卡产生干扰。结 论本门禁控制器用于鉴别刷卡人员,管理人员出入。功能可实现存储一张管理卡、多张用户卡。通过按键开关可以进行各种卡管理操作,如更改管理卡、增加单个用户卡、删除单个用户卡、清空所有用户卡等。致 谢本次的毕业设计,从开题报告开始到现在已经三个多月了,这是大学期间一次比较完整的学习过程。通过本次毕设,不但学习了单片机技术与嵌入式系统、C51程序编写等学科,掌握了KEIL8、protel DXP等软件工具。更重要的是学会了分析问题、运用所学知识解决现实问题的方法。在本科毕业论文完成之际,我要对所有帮助过我的人们表示诚挚的谢意!首先,对我的导师涂二生致以衷心的感谢!从上个学期联系做毕设之初开始至今,从论文的选题、开题报告和中期报告的书写,到论文的组织、撰写、修改和完善,涂老师都给了我非常多的关心、理解、指导和帮助。其次要特别感谢院的辅导员卢老师和其他老师。特别是在我中途离开学校前往公司实习期间,卢老师们仍然用邮件、电话等方式来通知我们,指导毕设论文的开展。卢老师严谨的治学态度和高尚的个人修养将永远值得我学习和敬仰。最后,非常感谢我的舍友刘何平、庄阳江、钟俊、曹振华、张霖,感谢他们在生活上和毕设过程中曾给过我的启迪与帮助。最后真诚感谢于百忙中审阅论文、参与答辩并给予我指导的各位老师。谢谢大家!参考文献1谢振辉,改进式MCS-51单片机实验,北京,科学出版社,2006,76992赵建领51系列单片机开发宝典北京,电子工业出版社,2007,781083杨恢先,黄辉先单片机应用系统设计与仿真调试北京,北京航空航天大学出版社,2005,751034王为青,程国钢,单片机KEIL CX51应用开发技术北京,人民邮电出版社,2007,5176,981205李玉梅基于MCS-51系列单片机原理的应用设计北京,国防工业出版社,2006,3976谭浩强C程序设计北京,清华大学出版社,1998,85124。6李群芳,黄建单片机微型计算机与接口技术北京,电子工业出版社,2001,5494。7陈龙三,8051单片机C语言控制与应用北京,清华大学出版社,2002,5986。8张大波嵌入式系统原理设计与应用北京,机械工业出版社,2004-11,3678。9沙占友,孟志永,王彦明单片机外围电路设计北京,电子工业出版社,2006,4485。Access Control SystemCollege:Physics and Electrical and Mechanical Engineering CollegeProfessional:Electronic and Information Engineering:Xue:200402204Name:LiuLongruiInstructor:TuErsheng(Senior Engineer)【ABSTRACT】The design is to use T7122M-I-class industrial ID card reader to achieve the access control module controller, a memory card and a management card users more than the function, management can also change the management of key cards, to add, delete user cards Operation, access control card reader distance of about 5-12 CM.Key words: Access Control System、T7122M-industrial grade reader module, 附录一:系统程序#include<reg51.h>#include<intrins.h>sbit cp=P10;sbit sck=P11;sbit so=P12;sbit beep=P37;sbit led5=P05;sbit KD_KEY = P26;sbit KEY_SDA=P27;sbit KEY_CLK=P25;unsigned char chcardno105=0;unsigned char cardok;unsigned char j=0;unsigned char count;unsigned char a;unsigned char cardno5=0;unsigned char key_value;unsigned char b=1;/-毫秒延时子程序-void delay2(unsigned char ms)unsigned char i; while(ms-) for(i=0;i<120;i+); /-蜂鸣器-unsigned char feib(void)beep=0;led5=0;delay2(250);beep=1;led5=1;delay2(250);void send(unsigned char a) /判断是不是有键按下unsigned char i;for(i=0;i<8;i+) if(_crol_(a,i)&0x80) KEY_SDA=1; else KEY_SDA=0; KEY_CLK=0; KEY_CLK=1; unsigned char key(void)/判断是第几键按下unsigned char buffer,display_bit,i;buffer=0xff; /赋初值为0xffdelay2(250); /延时去抖动display_bit=0xfe; /扫描键盘for(i=0;i<8;i+)send(display_bit);if(!KD_KEY) /是此键按下吗? buffer=display_bit; /是,则保存其键值return(i);break; /退出display_bit=_crol_(display_bit,1);/检测下一键/-同步串行口接收一字节-unsigned char rx1byte() char i; char rxdata; for(i=9;-i;) rxdata<<=1; while(sck=0) /等待始终上升沿 continue; if(so=1) /读数据 +rxdata; while(sck=1) continue; return rxdata;/-同步串行口接收-unsigned char rx(void) char i; if(cp=1) /检测CP脚是否出现低电平 return; EA=0; /屏蔽中断 for(i=25;-i;) /保证CP的宽度大于时钟宽度 if(sck=0) EA=1; return; while(sck=1) /等待时钟线出现低电平 continue; cardno0=rx1byte(); /读第一个字节 cardno1=rx1byte(); /读第二个字节 cardno2=rx1byte(); cardno3=rx1byte(); cardno4=rx1byte(); cardno5=rx1byte(); /读第六个字节 while(cp=0) /等待CP脚恢复高电平 continue; EA=1; /读卡结束,校验卡号 i=cardno0+cardno1+cardno2+cardno3+cardno4; if(i=cardno5) cardok=1; /-管理卡程序-unsigned char zjz (void) char i=0; while(1) rx(); P0=0XFF; if(cardok=1)/判断是否有刷卡 cardok=0; if(chcardno05=0)/判断是否有管理卡 feib();feib(); chcardno05=cardno5;/设计为管理卡 else if(chcardno05=cardno5)/判断是否是管理卡 feib(); feib(); feib(); delay2(250); while(1) rx(); if(cardok=1)/判断是否有刷卡 feib(); cardok=0; TR0=1; /起动定时器0 count=0; break; else for(a=1;a<=b;a+) if(chcardnoa5=cardno5)/判断是否是用户卡 feib(); break; /-定时器子程序-void timer1(void) interrupt 3 TH0=(65536-50000)/256; TL0=(65526-50000)%256; count+; key_value=key(); switch(key_value) case 0: /按键1 feib(); chcardnob5=cardno5;/添加用户卡 cardno5=0; b+; break; case 1: /按键2 feib(); feib(); for(a=1;a<=b;a+) if(chcardnoa5=cardno5) chcardnoa5=chcardnob5;/删除用户卡 break; case 2: /按键3 feib(); feib(); feib(); chcardno05=0;/删除管理卡 break; case 3: /按键4 feib(); feib(); feib(); feib(); for(a=1;a<=b;a+) chcardnoa5=0; /清空所有用户卡 break; if(count=50)/定时5S是否到 TR0=0; EA=0; /-主程序-void main(void) TMOD=0x01; /定时器0 TH0=(65536-50000)/256;/定时器0初始华 TL0=(65526-50000)%256; EA=1; ET0=1; P0=0XFF; zjz(); 21