门禁电子密码锁说明书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、管理员操作模式下,04功能实时钟的设置,利用数字3和数字4按键实现对时和分钟的调校,按键操作时实现快调功能;
4、如果在开锁模式下12S后没有按键操作则进入常态;
5、如果在开锁状态下用户密码输入十次均错误则报警锁键15分钟;
6、其他功能扩展。
二、总体方案设计与论证
1、总体方案设计:
以微处理器AT90C51为核心,利用P0,P1和P2.4、P2.5、P2.6、P2.7这些I/O口实现数据的传送;利用I2C总线通信协议和24C02芯片进行密码的核对和修改;4×4矩阵键盘用于密码的输入与修改以及时钟值的修改;数码管用于显示时间和密码输入和修改状态;密码输入正确后通过P2.4口控制继电器工作打开门;P1口用与读入按键状态来判断是否有按键按下然后执行相应的按键功能;P0口控制数码管的段码输出,P2.5,P2.6,P2.7连接到74ls138译码器来控制数码管的位选码输出。
if(y==2||y==3)//开锁模式和管理员模式把jm_disp[8]的内容给缓冲单元
{
seg_disp[0]=jm_disp[0];
seg_disp[1]=jm_disp[1];
seg_disp[2]=jm_disp[2];
seg_disp[3]=jm_disp[3];
seg_disp[4]=jm_disp[4];
5、常态下,八位LED 7段数码管显示时钟信息可包括小时、分钟、秒钟。
6、只要按下0~9的数字键则转入开锁状态,每按一个数字键使数码管从左到右逐次显示“—”。
7、如果输入的密码为6位则和用户密码进行匹配,匹配一致则开锁,如果输入的密码为8位则和管理员密码进行匹配,匹配一致则进入管理员操作模式。
8、在密码输入状态下,输入满6位或8位密码数据后,按“ENT”键才能进行密码匹配,如果没满6位或8位数字密码,按“ENT”则不作响应。
12、管理员操作模式下,01功能可以设置用户密码,输入新密码时需要进行确认。
功能扩展提示:(选做)
1、管理员操作模式下,02功能重置管理员密码;
2、管理员操作模式下,03功能可以设置进门的开始时间和结束时间。只有在进门时间段输入用户密码才能开锁。如果开始时间和结束时间均设置为00:00,则为全天可以按密码开门;
{
int i=0,j;
uchar a,b,c,k;
key=0x0f;
lb[4]=lb[3];
lb[3]=lb[2];
lb[2]=lb[1];
lb[1]=lb[0];
lb[0]=key;//滚动滤波存储
for(j=0;j<4;j++)
{
if(lb[j]!=lb[j+1])//还要有两个单元不相等则退出函数
3、设置“0”~“9”的数字键及“ESC”和“ENT”等功能键。对按键输入信号须进行软件消抖处理。
4、工作模式:
(1)常态:数码管显示时钟。
(2)开锁模式:需输入6位数字为0~9的密码进行开锁。密码数字可以由管理员事先设置保存共普通用户使用。
(3)管理员操作模式:需输入8位0~9的密码,可以进行修改用户密码、修改管理员密码、修改进门时段等功能。
case(2):LSA=0; LSB=1; LSC=0; break;
case(3):LSA=1; LSB=1; LSC=0; break;
seg_disp[3]=sdm[clk_value[1]/10];
seg_disp[4]=sdm[clk_value[1]%10];
seg_disp[5]=0x40;
seg_disp[6]=sdm[clk_value[2]/10];
seg_disp[7]=sdm[clk_value[2]%10];
}
{
case(0):k0(); break;
case(1):k1(); break;
case(2):k2(); break;
case(3):k3(); break;
case(4):k4(); break;
case(5):k5(); break;
case(6):k6(); break;
case(7):k7(); break;
3、设计任务:设计一个以单片机为核心的门禁密码锁。具有密码开锁,不同权限的密码修改、密码输入安全设置、开门时段管理等功能。编程并在单片机实验板上模拟调试实现。
4、设计基本要求:
1、开机进行接口部件及数码显示器、指示灯、讯响器等自检。
2、密码分为管理员密码和用户密码:管理员密码为8位0~9的数字,而用户密码为6位0~9的数字。
程序流程如图:




图5
3、显示程序
代码如下:
void disp()
{
int i;
for(i=0;i<8;i++)//8个数码管逐个点亮
{
switch(i)//送出位选码
{
case(0):LSA=0; LSB=0; LSC=0; break;
case(1):LSA=1; LSB=0; LSC=0; break;
return;
k=lb[j+1];
}
pd[1]=pd[0];
pd[0]=k;//稳定状态的值存入pd[1]和pd[0]
if((pd[1]==0x0f)&&(pd[0]!=0x0f))//pd[1]是0x0f,pd[0]不是0x0f则按下
{
key=0x0f; a=key&0x0f;
key=0xf0; b=key&0xf0;
《微机原理及接口技术》
课程设计说明书
课题:门禁电子密码锁
专业:通信工程
班级:****
姓名:******
学号:
指导老师:
一、设计任务
1、设计题目:门禁电子密码锁
2、设计目的:通过小型微机应用产品的设计与调试过程,运用《微机原理及接口技术》课程所学的基本知识,在设计中加以应用,进而得到理解、巩固和提高发展,通过实践的过程学习掌握分析与解决实际问题的方法与手段,提高设计、编程与调试的实际动手能力,作为工程技术工作的一次基本训练。
程序流程如图:
否Байду номын сангаас

图4
2、拆字程序
代码如下:
void cz()
{
if(y==1&&(ms==0||ms==4))//常态和继电器工作下拆时间单元
{
seg_disp[0]=sdm[clk_value[0]/10];
seg_disp[1]=sdm[clk_value[0]%10];
seg_disp[2]=0x40;
c=a|b;//线反转后键状态值存入c
while(c!=key_code[i]) i++; //查找第几个按键按下
keyvalue=i;
if(y==0)
{
seg=sdm[keyvalue];//按键对应段码送出显示
x++;//记录按键按下次数
return;
}
switch(keyvalue)//执行相应按键功能
9、输入的用户密码如果匹配则相应指示灯亮并且电动开门电磁铁线圈通电1S开门后返回常态;如果输入不正确,则提示“E”,3S后返回常态,等待下一轮的密码输入。
10、开锁模式下可以按“ESC”键取消开锁模式返回常态。
11、管理员操作模式下,管理员可以选择功能,01功能代表设置用户密码、02功能代表重置管理员密码、03功能代表设置进门时间、04功能设置实时钟。利用ESC键返回常态。
按键的分配如图:
注:
U:设置用户密码;
A:设置管理员密码;
ESC:返回;
ENT:确认;
图2
数码管模块:常态下显示时间值,开锁模式下显示输入的密码状态,以‘-’来显示,管理员模式下全部显示’-’,调整时间时显示所调整的时间值。
继电器模块:当用户密码输入正确时由单片机发出指令让继电器工作打开门。
24C02模块:保存用户密码和管理员密码,与单片机通过I2C总线协议进行通信,I2C通信只有一根数据线SDA和一根时钟线SCL,通信前由单片机发出一个起始信号,之后在时钟线SCL高电平期间把数据线SDA上的数据发送给24C02,在时钟线高电平期间数据先上的数据必须保持,SCL为低电平是SDA上的数据才能发生改变,当发送完一个字节后从器件24C02会向单片机发送一个应答信号,单片机接收到应答信号后可以发出终止信号终止通信。
case(15):k15(); break;
}
}
}
程序开始先进行滚动存储,lb[5]这个数组用来存储最近5次按键状态值的,接着判断这5个单元内容是否相等,如果不等则退出该函数,相等则接着判断是否是按下,若pd[1]为0x0f且pd[0]不为0x0f则是按键按下,然后查表找到与当前按下的键状态值相等的位置,记录得到键值,执行对应键功能。
3、软件设计说明
主程序:
主程序是整个程序的主体,可以对各个子程序进行调用,协调各个子程序之间的联系,控制着整个系统的工作流程。系统上电后进入主程序,先对系统各个模块自检,后对系统初始化,之后就循环进行主流程工作。
主程序流程图:
图3
四、局部程序设计说明
1、按键检测程序
代码如下:
void sm_key()
软件延时会有一个等待按键释放的过程,因此按下按键数码管会灭一小段时间,结果不太理想,但滚动滤波法只判断按键按下的那个状态(下降沿),因此不会出现数码管灭的情况,因此采用滚动滤波法。
3、按键扫描方案设计与论证:
3.1、逐行(列)扫描法
逐行扫描法把行(列)线其中一位置为0,然后观察列(行)线电平变化,若为0了,则把行首值+列值得到键值确定哪颗按键按下,若没变化在把后一行(列)线置为0,依次扫描过去。
case(8):k8(); break;
case(9):k9(); break;
case(10):k10(); break;
//case(11):k11(); break;
case(12):k12(); break;
case(13):k13(); break;
case(14):k14(); break;
三、总框图及总体软件设计说明
1、 系统总框图:
图1
2、硬件模块功能说明
键盘模块:键盘共16个按键,10个是0~9数字键,1个返回键(ESC),1个确认件(ENT),1个设置用户密码键,1个设置管理员密码键,1个调整时钟键。当数字键是输入对应的0~9数字的,返回键是取消所有调整返回到常态显示时间的,确认键是对用户或管理员的操作进行确认的,管理员模式下修改密码按键才有效,调时钟按键按下则暂停时钟走时进行时间修改。
2、按键消抖方案设计与论证:
2.1、软件延时消抖法
软件延时消抖通过调用延时子程序来判断按键是否是抖动,若是抖动,则延时后按键状态和无按键按下时状态一样,若不是抖动,则按键状态和无按键按下时状态不一样,确定为按键按下。
2.2、滚动滤波法消抖
滚动滤波法通过采集按键最近的5次状态来判断是否有抖动,用5个连续的存数单元分别存按键最近的5次状态,再用2个单元来存放稳定时的状态值,每次扫描按键时把上一次的状态值都存入后一个单元,然后把当前按键的状态值存入第一个单元,这样依次进行下去,若不是抖动,则5个单元的值都相等,若是抖动,则5个单元的值不全相等;之后把5个单元相等时的值存入其中一个稳定状态存储单元,另一个则是存上一次的稳定值,当上一次稳定值是无按键按下时的值,当前稳定值不等于无按键按下时的值时,则判定为按键按下。
3.2、线反转法
线反转法先把行线设为输入,列线设为输出且输出0,然后读取行线的状态值暂存寄存器,然后行列线互换,列先设为输入,行线设为输出,读取列线的值之后和之前行线的值相或得到每个键的状态值,查表找出哪颗键被按下即可。
逐行(列)扫描法比较麻烦,因此采用线反转法。
4、数码管显示方案设计:
数码管显示数字时是把每个数字的段码送到数码管段选口,然后选通数码管位选码,则数码管就显示对应的数字,每个数字的段码采用查表的方式查找,把每个数字的段码都写在一个数组,通过数组下标查找到对应段码送出去显示。输入密码时数码管要显示输入的状态‘-’,采用一个数组存储‘-’,初始数组内容全0,数码管全灭,每输入一个密码,该数组对应位置就存入‘-’的段码,然后通过缓冲单元输出到数码管。
seg_disp[5]=jm_disp[5];
seg_disp[6]=jm_disp[6];
seg_disp[7]=jm_disp[7];
}
}
拆字程序在常态不做任何调整下和打开门时把时间值存储数组里面的内容拆到数码管显示缓冲单元里面暂存,当处于开锁模式或管理员模式下则把jm_disp[8]数组里面的内容一一对应赋给数码管显示缓冲单元,开锁模式下,每输入一个密码,jm_disp[8]单元里面就回存一个‘-’的段码,在界面上显示出密码输入的位数,管理员模式下,jm_disp[8]里面全部存一个相同的段码,让数码管显示当前是管理员操作界面。
相关文档
最新文档