c门禁控制系统-门禁控制系统设计Word格式.doc

上传人:wj 文档编号:8702656 上传时间:2023-05-13 格式:DOC 页数:22 大小:99.50KB
下载 相关 举报
c门禁控制系统-门禁控制系统设计Word格式.doc_第1页
第1页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第2页
第2页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第3页
第3页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第4页
第4页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第5页
第5页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第6页
第6页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第7页
第7页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第8页
第8页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第9页
第9页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第10页
第10页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第11页
第11页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第12页
第12页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第13页
第13页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第14页
第14页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第15页
第15页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第16页
第16页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第17页
第17页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第18页
第18页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第19页
第19页 / 共22页
c门禁控制系统-门禁控制系统设计Word格式.doc_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c门禁控制系统-门禁控制系统设计Word格式.doc

《c门禁控制系统-门禁控制系统设计Word格式.doc》由会员分享,可在线阅读,更多相关《c门禁控制系统-门禁控制系统设计Word格式.doc(22页珍藏版)》请在冰点文库上搜索。

c门禁控制系统-门禁控制系统设计Word格式.doc

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位CMOSEEPROM微控制器。

它有高性能的类似于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:

开始

定义堆栈区

AT89S52、定时器0、中断初始化

是否有刷卡

是否是管理卡

蜂鸣器响三声

是否有管理卡

添加该卡为管理卡,蜂鸣器响两声

管理卡功能子程序

是否是用户卡

蜂鸣器响一声

图4-1

管理卡功能子程序流程图如图4-2

是否有卡刷

蜂鸣器响一声,定时器T0起动

是否有按键

蜂鸣器响一声,添加用户卡

蜂鸣器响二声,删除用户卡

蜂鸣器响三声,删除管理卡

蜂鸣器响四声,清空所有用户卡

返回

定时5秒是否到

图4-2

结论

本门禁控制器用于鉴别刷卡人员,管理人员出入。

功能可实现存储一张管理卡、多张用户卡。

通过按键开关可以进行各种卡管理操作,如更改管理卡、增加单个用户卡、删除单个用户卡、清空所有用户卡等。

致谢

在这次C语言课程设计中,我的老师和同学给了我及大的帮助。

特别是我的指导老师程庆老师,还有我的C语言任课老师代美丽老师。

在此,我对他们表示感谢!

感谢他们在我面对困难时给了我帮助和支持。

也感谢那些给我帮助的所有同学!

参考文献

[1]谭浩强著.C程序设计(第四版).北京:

清华大学出版社,2010.6

[2]谭浩强著.C程序设计(第四版)学习辅导.北京:

清华大学出版社,2010.7

附录一:

系统程序

#include<

reg51.h>

intrins.h>

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;

voidsend(unsignedchara)

//判断是不是有键按下

unsignedchari;

for(i=0;

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

//延时去抖动

display_bit=0xfe;

//扫描键盘

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)

}

returnrxdata;

//--------同步串行口接收-------

unsignedcharrx(void)

chari;

if(cp==1)//检测CP脚是否出现低电平

return;

EA=0;

//屏蔽中断

for(i=25;

)//保证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脚恢复高电平

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();

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;

{

if(chcardno[a][5]==cardno[5])

{

chcardno[a][5]=chcardno[b][5];

//删除用户卡

}

}

case2:

//按键3

feib();

chcardno[0][5]=0;

//删除管理卡

case3:

//按键4

{

chcardno[a][5]=0;

//清空所有用户卡

}

if(count==50)//定时5S是否到

{

TR0=0;

EA=0;

}

//--------------------主程序--------------

voidmain(void)

TMOD=0x01;

//定时器0

//定时器0初始华

ET0=1;

P0=0XFF;

zjz();

22

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2