智能门禁控制系统设计.docx
《智能门禁控制系统设计.docx》由会员分享,可在线阅读,更多相关《智能门禁控制系统设计.docx(15页珍藏版)》请在冰点文库上搜索。
智能门禁控制系统设计
班级:
__08电子信息一班_ XX:
_黄昌利、黄勇姬、黄文静__
学号:
_、200802060、__
智能门禁控制器设计
一、设计任务:
智能门禁控制器设计
二、设计要求:
1.以89C5X系列单片机为核心器件,设计一个智能门禁控制器。
2.门控器密码由键盘输入,用四个数码管显示提示信息。
3.密码输入错误提示(可用发光二极管指示),密码错误超过3次则通过蜂鸣器发出报警声。
4.密码输入正确,则通过发光二极管指示开锁信号,并驱动步进电机正转10圈开门,10秒后步进电机反转10圈关门。
5.其它创新设计。
三、评分标准:
项目
潢分
评分
设计与总结报告
方案比较、设计与论证,硬件系统方框图
10
具体硬件电路设计或仿真电路设计
10
软件系统程序设计流程图
10
调试结果分析及使用操作说明
10
具体功能实现
能完成显示程序设计
10
能完成按键程序设计
10
能完成步进电机驱动程序设计
10
能完成整个项目的程序联调,实现整个项目的功能
10
答辩
项目设计自述
10
回答问题
10
加分项
其它创新设计
10
智能门禁控制器设计
1.系统方案选择和论证
1.1设计要求
1.以89C5X系列单片机为核心器件,设计一个智能门禁控制器。
2.门控器密码由键盘输入,用四个数码管显示提示信息。
3.密码输入错误提示(可用发光二极管指示),密码错误超过3次则通过蜂鸣器发出报警声。
4.密码输入正确,则通过发光二极管指示开锁信号,并驱动步进电机正转10圈开门,10秒后步进电机反转10圈关门。
5.其它创新设计。
1.2系统总体方案
AT89C52
按键输入
发光二极管显示
步进机
蜂鸣器
数码显示
1.2.1系统各模块方案选择和论证
(1)控制器模块
AT89C52单片机
(2)显示模块
方案一:
LED显示屏。
优点:
亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定。
LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
缺点:
色彩一致性差,马赛克现象较严重,显示效果较差;混色效果不佳,视角不大,水平方向左右观看有色差。
加工较复杂,抗静电要求高。
实际像素分辨率做到10000点以上较难;加工工艺麻烦,成本太高;加工还是较复杂,抗静电要求高。
方案二:
数码管。
能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容;发光响应时间极短(<0.1µs),高频特性好,单色性好,亮度高;体积小,重量轻,抗冲击性能好;寿命长,使用寿命在10万小时以上,甚至可达100万小时。
成本低。
而且还易于检测。
(3)键盘输入模块
方案一:
开关控制
方案二:
独立式键盘控制
键盘控制本身都没有内部音源系统,不过几乎所有键盘合成器/工作站则都可以扮演控制其它设备声音及参数的角色。
而且丰富功能及便携性。
(4)声光报警模块
方案一:
喇叭和显示管
方案二:
发光二极管和蜂敏器
声光报警器外壳由不锈钢金属材料制成,产品采用了密封结构设计,所以不受污染物和水的影响,防护等级为IP65。
(5步进电机模块
方案一:
单相八拍
方案二:
两相四拍
1.2.2系统各模块的最终方案
(1)控制器模块:
AT89C52
(2)显示模块:
数码管
(3)键盘输入模块:
独立式键盘输入控制
(4)声光报警模块:
发光二极管和蜂敏器
(5)步进机模块:
两相四拍
2.系统硬件电路设计
(1)键盘
(2)51实验板
(3)驱动电路
3.系统软件设计流程图
开始
初始值
输入密码,判断
是否正确
启动定时器
LED显示
密码正确
密码错误
密码错误三次报警
步进机正转10圈显示“0-9”
步进机反转10圈显示“0-9”
延迟10秒后
4.软件系统源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharcodekeycode[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//101112131415
//0123456789errorightclose0pen.F
unsignedcharcodeLED_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x86,0x88,0xc6,0x8c,0x7f,0x8e};
ucharmima_code[]={0,0,0,0};
ucharwei_code[]={0xef,0xcf,0x8f,0x00};
ucharcodezheng[4]={0x9f,0x5f,0x9f,0xaf};//正转
ucharcodefan[4]={0xaf,0x6f,0x5f,0x9f};//反转
ucharjishu=3;
ucharspeed;
uchartemp=0;
intwei=-1;
ucharqing=0;
uchari,j,k;
//延时函数
voidsubDelay(uintx)
{
while(x--);
}
//置数
voidzhishu()
{
mima_code[wei]=speed;
}
//显示
voidxianshi_code()
{
if(wei>=0)
{P0=LED_code[15];
P2=wei_code[wei];
}
else
{
P0=0xbf;
P2=0x00;
}
}//启动定时器,清零
voiddisplay()
{
if(temp==1)
{
if(mima_code[0]==2&&mima_code[1]==2&&mima_code[2]==4&&mima_code[3]==4)
{
P0=LED_code[11];
P2=0x00;
subDelay(65000);
mima_code[0]=0;
mima_code[1]=0;
mima_code[2]=0;
mima_code[3]=0;
TR0=1;
jishu=3;
}
else
{jishu--;
P0=LED_code[10];
P2=0X00;
subDelay(50000);
subDelay(50000);
P2=0xff;
if(jishu==0)
{uchark=3;
while(k--)
{
P1_0=0;
subDelay(10000);
P1_0=1;
subDelay(10000);
}
}
}
wei=-1;
temp=0;
speed=14;
}
}
//按键扫描
charsubMatrixScan()
{
unsignedcharlcKeyTemp,i;
unsignedcharlcRowSel=0xf7;//4个输出行分别输出0的选择码
P3=0xF0;
lcKeyTemp=P3;
subDelay(200);//延时,消除抖动
if((P3==0xF0)||(P3!
=lcKeyTemp))
{
return(16);//无按键或未稳定,返回空键码,随后再来
}
for(i=0;i<4;++i)
{
P3=lcRowSel|0xF0;//检查各行有无按键
switch(P3&0xF0)
{//获取4列按键状态
case0xE0:
lcKeyTemp=0;break;//仅第1列有按键
case0xD0:
lcKeyTemp=1;break;//仅第2列有按键
case0xB0:
lcKeyTemp=2;break;//仅第3列有按键
case0x70:
lcKeyTemp=3;break;//仅第4列有按键
default:
lcKeyTemp=16;break;//无按键或多按键
}
if(lcKeyTemp!
=16)
{
lcKeyTemp+=i*4;
break;
}
lcRowSel>>=1;//右移1位,选择下一行
}
return(lcKeyTemp);//返回按键状态
}
voidkey_process()
{unsignedcharkey=0xff;
key=subMatrixScan();
key=keycode[key];
switch(key)
{case0:
speed=0;wei++;subDelay(50000);break;
case1:
speed=1;wei++;subDelay(50000);break;
case2:
speed=2;wei++;subDelay(50000);break;
case3:
speed=3;wei++;subDelay(50000);break;
case4:
speed=4;wei++;subDelay(50000);break;
case5:
speed=5;wei++;subDelay(50000);break;
case6:
speed=6;wei++;subDelay(50000);break;
case7:
speed=7;wei++;subDelay(50000);break;
case8:
speed=8;wei++;subDelay(50000);break;
case9:
speed=9;wei++;subDelay(50000);break;
case10:
P0=LED_code[key];P2_4=0;break;
case11:
P0=LED_code[key];P2_4=0;break;
case12:
P0=LED_code[key];P2_4=0;break;
case13:
P0=LED_code[10];P2_4=0;break;
case14:
wei--;
subDelay(50000);break;
case15:
temp=1;P0=LED_code[15];subDelay(50000);P2_4=0;break;
default:
break;
}
}
//定时计数器,电机控制
voidTIMER0()interrupt1
{TH0=0xfc;
TL0=0x18;
TR0=0;
for(i=0;i<10;i++)
{P0=LED_code[i];
P2=0x00;
for(j=0;j<200;j++)
{
for(k=0;k<4;k++)
{
P1=zheng[k];
subDelay(50);
}
}
}
P0=LED_code[13];
P1=0x0f;
subDelay(60000);
subDelay(60000);
subDelay(60000);
subDelay(60000);
for(i=9;i>0;i--)
{P0=LED_code[i];
P2=0x00;
for(j=0;j<200;j++)
{
for(k=0;k<4;k++)
{
P1=fan[k];
subDelay(50);
}
}
}
P0=LED_code[12];
subDelay(60000);
subDelay(60000);
subDelay(60000);
subDelay(60000);
P2=0xff;
P1=0x0f;
}
//主函数
voidmain()
{TMOD=0x01;
TH0=0xfc;//计数器初始值
TL0=0x18;
EA=1;
ET0=1;
P1=0xff;
while
(1)
{key_process();
zhishu();
display();
xianshi_code();
}
}
5.产品操作说明
按键0-9为密码输放
16号键为确认键,15号键为删除键
密码为:
2244
6.调试中遇到的问题及解决的办法
(1)键盘扫描错误,后发现是按键做板不对,重做板改正就行了。
(2)步进机无法转动,经过调试,发现是频率过快。
7.总结
通过做本项目,增加了组员们对C语言的理解与运用,并掌握了按键的运用,灵活的运用了LED来显示我们要达到的效果。
通过讨论交流,也大大的提高了组员们的相互合作水平。
参考文献
单片机应用实训教程
丁化成.单片机应用技术[A].:
航空航天大学,2000.;
王幸之.单片机应用系统抗干扰技术[A].:
航空航天大学,2002.