单片机电子密码锁的设计(汇编语言).docx
一、设计总说明 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、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 ACC.4,LOP 未按键返回 MOV R0,#7EH MOV R7,#05H PUSH A SETD: DEC R0 MOV A,R0INC R0 MOV R0,ADEC 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 ACC.0,BL1 MOV A,#0 SJMP BLKP BL1: ACC.1,BL2 MOV A,#08H SJMP BLKP BL2: ACC.2,BL3 MOV A,#10H SJMP BLKP BL3: ACC.3,BL MOV A,#18H BLKP: ADD A,R4 PUSH ACCBLK3: 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,R2JNB ACC.7,BKLD RL A MOV R2,A SJMP BLK4 BLKD: SJMP KEYBBKS: 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 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,79HRET - 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,INITLOP: LCALL DISP LCALL KEYB 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 ACC.0,BL1 MOV A,#0 SJMP BLKP BL1: ACC.1,BL2 MOV A,#08H SJMP BLKP BL2: ACC.2,BL3 MOV A,#10H SJMP BLKP BL3: 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 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位数字。不可以显示只能重新换过。 程序的调试是比较复杂的部分,它又可以分为比较部分和键盘部分。 首先在输入程序时,应该先输入键盘部分,然后单独运行键盘程序看键盘输入时数码管能否显示出与键盘输入的数字相对应的数字。 然后以键盘程序为主程序,把比较部分的程序作为子程序输入。那是由于键盘程序中我们所输入的数字存在79H7EH显示缓存中只能在键盘程序中被调用,如果把键盘程序作为子程序,那我们在比较部分中要掉用显示缓存中的数据便不可行。 比较部分时遇到最大的问题就是把密码部分与我们输入的数据作比较,而2个数据又不能直接比较,因此需要一个中间量,我们取A寄存器作为密码的存放位置,然而当我们输入 MOV A,40H(密码地址) COMP1: CJNE A,7EH,ONCE时,A中却不能出现40H单元中的数据,这样无论怎么比较都是没用的,永远都是错的。 八、总结与体会 以上为实习期间所设计的基于8051单片机电子密码锁电路,它经过多次修改和整理,以是一个比较不错的设计,可以满足人们的基本要求,但因为水平有限,此电路中也存在一定的问题,譬如说电路的密码不能遗忘,一旦遗忘,就很难打开,这可以通过增加电路解决,但过于复杂,本次设计未其中; 通过这两周的设计,我们获得巨大收获:首先,通过学习使自己对课本上的知识可以应用于实际,使的理论与实际相结合,加深自己对课本知识的更好理解,同时实习也段练了我们团结合作精神,能够充分利用图书馆去查阅资料,增加了许多课本以外的知识,能达到学以致用。对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。 九、参考文献 1黄仁欣主编,马彪副主编.单片机原理及运用技术. :清华大学,2005 2黄正瑾编著.CPLD系统设计技术入门与应用. : 电子工业, 2002 3自美编著.电子线路设计·实验·测试.华中理工大学,2002 4 康华光主编.电子技术 基础(第四版).:高等教育,1999