资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
门禁控制系统课程设计
姓名: 周炜燚
班级: 自动化101
学号: 022073
门禁控制系统设计
目 录
第1章 门禁系统的概述 4
1.1 门禁系统概念 4
1.2 门禁系统的特点 4
第2章门禁系统的设计要求 4
2.1 设计要求 4
第3章 门禁系统的方案论证 4
3.1门禁系统的总体方案 4
3.2门禁系统的各个方案论证 5
3.2.1.单片机控制芯片模块 5
3.2.1.键盘控制块 5
第4章 门禁系统的硬件部分 6
4.1主控芯片部分 6
4.2键盘控制部分 7
4.3蜂鸣器控制部分 8
4.4T7122M-I工业读卡模块 8
第5章 门禁系统的软件部分 9
第6章 门禁系统的软、 硬件调试 12
6.1硬件调试 12
6.2软件调试 12
6.3软、 硬件设计注意事项 12
结 论 13
致 谢 13
参考文献 14
ABSTRACT 15
附录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) , 因此最大的刷卡距离约为5—12CM; 对于非管理卡或用户卡, 本门禁控制器不与响应; 每个按键控制器都有相应的提示音进行提示操作。正常使用时, 用户持卡靠近读卡天线, 门禁控制器读入卡号, 并与存储在内部的卡号比较, 如果有相同的卡号, 说明此卡合法, 门禁机响一长音, 提示成功, 如果读卡失败, 而不响应。总体系统结构图如图3-1
蜂鸣器
门
禁
控
制
器
读卡模块
下位PC机
接口电路
图3-1 门禁系统总体结构框图
3.2门禁系统的各个方案论证
3.2.1单片机控制芯片模块
方案一: PIC16C84单片机芯片。它是8位CMOS EEPROM微控制器。它有高性能的类似于RISC的指令, 共有35条单字节的指令, 所有的指令除程序分支指令需要两个指令周期外, 都只需要一个指令周期。程序指令的宽度为14位, 在芯片内有1K×14的EEPROM程序存储器。
方案二: At89s52芯片。 它是一种低功耗、 高性能CMOS8位微控制器, 具有 8K 在系统可编程Flash 存储器。易失性存储与工业80C51 产品指令和引脚完 全兼容。在单芯片上, 拥有灵巧的8 位CPU 和在系统 可编程Flash, 使得AT89S52为众多嵌入式控制应用系统提 供高灵活、 超有效的解决方案。
基于以上所述, 根据系统需要及所学知识我选方案二。
3.2.2键盘控制模块
方案一: 独立式键盘, 如图3-2。它是利用单片机I/O口读取口的电平高低来判断是否有键按下, 这种方式的缺点是占用的I/O 口数较多。且对键盘处理的时候涉及到了一个重要的过程, 那就是键盘的抖动问题[1]。
图3-2
方案二: 基于串并转换电路的键盘形式, 如图3-3。7SLS164 是串并转化芯片, 它把SDA(P10)上的串行数据转化为8 为的并行数据, S1/S2/S3/S4/S5/S6/S7/S8作为键盘扫描线, P11 为键盘数据回送线。键盘扫描时, 从S1~S7 一次输出低电平, 然后检测P11( 回送线) , 如果P11( 回送线) 为高电平则表示无键闭合, 如果P11( 回送线) 等于0, 将S1~S7 上的数据经过简单处理得到对应的键值。[5]
如图3-3
方案三: 行列扫描的键盘形式, 如图3-4。列线经过电阻接正电源, 并将行线所接的单片机I/O 口作为输出端, 而列线所接的I/O 口则作为输入。当按键没有按下时, 所有列的输出端都是高电平, 代表没有键按下。行线输出时低电平, 一旦有键按下时, 则输入线就会被拉低, 这样经过读入输入线的状态就能够得知是否有键按下了[6]。
图3-4
基于以上所述, 根据系统需要我选方案二。
第4章 门禁系统的硬件部分
4.1主控芯片部分
1、 原理图
图4-1
4.2键盘控制部分
采用串并转换电路的键盘形式
(1)原理图
图4-2串并转换电路的键盘形式
(2)工作原理
7SLS164 是串并转化芯片, 它把SDA(P27)上的串行数据转化为8 为的并行数据, S1/S2/S3/S4/S5/S6/S7/S8作为键盘扫描线, P26为键盘数据回送线。
键盘扫描时, 从S1~S7 一次输出低电平, 然后检测P26( 回送线) , 如果P26( 回送线) 为高电平则表示无键闭合, 如果P26( 回送线) 等于0, 将S1~S7 上的数据经过简单处理得到对应的键值。
(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-4
2、 数据输出格式
共输出48Bits, 即6个字节。第一字节为ID卡识别码, 第二至第五字节为卡号, 最后一个字节为前五个字节的校验和。校验和运算变量类型为BYTE类型, 运算过程进位被丢弃。
选择同步串行输出方式时, 每个字节中高位先输出; 选择异步串行输出时, 每个字节中低位先输出。输出波特率均为9600 Bits/S。
3、 数据输出波形
图4-5
4、 功能说明
( 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的芯片插座进行调试, 检验键盘电路是否满足设计要求。能够经过一些简单的测试软件来查看接口工作是否正常。例如, 我们能够设计一个能过按键控制蜂鸣器声响检测键盘电路的好坏。如果运行测试结果与预期不符, 很容易根据故障现象判断故障原因并采取针对性措施排除故障。
6.2. 软件调试
软件调试的任务是利用开发工具进行在线仿真调试, 发现和纠正程序错误, 同时也能发现硬件故障。
程序的调试应一个模块一个模块地进行, 首先单独调试各功能子程序, 检验程序是否能够实现预期的功能, 接口电路的控制是否正常等; 最后逐步将各子程序连接起来总调。联调需要注意的是, 各程序模块间能否正确传递参数, 特别要注意各子程序的现场保护与恢复。调试的基本步骤如下:
( 1) 编写蜂鸣程序程序, 调试是蜂鸣器是否会响。
( 2) 编写简单程序调试刷卡时是读卡模块是否有读入。
( 3) 编写键盘控制程序, 调试是否有键按下及其按键值。
( 4) 编写添加、 删除用户卡程序, 调试是否能实现。
( 5) 编写更改管理卡, 清除所有用户卡程序, 调试是否能实现。
( 6) 总体调试, 看能否实现存储一张管理卡, 多张用户卡。经过按键能否实现添加、 删除用户卡, 更改管理卡, 清除所有用户卡等设计要求。
6.3软、 硬件设计注意事项
( 1) 读卡模块T7122M-I外部电源接触不良或者严重的电磁干扰, 则有可能偶然使读卡模块内部软件跑飞。
( 2) 天线周围如果有金属存在, 则工作频率将受影响, 读卡距离也受影响, 严重时读卡反应迟钝, 甚至不能读卡。避免的方法是所有的金属材料尽量离开天线线圈, 特别是天线前面不能有金属封板。金属封板会屏蔽电磁波, 致使读卡完全失效。天线后面如果有金属封板, 则应该离开天线线圈至少3厘米以上。
( 3) 读卡模块与模板注意是否有共地。
( 4) 如果使用的电源性能不良, 将引起电压不稳, 波纹太大, 对读卡距离产生影响。
( 5) 外界的电磁杂波也会对读卡产生干扰。
结 论
本门禁控制器用于鉴别刷卡人员, 管理人员出入。功能可实现存储一张管理卡、 多张用户卡。经过按键开关能够进行各种卡管理操作, 如更改管理卡、 增加单个用户卡、 删除单个用户卡、 清空所有用户卡等。
附录一: 系统程序
#include<reg51.h>
#include<intrins.h>
sbit cp=P1^0;
sbit sck=P1^1;
sbit so=P1^2;
sbit beep=P3^7;
sbit led5=P0^5;
sbit KD_KEY = P2^6;
sbit KEY_SDA=P2^7;
sbit KEY_CLK=P2^5;
unsigned char chcardno[10][5]={0};
unsigned char cardok;
unsigned char j=0;
unsigned char count;
unsigned char a;
unsigned char cardno[5]={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; //赋初值为0xff
delay2(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;
cardno[0]=rx1byte(); //读第一个字节
cardno[1]=rx1byte(); //读第二个字节
cardno[2]=rx1byte();
cardno[3]=rx1byte();
cardno[4]=rx1byte();
cardno[5]=rx1byte(); //读第六个字节
while(cp==0) //等待CP脚恢复高电平
continue;
EA=1;
//读卡结束, 校验卡号
i=cardno[0]+cardno[1]+cardno[2]+cardno[3]+cardno[4];
if(i=cardno[5])
{
cardok=1;
}
}
//---------------管理卡程序-----------
unsigned char zjz (void)
{
char i=0;
while(1)
{
rx();
P0=0XFF;
if(cardok==1)//判断是否有刷卡
{
cardok=0;
if(chcardno[0][5]==0)//判断是否有管理卡
{
feib();
feib();
chcardno[0][5]=cardno[5];//设计为管理卡
}
else
{
if(chcardno[0][5]==cardno[5])//判断是否是管理卡
{
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(chcardno[a][5]==cardno[5])//判断是否是用户卡
{
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();
chcardno[b][5]=cardno[5];//添加用户卡
cardno[5]=0;
b++;
break;
case 1: //按键2
feib();
feib();
for(a=1;a<=b;a++)
{
if(chcardno[a][5]==cardno[5])
{
chcardno[a][5]=chcardno[b][5];//删除用户卡
}
}
break;
case 2: //按键3
feib();
feib();
feib();
chcardno[0][5]=0;//删除管理卡
break;
case 3: //按键4
feib();
feib();
feib();
feib();
for(a=1;a<=b;a++)
{
chcardno[a][5]=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();
}
展开阅读全文