c门禁控制系统门禁控制系统设计.docx
《c门禁控制系统门禁控制系统设计.docx》由会员分享,可在线阅读,更多相关《c门禁控制系统门禁控制系统设计.docx(20页珍藏版)》请在冰豆网上搜索。
c门禁控制系统门禁控制系统设计
2016-2017学年第二学期
《C语言程序设计》课程设计报告
题目:
专业:
门禁控制系统
网络工程(对口)
班级:
16(3)班
姓名:
指导教师:
成绩:
代应豪
程庆
计算机学院2017年5月10日
1
门禁控制系统设计
目
录
第1章门禁系统的概述.......................................................3
1.1门禁系统概念............................................................3
1.2门禁系统的特点..........................................................3
第2章门禁系统的设计要求....................................................4
2.1设计要求................................................................4
第3章门禁系统的方案论证...................................................4
3.1门禁系统的总体方案.......................................................4
3.2门禁系统的各个方案论证...................................................5
3.2.1.单片机控制芯片模块....................................................5
3.2.2.键盘控制块............................................................6
第4章门禁系统的软件部分...................................................7
结 论...................................................................10
致 谢...................................................................10
参考文献...................................................................10
ABSTRACT...................................................................15
附录1:
系统程序。
..........................................................10
2
第1章门禁系统的概述
1.1门禁系统概念
出入口门禁控制系统采取以感应卡来取代用钥匙开门的方式。
使用者用一张卡可
以打开多把门锁,
对门锁的开启也可以有一定的时间限制。
如果卡丢失了,不必更换
门锁,只需将其从控制主机中注销。
出入口门禁控制系统是通过对出入口的准入情况
进行控制、管理和记录的设备,对何人何时在何地进行详细跟踪,以实现中心对出入口的24小时控制、监视及管理。
1.2门禁系统的特点
系统将ID卡技术、计算机控制技术与电子门锁有机结合,用ID卡替代钥匙,配
合计算机实现智能化门禁控制和管理,有效的解决了传统门锁的使用繁琐和无法信息
记录等不足,利用数据控制器采集的数据实现数字化管理可为内部人力资源的有效管理等带来意想不到的效果。
电子钥匙:
授权后的ID卡即可当作电子钥匙,将此电子钥匙感应器前一晃,控制器对该卡进行身份验证,验证合法后即控制电子门锁自动打开。
开门权限:
按门设置:
可以根据持卡人身份权限设定有效开门区域(控制器号码)。
系统可设有最高权限卡,该卡可以打开系统辖区内所有电子门锁。
自动报警:
非法使用卡或强行打开门锁等非正常情况下系统会将自动发出报警信
号,系统将自动记录非常状况的时间、门号、状态等详细信息,确保门锁安全和事后查证。
3
第2章门禁系统的设计要求
2.1设计要求
(1)读卡功能
(2)添加管理卡功能
(3)增加、删除用户卡功能
(4)更改管理卡
(5)清除所有用户卡
(6)键盘控制管理卡操作
(7)蜂鸣器实现刷卡、按键提示
第3章门禁系统的方案论证
3.1门禁系统的总体方案
本系统由51系列单片机AT89S52、按键、蜂鸣器、T7122M-I读卡等模块构成。
实
现了存储一张管理卡和多张用户卡的功能;同时管理人员还可以通过按键更改管理卡,
增加用户卡,删除用户卡,清空所有用户卡等。
因为门禁刷卡控制刷卡距离随着补尝
电容的改变而改变(补尝电容大约300PF),所以最大的刷卡距离约为5—12CM;对于
非管理卡或用户卡,本门禁控制器不与响应;每个按键控制器都有相应的提示音进行
提示操作。
正常使用时,用户持卡靠近读卡天线,门禁控制器读入卡号,并与存储在
内部的卡号比较,如果有相同的卡号,说明此卡合法,门禁机响一长音,提示成功,如果读卡失败,而不响应。
总体系统结构图如图3-1
4
图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为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
基于以上所述,根据系统需要及所学知识我选方案二。
5
[1]
3.2.2键盘控制模块
方案一:
独立式键盘,如图3-2。
它是利用单片机I/O口读取口的电平高低来判断是
否有键按下,这种方式的缺点是占用的I/O口数较多。
且对键盘处理的时候涉及到了一个重要的过程,那就是键盘的抖动问题。
图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]
6
[6]
如图
3-3
方案三:
行列扫描的键盘形式,如图3-4。
列线通过电阻接正电源,并将行线所接
的单片机I/O口作为输出端,而列线所接的I/O口则作为输入。
当按键没有按下时,
所有列的输出端都是高电平,代表没有键按下。
行线输出时低电平,一旦有键按下时,
则输入线就会被拉低,这样通过读入输入线的状态就可以得知是否有键按下了。
图3-4
基于以上所述,根据系统需要我选方案二。
第4章门禁系统的软件部分
程序循环中主要工作为判断是否有刷卡,若有刷卡则断判是什么卡,然后进行相
7
应的处理。
门禁系统的总流程图4-1:
是否有刷卡
是否有管理卡
是否是管理卡
是否是用户卡
图4-1
8
管理卡功能子程序流程图如图4-2
是否有卡刷
是否有按键
定时5秒是否到
图4-2
9
结
论
本门禁控制器用于鉴别刷卡人员,管理人员出入。
功能可实现存储一张管理卡、
多张用户卡。
通过按键开关可以进行各种卡管理操作,如更改管理卡、增加单个用户卡、删除单个用户卡、清空所有用户卡等。
致谢
在这次C语言课程设计中,我的老师和同学给了我及大的帮助。
特别是我的指导
老师程庆老师,还有我的C语言任课老师代美丽老师。
在此,我对他们表示感谢!
感谢他们在我面对困难时给了我帮助和支持。
也感谢那些给我帮助的所有同学!
参考文献
[1]谭浩强著.C程序设计(第四版).北京:
清华大学出版社,2010.6
[2]谭浩强著.C程序设计(第四版)学习辅导.北京:
清华大学出版社,2010.7
附录一:
系统程序
#include
#include
sbitcp=P1^0;
10
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;
11
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)
12
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);
13
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;
}
14
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();//读第二个字节
15
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)
{
16
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();
17
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();
18
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;
19
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
20
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)
21
{
TMOD=0x01;//定时器0
TH0=(65536-50000)/256;//定时器0初始华TL0=(65526-50000)%256;
EA=1;
ET0=1;
P0=0XFF;
zjz();
}
22