#单片机电子密码锁的设计(汇编语言)[1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计总说明
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平和市场的接收程度,电子密码锁是这类电子防盗产品的主流。
本次基于8051单片机电子密码锁的设计,其主要具有如下功能:
(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能
改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确以防止误操作。
(3)报警、锁定键盘功能。
密码输入用发光管显示,当连续3次输入错误密码,系统声光报警。
电子密码锁的设计主要由三部分组成:4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED提示灯等。
密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:
(1)密码输入功能:按下一个数字键,一个“-”就显示在最右边的数码管上,同时将先前输入的所有“-”向左移动一位。
(2)密码清除功能:当按下清除键时,清除前面输入的所有值,并清除所有显示。
(3)密码更改功能:将输入的值作为新的密码。
(4)开锁功能:当按下开锁键,系统将输入和密码进行检查核对,如果
确锁打开,否则不打开。
主要的设计实施过程:首先,选用8051单片机,以及选购其他电子元器件。
第二步,设计硬件电路。
第三步,编写单片机语言实现功能。
第四部,分别进行软件和硬件的调试。
最后,联合软、硬件调试整个系统,完成本次课程设计。
关键词:4×4矩阵键盘;8051单片机;密码锁;密码二次确认
二、绪论
2.1背景
随着社会物质财富的日益增长,安全防盗已成为社会问题。
而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。
目前国内,大部分人使用的还是传统的机械锁。
然而,眼下假冒伪劣的机械锁泛滥成灾,互开率非常之高。
所谓互开率,是各种锁具的一个技术质量标准,也就是1把钥匙能开几把锁的比率。
经国家工商局、国家内贸局、中国消协等部门对锁具市场的调查,发现个别产品的互开率居然超标26倍。
为何弹子锁的“互开率”会如此之高?据有关专家人士剖析,弹子锁质量好坏主要取决于弹子数量的多少以及弹子的大小,而弹子的多少和大小受一定条件的限制。
此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。
机械锁的这些弊端为一种新型的锁---电子密码锁,提供了发展的空间。
2.2电子锁
电子锁是采取电子电路控制,以电磁铁或者卫星电机和锁体作为执行装置的机电一体化锁具,相比传统的机械锁具,电子锁不使用金属钥匙,保密性、精度都有很大提高。
电子锁的发明思路,源自古代发明的自动机械,例如古希腊数学家赫伦的液压自动门,中国古代诸葛亮的木牛流马,它们以重力或蒸汽压力驱动,最广泛的用途乃是用在古代墓道的地下机关。
电子工业的诞生,使得以微小电量驱动机械成为可能,于是有了电子锁一日千里的跃进。
三、课题要求
本次课程设计,基于8051单片机电子密码锁的设计,利用4*4小键盘作为输入,LED作为显示。
当输入密码和设定的密码一致时,系统利用继电器输出解锁信号,其主要具有如下功能:
(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能
改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确以防止误操作。
(3)报警、锁定键盘功能。
密码输入用发光管显示,当连续3次输入错误密码,系统声光报警。
四、课题分析
电路主要包括矩阵键盘输入密码,外部密码验证,单片控制,原理方框图如下:
图一:电子密码锁原理方框图
4.1矩阵键盘输入控制电路
设计方案是非编码键盘,每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线和某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。
行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。
通过不断读行线口线,或者中断方式触发键位扫描。
当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。
当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。
将每个行线和列线的组合值作成列表,每次就可以通过查表确定键位,以决定之后要进行的操作。
五、课题方案选择
方案一:使用8051单片机,采用汇编语言编写程序,该程序语言功能强大,调试较为方便,具有很强的实用性。
方案二:利用数字逻辑电路,运用电压比较器,555单稳态电路,计数器,JK触发器,UPS电源等实现对门的电子控制。
方案三:使用8051单片机,利用基于单片机的C语言编写程序,通过Keil C51 uVision2软件进行仿真模拟。
方案二基于数字电路,操作繁琐,会出现较多的器件故障,同时调试复杂,难于维护。
方案三该逻辑语言较为复杂,编写程序时也较为复杂,还需进行软件仿真模拟,设计复杂。
综上所述,使用方案一,设计较为简便,调试简单,硬件电路较少,易于维护。
六、程序部分
ORG 1000H
MOV R4,#08H ;密码个数8个
MOV R0,#40H ;密码暂存区
MOV A,#00H ;初始密码0,1,2,3,4,5
GO: MOV @R0,A
INC R0
INC A
DJNZ R4,GO
SETB P3.0; 确认
SETB P3.1 ;锁开
SETB P3.2 ;错误
SETB P3.4 ;报警
MOV R0,#20H
MOV A,#03H
MOV @R0,A ;8155初始化
MOV R0,#79H
MOV R7,#06H
INIT: MOV @R0,#0 ;显示缓冲区清零INC R0
DJNZ R7,INIT
LOP: LCALL DISP
LCALL KEYB
JB ACC.4,LOP ;未按键返回
MOV R0,#7EH
MOV R7,#05H
PUSH A
SETD: DEC R0
MOV A,@R0
INC R0
MOV @R0,A
DEC R0
DJNZ R7,SETD
POP ACC
MOV @R0,A
MOV 7DH,7CH
CJNE ,A,#0AH,LOP
CLR P3.0
ACALL COMP
CJNE R3, #03H, LOP
CLR P3.4
SJMP LOP
----------------------------------- KEYB: LCALL BKS ;按键处理子程序JNZ BLK1
LCALL DISP
SJMP KEYB
BLK1: LCALL DISP
LCALL DISP
LCALL BKS
JNZ BLK2
LCALL DISP
SJMP KEYB
BLK2: MOV R2,#0FEH
MOV R4,#0
BLK4: MOV R1,#21H
MOV A,R2
MOVX @R1,A
MOV R1,#23H
MOVX A,@R1
JB ACC.0,BL1
MOV A,#0
SJMP BLKP
BL1: JB ACC.1,BL2
MOV A,#08H
SJMP BLKP
BL2: JB ACC.2,BL3
MOV A,#10H
SJMP BLKP
BL3: JB ACC.3,BL
MOV A,#18H
BLKP: ADD A,R4
PUSH ACC
BLK3: LCALL DISP
LCALL BKS
JNZ BLK3
POP ACC
CJNE A,#10H,PP
PP: JNC PP1
MOV DPTR,#TBL
MOVC A,@A+DPTR
PP1: RET
TBL: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H DB 02H,0FH,03H,0EH,0CH,0DH
BL: INC R4
MOV A,R2
JNB ACC.7,BKLD
RL A
MOV R2,A
SJMP BLK4
BLKD: SJMP KEYB
BKS: MOV R1,#21H
MOV A,#0
MOVX @R1,A
MOV R1,#23H
MOVX A,@R1
CPL A
ANL A,#0FH
RET
---------------------------------
DISP: MOV R0,#79H
MOV R3,#20H
BTL: MOV A,R3
MOV R1,#21H
MOVX @R1,A ;送位选码到PA口
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;查表
INC R1
MOVX @R1,A ;送显示码到PB口
LCALL DELAY ;延时
INC R0
MOV A,R3
JB ACC.0,HERE ;一轮显示完到HERE
RR A
MOV R3,A
SJMP BTL ;继续本轮显示
HERE: RET
TAB1: DB 0C0H,0F9,0A4H,0B0H,99H,92H,82H ;共阳显示码DB 0F8H,80H,90H
DELAY: MOV R6,#0FFH ;延时子程序
D1: MOV R5,#0FFH
D2: DJNZ R5,D2
DJNZ R6,D1
MOV 30H,7EH
MOV 31H,7DH
MOV 32H,7CH
MOV 33H,7BH
MOV 34H,7AH
MOV 35H,79H
RET
---------------------------------
COMP: MOV R1,#40H
MOV A,@R1
CJNE A,30H, MORE
INC R1
MOV A,@R1
CJNE A,31H, MORE
INC R1
MOV A,@R1
CJNE A,32H, MORE
INC R1
MOV A,@R1
CJNE A,33H, MORE
INC R1
MOV A,@R1
CJNE A,34H, MORE
SJMP K
MORE: INC R3
CLR P3.2
K: RET
END
ORG 1000H
MOV R4,#08H ;密码个数8个
MOV R0,#40H ;密码暂存区
MOV A,#00H ;初始密码0,1,2,3,4,5 GO: MOV @R0,A
INC R0
INC A
DJNZ R4,GO
SETB P3.0; 确认
SETB P3.1 ;锁开
SETB P3.2 ;错误
SETB P3.4 ;报警
MOV R0,#20H
MOV A,#03H
MOV @R0,A ;8155初始化
MOV R0,#79H
MOV R7,#06H
INIT: MOV @R0,#0 ;显示缓冲区清零INC R0
DJNZ R7,INIT
LOP: LCALL DISP
LCALL KEYB
JB ACC.4,LOP ;未按键返回
MOV R0,#7EH
MOV R7,#05H
PUSH A
SETD: DEC R0
MOV A,@R0
INC R0
MOV @R0,A
DEC R0
DJNZ R7,SETD
POP ACC
MOV @R0,A
MOV 7DH,7CH
CJNE ,A,#0AH,LOP
CLR P3.0
ACALL COMP
CJNE R3, #03H, LOP
CLR P3.4
SJMP LOP
-----------------------------------
KEYB: LCALL BKS ;按键处理子程序
JNZ BLK1
LCALL DISP
SJMP KEYB
BLK1: LCALL DISP
LCALL DISP
LCALL BKS
JNZ BLK2
LCALL DISP
SJMP KEYB
BLK2: MOV R2,#0FEH
MOV R4,#0
BLK4: MOV R1,#21H
MOV A,R2
MOVX @R1,A
MOV R1,#23H
MOVX A,@R1
JB ACC.0,BL1
MOV A,#0
SJMP BLKP
BL1: JB ACC.1,BL2
MOV A,#08H
SJMP BLKP
BL2: JB ACC.2,BL3
MOV A,#10H
SJMP BLKP
BL3: JB ACC.3,BL
MOV A,#18H
BLKP: ADD A,R4
PUSH ACC
BLK3: LCALL DISP
LCALL BKS
JNZ BLK3
POP ACC
CJNE A,#10H,PP
PP: JNC PP1
MOV DPTR,#TBL
MOVC A,@A+DPTR
PP1: RET
TBL: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H DB 02H,0FH,03H,0EH,0CH,0DH
BL: INC R4
MOV A,R2
JNB ACC.7,BKLD
RL A
MOV R2,A
SJMP BLK4
BLKD: SJMP KEYB
BKS: MOV R1,#21H
MOV A,#0
MOVX @R1,A
MOV R1,#23H
MOVX A,@R1
CPL A
ANL A,#0FH
RET
---------------------------------
DISP: MOV R0,#79H
MOV R3,#20H
BTL: MOV A,R3
MOV R1,#21H
MOVX @R1,A ;送位选码到PA口
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;查表
INC R1
MOVX @R1,A ;送显示码到PB口
LCALL DELAY ;延时
INC R0
MOV A,R3
JB ACC.0,HERE ;一轮显示完到HERE
RR A
MOV R3,A
SJMP BTL ;继续本轮显示
HERE: RET
TAB1: DB 0C0H,0F9,0A4H,0B0H,99H,92H,82H ;共阳显示码DB 0F8H,80H,90H
DELAY: MOV R6,#0FFH ;延时子程序
D1: MOV R5,#0FFH
D2: DJNZ R5,D2
DJNZ R6,D1
MOV 30H,7EH
MOV 31H,7DH
MOV 32H,7CH
MOV 33H,7BH
MOV 34H,7AH
MOV 35H,79H
RET
---------------------------------
COMP: MOV R1,#40H
MOV A,@R1
CJNE A,30H, MORE
INC R1
MOV A,@R1
CJNE A,31H, MORE
INC R1
MOV A,@R1
CJNE A,32H, MORE
INC R1
MOV A,@R1
CJNE A,33H, MORE
INC R1
MOV A,@R1
CJNE A,34H, MORE
SJMP K
MORE: INC R3
CLR P3.2
K: RET
END
七、系统调试
电子密码锁主要由矩阵键盘,LED数码显示器,提示灯,单片机程序组成。
调试部分主要是数码显示和程序细节的调试。
数码管调试主要是看其能否完整显示6位数字。
不可以显示只能重新换过。
程序的调试是比较复杂的部分,它又可以分为比较部分和键盘部分。
首先在输入程序时,应该先输入键盘部分,然后单独运行键盘程序看键盘输入时数码管能否显示出和键盘输入的数字相对应的数字。
然后以键盘程序为主程序,把比较部分的程序作为子程序输入。
那是由于键盘程序中我们所输入的数字存在79H~7EH显示缓存中只能在键盘程序中被调用,如果把键盘程序作为子程序,那我们在比较部分中要掉用显示缓存中的数据便不可行。
比较部分时遇到最大的问题就是把密码部分和我们输入的数据作比较,而2个数据又不能直接比较,因此需要一个中间量,我们取A寄存器作为密码的存放位置,然而当我们输入
MOV A,40H(密码地址)
COMP1: CJNE A,7EH,ONCE时,A中却不能出现40H单元中的数据,这样无论怎么比较都是没用的,永远都是错的。
八、总结和体会
以上为实习期间所设计的基于8051单片机电子密码锁电路,它经过多次修改和整理,以是一个比较不错的设计,可以满足人们的基本要求,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,这可以通过增加电路解决,
但过于复杂,本次设计未其中;
通过这两周的设计,我们获得巨大收获:首先,通过学习使自己对课本上的知识可以使用于实际,使的理论和实际相结合,加深自己对课本知识的更好理解,同时实习也段练了我们团结合作精神,能够充分利用图书馆去查阅资料,增加了许多课本以外的知识,能达到学以致用。
对我们学生来说,理论和实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。
九、参考文献
[1]黄仁欣主编,马彪副主编.单片机原理及运用技术.
北京:清华大学出版社,2005
[2]黄正瑾编著.CPLD系统设计技术入门和使用. 北京: 电子工业出版社, 2002
[3]谢自美编著.电子线路设计·实验·测试.华中理工大学出版社,2002
[4] 康华光主编.电子技术基础(第四版).北京:高等教育出版社,1999。