门禁控制系统设计样本.docx
《门禁控制系统设计样本.docx》由会员分享,可在线阅读,更多相关《门禁控制系统设计样本.docx(21页珍藏版)》请在冰豆网上搜索。
门禁控制系统设计样本
门禁控制系统课程设计
姓名:
周炜燚
班级:
自动化101
学号:
022073
门禁控制系统设计
第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
图3-1门禁系统总体构造框图
3.2门禁系统各个方案论证
3.2.1单片机控制芯片模块
方案一:
PIC16C84单片机芯片。
它是8位CMOSEEPROM微控制器。
它有高性能类似于RISC指令,共有35条单字节指令,所有指令除程序分支指令需要两个指令周期外,都只需要一种指令周期。
程序指令宽度为14位,在芯片内有1K×14EEPROM程序存储器。
方案二:
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类型,运算过程进位被丢弃。
选取同步串行输出方式时,每个字节中高位先输出;选取异步串行输出时,每个字节中低位先输出。
输出波特率均为9600Bits/S。
3、数据输出波形
图4-5
4、功能阐明
(1)通过读卡天线,刷卡时读取ID卡卡号。
(2)通过SO脚把卡号传到单片机芯片管脚上。
(3)通过CP脚传送低电平阐明有卡刷到。
第5章门禁系统软件某些
程序循环中重要工作为判断与否有刷卡,若有刷卡则断判是什么卡,然后进行相应解决。
门禁系统总流程图5-1:
图5-1
管理卡功能子程序流程图如图5-2
图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
#include
sbitcp=P1^0;
sbitsck=P1^1;
sbitso=P1^2;
sbitbeep=P3^7;
sbitled5=P0^5;
sbitKD_KEY=P2^6;
sbitKEY_SDA=P2^7;
sbitKEY_CLK=P2^5;
unsignedcharchcardno[10][5]={0};
unsignedcharcardok;
unsignedcharj=0;
unsignedcharcount;
unsignedchara;
unsignedcharcardno[5]={0};
unsignedcharkey_value;
unsignedcharb=1;
//---------毫秒延时子程序----------
voiddelay2(unsignedcharms)
{unsignedchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
//---------蜂鸣器--------------
unsignedcharfeib(void)
{
beep=0;
led5=0;
delay2(250);
beep=1;
led5=1;
delay2(250);
}
voidsend(unsignedchara)
//判断是不是有键按下
{
unsignedchari;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
KEY_SDA=1;
else
KEY_SDA=0;
KEY_CLK=0;
KEY_CLK=1;
}
}
unsignedcharkey(void)
//判断是第几键按下
{
unsignedcharbuffer,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);
//检测下一键
}
}
//------同步串行口接受一字节-------
unsignedcharrx1byte()
{
chari;
charrxdata;
for(i=9;--i;)
{
rxdata<<=1;
while(sck==0)//等待始终上升沿
continue;
if(so==1)//读数据
++rxdata;
while(sck==1)
continue;
}
returnrxdata;
}
//--------同步串行口接受-------
unsignedcharrx(void)
{
chari;
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;
}
}
//---------------管理卡程序-----------
unsignedcharzjz(void)
{
chari=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;
}
}
}
}
}
}
}
//----------定期器子程序---------
voidtimer1(void)interrupt3
{
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
count++;
key_value=key();
switch(key_value)
{
case0:
//按键1
feib();
chcardno[b][5]=cardno[5];//添加顾客卡
cardno[5]=0;
b++;
break;
case1:
//按键2
feib();
feib();
for(a=1;a<=b;a++)
{
if(chcardno[a][5]==cardno[5])
{
chcardno[a][5]=chcardno[b][5];//删除顾客卡
}
}
break;
case2:
//按键3
feib();
feib();
feib();
chcardno[0][5]=0;//删除管理卡
break;
case3:
//按键4
feib();
feib();
feib();
feib();
for(a=1;a<=b;a++)
{
chcardno[a][5]=0;//清空所有顾客卡
}
break;
}
if(count==50)//定期5S与否到
{
TR0=0;
EA=0;
}
}
//--------------------主程序--------------
voidmain(void)
{
TMOD=0x01;//定期器0
TH0=(65536-50000)/256;//定期器0初始华
TL0=(65526-50000)%256;
EA=1;
ET0=1;
P0=0XFF;
zjz();
}