电子密码锁.docx
《电子密码锁.docx》由会员分享,可在线阅读,更多相关《电子密码锁.docx(50页珍藏版)》请在冰点文库上搜索。
电子密码锁
目录
1引言1
2总体设计方案1
2.1设计思路1
2.1.1硬件部分设计思路1
2.1.2软件部分设计思路2
2.2方案确立3
3设计原理分析3
3.1键盘电路的设计3
3.2存储电路的设计4
3.3状态显示及LED指示电路的设计6
3.4报警电路的设计7
3.5总体电路原理分析7
4结束语9
参考文献9
附录110
附录218
基于单片机控制的电子密码锁
摘要:
该电子密码锁具有硬件部分简单、控制功能丰富、齐全等优点。
该系统由单片机、4×4矩阵键盘、掉电存储器、数码管显示电路、LED指示电路、报警电路组成。
该系统仅用了三个数码管用于状态指示并且具有动态指示效果,指示状态齐全合理。
该系统共设置有三组密码:
密码一用于普通用户开锁,密码二用于解除报警,密码三为最高管理员密码用于修改各级密码。
该系统能够实现:
输入密码超时报警,超次数报警,只能用解除报警密码解除报警,用管理员密码修改各级密码等功能。
关键词:
单片机、4×4矩阵键盘、掉电存储器、I2C协议、读写时序、报警电路、标志位、字型码、串口通信
1引言
随着人们对保密安全性能要求的提高以及现代电子科学技术的发展电子密码锁越来越体现出了它的优势。
传统的机械锁由于结构简单,开锁时是用钥匙开锁且锁体露于外表,被人打开及撬开的可能性会很高,安全系数很低且不会报警,对于保密安全性能要求较高的领域根本不能满足要求,而电子密码锁具有很高的安全性能,在不知道正确密码的情况下想要打开锁的可能性几乎为零,且具有智能功能能够自动报警及各种指示,是一种更加安全可靠的电子产品,并且由于电子技术越来越成熟电子器件的价格也越来越便宜,开发这种系统也将会更加经济、实用,市场也将会很大。
2总体设计方案
2.1设计思路
由于是单片机课程设计所以就必须要体现出单片机的强大控制功能。
根据课程设计任务书的要求,必须要有掉电存储器、状态显示电路、报警电路、单片机控制系统、人机接口的矩阵键盘,这些都是必须的电路部分,还需要有一些指示电路可用几个不同颜色的发光管用于配合状态显示电路用于指示不同状态。
软硬件设计是要结合起来进行的,首先根据要实现的功能进行硬件的选择,每选择一块硬件部分后都要考虑一下软件设计的思路考虑软件设计是否能够和它完成相应的功能,应该在设计要求的前提下尽量做到硬件电路简单,软件程序容易编写,这样才是最合理的方案。
2.1.1硬件部分设计思路
对于硬件部分的设计4×4矩阵键盘是必须的,选用P0口接矩阵键盘,选用P0口的原因是:
由于矩阵键盘的列部分要求有上拉电阻而P0口用作I/O口时必须要接上拉电阻,这样正好弥补了P0口上的缺点也正合适。
状态显示可用三个数码管显示用单片机的串口进行数据发送,串口外接三个74LS164移位寄存器,每个164有8个输出端正好可接一个数码管,这样将要显示的字型码送给SBUF后数码管就会指示相应的状态。
报警电路可用一个蜂鸣器代替,主要是掉电存储器选用了24C02存储器,该存储器用I2C协议进行数据传送仅需二根数据线便可以,用该芯片可以使电路硬件简单,也可以体现出单片机软件设计的功能。
图1硬件部分设计方框图
2.1.2软件部分设计思路
采用汇编语言编写程序,程序主要分为两部分,一部分为:
主程序,单片机根据I/O口读入用户键入的按键键值并进行判断按其相应的分配功能进行读写、比较、存储等一系列的操作,是电子密码锁软件设计部分的核心;另一部分为:
辅助程序,由于电子密码锁的存储器采用的是
图2软件部分主程序设计思路方框图
掉电存储器密码均存储在24C02中,所以在主程序运行前24C02中必须要有预先设置好的密码,这就需要预先编写一个小程序,用于向24C02中写入预设密码作为第一次比较的基准。
2.2方案确立
以上硬件部分的设计简单合理,符合设计要求能够实现硬件部分要求的全部功能,软件部分思路清晰且容易编写通过以上软硬部分的设计及综合考虑确立了上述方案的可行性。
3设计原理分析
3.1键盘电路的设计
键盘为一个4×4矩阵键盘,行列式矩阵键盘只需N条行线和M条列线即可组成具有N×M个按键的键盘,具有使用很少I/O线实现按键扩展的优点,4×4矩阵键盘用一个P口即可。
工作原理可描述为:
首先判别键盘中有无按键按下,由单片机I/O口向键盘送全扫描字,然后读入列线状态来判断。
方法是:
向行线输出全扫描字00H,把全部行线置为低电平,然后将列线的状态读入累加器A中。
如果有按键按下总会有一根列线电平被拉至低电平,从而使列输入不全为1。
判断键盘中哪一个按键被按下是通过将行线逐行置低电平后,检查列输入状态实现的。
方法是:
依次给行线送低电平,然后查所有列线状态,称行扫描。
如果全为1,则所按下的键不在此行;如果不全为一,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。
图34×4矩阵键盘接口图
键盘分为两部分:
一部分为数字按键,另一部分为功能按键。
数字按键共10个编码依次为0至9,用于密码输入;功能按键共6个,分配功能依次为:
A修改用户密码按键、B修改管理员密码按键、C用户输入密码按键、D显示成功开锁次数按键、D确定键、E修改报警密码按键、F删除键,其中显示成功开锁次数按键和确定键为一个键,当没有输入密码时按下此键数码管将会显示成功开锁次数。
图4按键功能分布图
3.2存储电路的设计
掉电存储器用24C02存储器,此存储器采用I2C协议和单片机之间进行数据传输。
I2C总线上允许挂接多从机,采用发送不同的地址信息和严格的时序信号进行主机和从机之间的数据传输。
具有I2C协议的从机其地址端都是可编程的,通过接地或接高电平来形成不同的地址,
图524C02外围接线图
如果总线上只有一个从机一般都是将地址端全部接地,对于24C02芯片其可编程的地址端有四位,高四位为固定的地址编号为1010,低四位中前三位为可编程地址端最低位为读写控制为,0表示写操作,1表示读操作。
当要对器件进行读写操作时,要严格按照器件的读写时序图进行数据传送才能正确的读出或写入数据。
表124C02器件地址位
1
0
1
0
A1
A2
A3
R/
24C02器件上SDA为串行数据/地址端,SCL为串行时钟端,A0、A1、A2为器件地址输入端,器件地址就是通过它们的不同连接来形成不同的器件地址的,SP为写保护端如果SP接高电平则器件内所有内容都被写保护只能读不能写,当WP端悬空或接地时允许器件进行正常的读写操作。
使用I2C协议传送数据是有协议定义的:
(1)只有在总线空闲时才允许启动数据传输。
(2)在数据传送过程中,当时钟线为高电平时数据线必须保持稳定状态,不允许有跳变。
时钟线为高电平时,数据线上的任何电平变化都被看作是总线的起始或停止信号。
时钟线维持高电平期间,数据线电平由高到低的跳变为I2C的起始信号,由低到高为停止信号。
数据的读写要严格按照器件的时序图进行,写操作分为两种情况:
(1)字节写
(2)页写,读操作分为三种情况
(1)立即地址读
(2)选择性读(3)连续读。
在字节写模式下主器件发送起始信号和从器件地址信息给从器件,从器件在收到后发出应答信号表明已收到信号,从器件发出应答信号后,主器件再发出24C02的字节地址,主器件在收到从器件的又一应答信号后再发送数据到被寻址单元,24C02再次应答,在收到主器件发出的停止信号后开始内部数据擦写,在24C02擦写过程中不再应答主器件的任何请求。
图6字节写时序图
用页写操作24C02一次可以写入16个字节的数据,页写操作的启动和字节写一样,不同在于在传送了一个字节之后主器件并不产生停止信号,主器件被允许额外发送15个字节,在24C02接收到数据后会发出一个应答信号并将字节地址低位加一,高位保持不变。
当24C02受到停止信号后,启动内部写周期把数据写入数据区,所有接收的数据在一个机器周期内写入器件内部。
图7页写时序图
立即地址读很简单只需发送器件地址后便可以读数据了,立即地址读是从上次读/写操作地址后一位开始的。
选择性读操作允许主器件对寄存器的任意地址进行读操作,主器件首先通过发送起始信号、器件地址和它想读的字节数据地址执行一个伪写操作,在24C02应答之后主器件重新发送起始信号和从器件地址,此时R/W位置一,从器件响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件不发送应答信号但要产生一个停止信号。
连续性读操作可以以立即读或选择性读为起始,在24C02发送完一个数据后主器件发送一
个应答信号告诉从器件需要更多数据,从器件在收到每个应答信号后都会发送一个8位字节数
据,当主器件不发送应答信号而发送停止信号时结束。
图8选择性读时序图
图9连续读时序图
3.3状态显示及LED指示电路的设计
状态显示电路用三个数码管作指示,单片机通过串行口把所要显示的字型码传给74LS164,164的输出端接数码管便能指示出相应的状态。
在没有用户输入密码时三个数码管动态显示OFF并且有一红发光管亮表示此时锁是关闭的,当有用户输入密码时红灯熄灭有一绿发光管一
图10显示电路控制图
闪一闪表明可以输入密码并且在倒计时,此时三数码管上显示一条横线,当用户输入密码正确时三个数码管会有一个动态箭标指示并且前一发光管熄灭另一个绿发光管会点亮,表示锁已打开这个状态维持一段时间后会自动退出返回到初始状态;当管理员进行修改密码时如果输入修改密码正确时横线后面会出现一个P表示此时可以输入新的密码,输完后按下确定键便可以将密码存储并返回到初始状态。
3.4报警电路的设计
报警电路是用一个蜂鸣器和一个红色的发光管组成的。
在没有报警时蜂鸣器可用于按键提示音,当用户输入密码时间超过12秒或输错次数超过3次时报警电路就会触发,蜂鸣器就会发出蜂鸣声发光管也会发光,报警时蜂鸣器会发出间歇的蜂鸣声,发光管也会一闪一闪的发光,进行报警。
3.5总体电路原理分析
首先向24C02中写入预设密码,密码存储空间分配为:
00H至10H为用户密码存储区00H中存储密码位数01H至10H中存储开锁密码数据,11H至21H为管理员密码存储区11H中存储密码位数12H至21H中存储管理员密码数据,22H至32H为报警密码存储区22H中存储密码位数23H至32H中存储报警密码数据。
在没有密码输入时显示电路动态显示OFF此时只有按下相应的功能键后才能进行相应的操作在没有按下功能时按数字键系统不会有反应,只有按键的蜂鸣声。
动态显示OFF是通过适当的延时程序和发送一些特别字型码实现的,实际上在系统动态显示OFF的同时程序也在不断地调用键盘扫描子程序不断地检测是否有按键按下,动态显示其实是次要的主要是要对键盘高频率的扫描包括延时电路中也要不断地调用扫描,时刻检测是否有按键按下,只有这样才能在进行动态显示的同时也能对键盘上所按下的按键进行判断。
单片机检测功能键是否按下是根据有按键按下产生的相应键值来进行判断的,在初次进行键盘扫描时可用比较语句进行判断,根据按键所产生的键值和各个功能键的键值进行比较如果和其中的一个值相等那就说明该键值所对应的功能键被按下程序就会跳转到相应的程序子模块下进行相应的检测和操作;如果所得的键值和所有的功能键值都不相等那说明没有功能被按下,程序就会返回动态显示程序段继续进行显示和键盘扫描。
当程序跳转到相应功能程序时首先要给出相应的标志位,标志位是通过给相应的存储单元特殊值来实现,这些存储单元在整个程序运行过程中都不能被占用,用来专门指示程序执行的状态和进程。
当有功能键按下时程序给出标志为后会跳转到下一个子程序中,该程序前部分不分当前是什么状态只要在没有按下确定键时就将所按下的数字键的相应键值暂时存储到数据存储器的一个相应的存储区域内,程序也会记下所按下的按键次数作为输入的密码长度存储起来,但是也会自动限制输入的密码长度,当所输入的密码长度大于16位时程序会自动把密码长度位清零暂存数据地址也会返回到起始地址,当再有密码数据输入时就会自动将先前输入的数据覆盖。
当程序检测到有确定键按下时,程序首先就会去读取各个标志为的状态值,查看现在是处于一个什么样的状态,这样通过标志单元判别就能清楚地知道下一步该执行什么样的操作。
若通过标志位判断出现在是用户输入的开锁密码时程序就会进入下一个子程序,该子程序专门用来进行用户开锁密码比较,程序首先对24C02进行读操作,所读的首地址已在该程序开始时定下,读出数据的第一位为所存储密码的长度位,每读出一字节数据后便和单片机预存数据区中的数据比较,如果相等就再读下一位,如果不相等就会停止读操作并返回,返回后程序根据所比较的数据位数进行判断输入密码的正误,比较数据的长度在比较开始前就已确定,每比较一次就会减一,如果比较的数据位数最后检测出为零则说明密码输入正确,程序就会给显示电路一组代表开锁成功的信号,同时也将一
个绿色发光管也点亮以指示密码输入正确锁已打开,此状态维持一段时间后蜂鸣器还会再响一
图11主程序流程图
段时间并返回到初始状态时的显示程序中。
如若密码输入不正确程序会跳入另一个子程序,该程序中定义了一个固定的单元用于专门存放错误次数,在系统上电初期会对该单元进行清零并且在程序运行过程中不能再使用该单元,一进入该程序后就会对该单元的数据进行加一操作,之后对该单元数据进行比较,如果数值等于三就会进行报警,如果不等于就跳回键盘循环扫描程序,使用户能够重新进行密码输入,在密码输入过程中程序也会启动一个12S定时程序,如果用户在12S之内没有按下确定键程序就会自动跳转到报警程序进行报警。
报警后系统必须输入正确的解除报警密码后才会将报警撤除。
修改各种密码的过程和上述程序执行的过程很相似只要给出相应的标志位后程序就会根据标志位进入相应的程序自动执行。
4结束语
通过这次单片机课程设计使我更加深入地掌握了单片机知识以及一些外围电路的使用,也使我尝试到了去制作一个完整系统的步骤和过程,通过这样一次设计使我有了一个全面的提高。
对外围器件的使用,特别是对24C02的使用使我对I2C协议有了一个更深入的认识和掌握,通过对实际器件的使用能够使我们去真正地验证理论,我认为这样有助于培养我们的学习思维习惯和能力,因为我们总是进行单纯的理论学习,这样我们只能够单方面的接收书本知识,既是有疑惑也只能是去查资料,而通过这次课程设计我们可以通过对实际器件的使用来解决所遇到的问题和验证书本知识,总的来说这次课程设计使我有了一个整体的提高,我相信这对我以后的学习和工作都将是一次很好的锻炼。
参考文献
[1]李朝青.单片机原理及接口技术[M].第三版.北京:
北京航空航天大学出版社,2005
[2]肖玲妮,袁增贵.Protel99SE硬刷电路板设计教程[M].北京:
清华大学出版社,2003
[3]康华光.电子设计基础[M].第五版.北京:
高等教育出版社,2006
[4]余小平,奚大顺.电子系统设计.[M].北京:
北京航空航天大学出版社,2007
[5]汪道辉.单片机系统设计与实践[M].北京:
电子工业出版社,2006
附录1
主程序
ORG0000H
AJMPMAIN
ORG000BH
LJMPPJZHONG
ORG001BH
LJMPPJFG
ORG0023H
CLRTI
RETI
ORG0030H
MAIN:
CLRP2.2
MOV2DH,#00H
MOV2EH,#00H
MOV2FH,#00H
MOV20H,#0FFH
MOV21H,#0FFH
MOV22H,#0FFH
MOV23H,#0FFH
MOV24H,#0FFH
MOV25H,#0FFH
MOV26H,#0FFH
MOV27H,#0FFH
SCLBITP2.1
SDABITP2.0
SETBEA
SETBES
CLRTI
MAIN0:
MOVP1,#00H
SETBP1.1
CLRTR0
CLRTR1
MOVA,#0FFH
MOVSBUF,A
LCALLKEY
MOVA,#0FFH
MOVSBUF,A
LCALLKEY
MOVA,#11H
MOVSBUF,A
LCALLDELAY
MOVA,#0FFH
MOVSBUF,A
LCALLKEY
MOVA,#11H
MOVSBUF,A
LCALLKEY
MOVA,#87H
MOVSBUF,A
LCALLDELAY
MOVA,#11H
MOVSBUF,A
LCALLKEY
MOVA,#87H
MOVSBUF,A
LCALLKEY
MOVA,#87H
MOVSBUF,A
LCALLDELAY
AJMPMAIN0
KEY:
MOVP0,#0F0H
MOVR7,#0FH
KEY1:
DJNZR7,KEY1
MOVA,P0
CPLA
ANLA,#0F0H
JZEKEY
LCALLDEL20MS
SKEY1:
SETBP1.0
MOVA,#00
MOVR0,A
MOVR1,A
MOVR3,#0FEH
SKEY2:
MOVA,R3
MOVP0,A
NOP
NOP
NOP
MOVA,P0
MOVR1,A
CPLA
ANLA,#0F0H
S123:
JNZSKEY3
INCR0
SETBC
MOVA,R3
RLCA
MOVR3,A
MOVA,R0
CJNEA,#04H,SKEY2
EKEY:
RET
SKEY3:
MOVA,R1
JNBACC.4,SKEY5
JNBACC.5,SKEY6
JNBACC.6,SKEY7
JNBACC.7,SKEY8
AJMPEKEY
SKEY5:
MOVA,#00H
MOVR2,A
AJMPDKEY
SKEY6:
MOVA,#01H
MOVR2,A
AJMPDKEY
SKEY7:
MOVA,#02H
MOVR2,A
AJMPDKEY
SKEY8:
MOVA,#03H
MOVR2,A
AJMPDKEY
DKEY:
MOVA,R0
MOVB,#04H
MULAB
ADDA,R2
MOVB,A
KEY000:
MOVP0,#0F0H
MOVR7,#0FH
KEYY:
DJNZR7,KEYY
MOVA,P0
CPLA
ANLA,#0F0H
JNZKEY000
MOVA,B
CLRP1.0
LCALLDEL20MS
CJNEA,#0AH,NEXT0
LCALLHENG
LCALLXGYHMM
RET
NEXT0:
CJNEA,#0BH,NEXT1
LCALLHENG
LCALLXGGLMM
RET
NEXT1:
CJNEA,#0CH,NEXT2
LCALLHENG
LCALLYHSRMM
RET
NEXT2:
CJNEA,#0DH,NEXT3
LCALLXSCGCS
RET
NEXT3:
CJNEA,#0EH,NEXT4
LCALLHENG
LCALLXGPJMM
RET
NEXT4:
RET
XGYHMM:
MOV21H,#01H
MOV20H,#0FFH
MOV22H,#0FFH
MOV23H,#0FFH
MOV24H,#0FFH
MOV25H,#0FFH
MOV26H,#0FFH
MOV27H,#0FFH
LCALLMMSR
MOV2FH,#00H
RET
XGGLMM:
MOV22H,#01H
MOV20H,#0FFH
MOV21H,#0FFH
MOV23H,#0FFH
MOV24H,#0FFH
MOV25H,#0FFH
MOV26H,#0FFH
MOV27H,#0FFH
LCALLMMSR
MOV2FH,#00H
RET
YHSRMM:
MOV20H,#01H
MOV21H,#0FFH
MOV22H,#0FFH
MOV23H,#0FFH
MOV24H,#0FFH
MOV25H,#0FFH
MOV26H,#0FFH
MOV27H,#0FFH
LCALLMMSR
MOV2FH,#00H
RET
XGPJMM:
MOV26H,#01H
MOV20H,#0FFH
MOV21H,#0FFH
MOV22H,#0FFH
MOV23H,#0FFH
MOV24H,#0FFH
MOV25H,#0FFH
MOV27H,#0FFH
LCALLMMSR
MOV2FH,#00H
RET
MMSR:
CLRP1.1
SETBP1.2
MOV71H,#14H
MOVTMOD,#01H
MOVTL0,#0B0H
MOVTH0,#3CH
SETBTR0
SETBET0
SETBEA
MOV70H,#0BH
MMSR0:
MOVR1,#31H
MOV77H,#00H
KKEY:
MOVP0,#0F0H
MOVR7,#1FH
KKEY1:
DJNZR7,KKEY1
MOVA,2FH
CJNEA,#03H,KKEEY2
LJMPPJDL
KKEEY2:
MOVA,P0
CPLA
ANLA,#0F0H
JZKKEY
LCALLDEL20ms
KKKEY1:
SETBP1.0
MOVA,#00
MOVR0,A
MOVR5,A
MOVR3,#0FEH
KKEY22:
MOVA,R3
MOVP0,A
NOP
NOP
NOP
MOVA,P0
MOVR5,A
CPLA
ANLA,#0F0H
JNZKKEY33
INCR0
SETBC
MOVA,R3
RLCA
MOVR3,A
MOVA,R0
CJNEA,#04H,KKEY22
KKEY0:
RET
KKEY33:
MOVA,R5
JNBACC.4,KKEY55
JNBACC.5,KKEY66
JNBACC.6,KKEY77
JNBACC.7,KKEY88
AJMPKKEY0
KKEY55:
MOVA,#00H
MOVR2,A
AJMPDKEY0
KKEY66:
MOVA,#01H
MOVR2,A
AJMPDKEY0
KKEY77:
MOVA,#02H
MOVR2,A
AJMPDKEY0
KKEY88:
MOVA,#03H
MOVR2,A
AJMPDKEY0
DKEY0:
MOVA,R0
MOVB,#04H
MULAB
ADDA,R2
MOV76H,A
KKEY000:
MOVP0,#0F0H
MOVR7,#0FH
KEYYY:
DJNZR7,KEYYY
MOVA,P0
CPLA
ANLA,#0F0H
JNZKKEY000
MOVA,76H
CLRP1.0
LCALLDEL20MS
CJNEA,#0AH,A1
AJMPKKEY
A1:
CJNEA,#0BH,A2
AJMPKKEY
A2:
CJNEA,#0CH,A3
AJMPKKEY
A3:
CJNEA,#0EH,A4