简介:
目 录摘要..........................................(03)关键字........................................(03)1 前言..........................................(04)2 系统设计......................................(04)2.1 电子密码锁的工作原理......................(04)2.2 系统硬件组成..............................(04)2.3 矩阵键盘扫面工作原理......................(05)2.4 LED数码管动态显示原理.....................(05)2.5 电子密码锁系统硬件设计..... ..............(06)2.6 电子密码锁系统软件设计....... ............(07)3 设计体会与结论................................(07)4附录...........................................(08)5参考文献.......................................(13)摘要电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下: 1.保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。 2.密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。 3.误码输入保护。当输入密码多次错误时,报警系统自动启动。 4. 电子密码锁操作简单易行,一学即会。关键字;单片机 LED数码管 矩阵键盘 密码锁AbstractElectronic Code Lock is a password input through the control circuit, or chip, thus controlling the closed mechanical switch to complete the lock, closed the task of electronic products. It is of many types, have a simple circuit products, but also the higher cost chip-based products. Now the widely used electronic code lock is a chip at the core, achieved through programming. Performance and safety have greatly exceeded the mechanical lock, the following features: 1. Privacy is good, coding quantity is far greater than the spring lock. Random unlocking success rate is almost zero. 2. Password variable. Users can always change the password, to prevent password theft, but also avoids the lock because of staff turnover Er Shi and drawing down. 3. Error input protection. When you enter your password wrong several times, the alarm system started automatically. 4. E-lock operation is simple, a school that will. Keywords; MCU LED digital tube matrix keypad lock 1 前言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。2 系统设计2.1电子密码锁的工作原理电子密码锁是以51系列单片机(AT89C51)为核心,配以相应硬件电路,完成密码的识别和显示、驱动电磁执行器并检测其驱动电流值。 单片机接收键入的代码,并与存贮在EEPROM中的密码进行比较,如果密码正确,则驱动电磁执行器开锁;如果密码不正确,则允许操作人员重新输入密码,单片机将每次开锁操作和此时电磁执行器的驱动电流值作为状态信息发送给智能监控器,同时将接收来自传感器接口的报警信息也发送给智能监控器,作为智能化分析的依据。 2.2系统硬件组成如图(1)所示,系统采用单片机ATC89C51作为控制的核心,完成系统的控制操作。单片机核心接受来自键盘扫面电路的道德键值,判断是数字键还是操作键,并送相应的处理程序。单片机提供动态扫描电路的显示码和位选信号,使动态显示电路正常工作。键盘扫面电路采用4*4键盘,编号0~9做为数字键“0~9”,编号14做为关锁操作功能键,编号15做为确定功能键。编号13为修改密码键,编号12作为电子锁报警后的解锁键,编号11为清除显示屏键。动态扫描电路采用4块LED数码管,利用人眼的延迟效应通过合理的软件设计使显示电路显示数字。供电采用5V直流电压电源2.3矩阵键盘扫描工作原理矩阵式键盘又成为行列式键盘,是将I/O线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,如图()所示。这种设计减少键盘与单片机I/O接线的数目。只需要N个行线和M个列线就可以实现N*M个键的操作。行扫描法识别键值的原理(1) 将第0 行变为低电平,其余行为高电平,输出编码为1110.然后读取列的电平,判别第0行是否有键按下。在第0行上若有键按下,则相应的列被拉低为低电平,则表示第0行和此列相交的位置上有键按下,进而判别哪一列有键按下。若没有任一条列线为低电平,则说明0行上无键按下。(2) 用此方法扫描第1行,第2行,第3行,判断是哪个键按下。由此指出,按键的位置码比不等于按键的实际定义键值,因此还需要进行转换。2.4 LED数码管动态显示原理将所有的位选线并联在一起,由一个8位I/O口控制,实现各位的分时选通。如图()所示。2.5电子密码锁系统硬件设计键盘部分如图()所示,采用行列式键盘,P1口作为与行列式键盘的接口。低四位做为行选线,高四位作为列选线。采用逐行扫描的方法完成。LED动态显示部分采用7SEG-MPX4-CC 八段数码管,总共有四个八段数码管,共阴极的方法,未选信号为低电平有效。数据接口与P2相连,P2.0~P2.7对应a~dp。未选信号与P3相连,P3.0~P3.3对应4~1.仿真电灯一端与P0.0相连,另一端与5V的直流电源相连。2.6电子密码锁系统软件设计软件是系统的核心,控制硬件的工作。对于单片机的开发,可以采用C语言,也可以采用汇编语言。本次设计中,开发了两套软件分别使用C语言和汇编语言。从可读性来讲C语言相对要好一点。从简洁性来说汇编要好一点。详细代码参见附录。流程图参见附录图(9)软件分析:以C语言为例。系统的参数传递采用全局变量的形式全局变量有:uchar output[4];uchar input[4];uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};uchar f0=1;uchar pass[4]={4,3,2,1};sbit p0_0=P0^0;数组output用于存储用于数码管输出的码值,input用于存储按键的键值led用于查表,存储数码管的对应编码,f0为密码配对标志,为1表示密码正确,否责密码不正确,pass用于存放密码,p0_0为P0.0口。采用C语言与汇编混合编程,C作为主函数调用汇编子程序scan(),通过寄存器传递参数。主要函数为scan(),完成对键盘的扫描并返回扫描的键值。Sodesw(),完成从键值到显示数码管码值的转换。display(),完成动态显示数码管。cmp(),完成输入密码与系统密码的比较,正确则开锁,错误不开。clean(),完成对输入的密码的清除。各部分的工作,如流程图所示,图()3.体会与结论4.附录方案一:C程序中有一个小错误,但是是致命的。作为学习只用,请你找出来。若是找不到,请联系红狐狸,zhaowei153@126.com。但是方案二的汇编实现是可以用的。c语言代码://mimasuo.c#include#define uchar unsigned char#define uint unsigned intextern uchar scan(void);uchar output[4];uchar input[4];uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};uchar f0=0;uchar pass[4]={4,3,2,1};uchar toppass[4]={ 8,8,6,6};sbit p0_0=P0^0;sbit p0_1=P0^1;sbit p0_2=P0^2;sbit p0_3=P0^3;void codesw(void){ int i; for(i=0;i<4;i++) { output[i]=led[input[i]]; } }void display(void){ char i; char k,j; uchar select; codesw(); select=0xfe; for(i=0;i<4;i++) { P3=select; P2=output[i]; for(k=0;k<=70;k++) { for(j=0;j<=10;j++); } select=~select; select<<=1; select=~select; } }void cmp(void){ char i; if(p0_3==0) { for(i=0;i<4;i++) { if(input[i]!=toppass[i]) break; } if(i>=4){f0=1;} else f0=0; } else { for(i=0;i<4;i++) { if(input[i]!=pass[i]) break; } if(i>=4){f0=1;} else f0=0; } }void clean(void){ int i; for(i=0;i<4;i++) input[i]=10;}void main(void){ uchar keyno; uchar keyno1; uchar counter=0; uchar expass=0; uchar extoppass=0; p0_0=1; p0_1=1; p0_2=1; clean(); while(1) { while(1) { display(); keyno=scan(); if((keyno>=0x0)&&(keyno<=0xf)) break; else ; } while(1) { keyno1=scan(); if((keyno>=0x0)&&(keyno1<=0xf)); else break; } if(keyno==0xe) { p0_0=1; f0=0; clean(); } if(keyno==0xf) { if(expass==2) { pass[3]=input[3]; pass[2]=input[2]; pass[1]=input[1]; pass[0]=input[0]; p0_1=1; expass=0; } else if((p0_3==0x0)&&(f0==0)) { cmp(); if(f0!=1){clean();} if(f0==1){counter=0;p0_3=1;p0_0=0; clean();} } else { counter++; if((counter)<=3) { cmp(); if(f0!=1) {clean();} if(f0==1){p0_0=0; clean();counter=0x0; } } else if(p0_0==0){counter=0;} else { for(keyno1=0;keyno1<=254;keyno1++) { for(counter=5;counter<=200;counter++) { p0_2=0; } p0_2=1; } clean(); } } } if(keyno==0xd) { if(f0==1) { expass=1; p0_1=0; } } if(keyno==0x0c) { if(counter>=4) { p0_3=0; extoppass=1; } } if(keyno==0xb) { clean(); } if((keyno>=0)&&(keyno<=9)) { input[3]=input[2]; input[2]=input[1]; input[1]=input[0]; input[0]=keyno; if(expass==1){expass++;} if(extoppass==1){extoppass++;} } }} 汇编代码:;scan.asm$NOMOD51NAME SCANP0 DATA 080HP1 DATA 090HP2 DATA 0A0HP3 DATA 0B0HT0 BIT 0B0H.4AC BIT 0D0H.6T1 BIT 0B0H.5EA BIT 0A8H.7IE DATA 0A8HRD BIT 0B0H.7ES BIT 0A8H.4IP DATA 0B8HRI BIT 098H.0INT0 BIT 0B0H.2CY BIT 0D0H.7TI BIT 098H.1INT1 BIT 0B0H.3PS BIT 0B8H.4SP DATA 081HOV BIT 0D0H.2WR BIT 0B0H.6SBUF DATA 099HPCON DATA 087HSCON DATA 098HTMOD DATA 089HTCON DATA 088HIE0 BIT 088H.1IE1 BIT 088H.3B DATA 0F0HACC DATA 0E0HET0 BIT 0A8H.1ET1 BIT 0A8H.3TF0 BIT 088H.5TF1 BIT 088H.7RB8 BIT 098H.2TH0 DATA 08CHEX0 BIT 0A8H.0IT0 BIT 088H.0TH1 DATA 08DHTB8 BIT 098H.3EX1 BIT 0A8H.2IT1 BIT 088H.2P BIT 0D0H.0SM0 BIT 098H.7TL0 DATA 08AHSM1 BIT 098H.6TL1 DATA 08BHSM2 BIT 098H.5PT0 BIT 0B8H.1PT1 BIT 0B8H.3RS0 BIT 0D0H.3TR0 BIT 088H.4RS1 BIT 0D0H.4TR1 BIT 088H.6PX0 BIT 0B8H.0PX1 BIT 0B8H.2DPH DATA 083HDPL DATA 082HREN BIT 098H.4RXD BIT 0B0H.0TXD BIT 0B0H.1F0 BIT 0D0H.5PSW DATA 0D0H?PR?scan?SCAN SEGMENT CODE PUBLIC scan RSEG ?PR?scan?SCANscan: USING 0 MOV R3, #0FEH MOV R4, #0H MOV R1, #4H CLR PSW.5L1: MOV A, R3 MOV P1, A MOV R5, #50D1: MOV R6, #100 DJNZ R6, $ DJNZ R5, D1 MOV A, P1 ANL A, #0F0H MOV R2, #4L2: JB ACC.4, N1 MOV 7EH, R4 SETB PSW.5N1: INC R4 RR A DJNZ R2, L2 MOV A, R3 RL A MOV R3, A DJNZ R1, L1BACK: JNB PSW.5, NO_KEY AJMP SCANOUTNO_KEY: MOV 7EH, #20H SCANOUT: MOV R7,7EH ?C0001: RET END方案二:REL EQU 60HRELBUF EQU 61HKEYNO EQU 62HFKEY EQU 20H.0F0_0 EQU 20H.1 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV SP, #6FH ACALL CLEANSTART: ACALL DISPLAY CLR FKEY ACALL SCAN JB FKEY, G1 SJMP STARTG1: ACALL SCAN JB FKEY, G1 MOV A, KEYNO CJNE A, #14, G2 AJMP G4G2: CJNE A, #15, G3 ACALL CMP JNB F0_0, G4 CLR P0.0 LCALL DELAY1 CLR F0_0 ACALL CLEAN AJMP STARTG3: MOV 43H, 42H MOV 42H, 41H MOV 41H, 40H MOV 40H, KEYNO AJMP STARTG4: SETB P0.0 ACALL CLEAN AJMP STARTCMP: MOV REL, #00H MOV R0, #40H MOV R7, #4HCMP1: MOV DPTR, #PASS MOV RELBUF, @R0 MOV A, REL MOVC A, @A+DPTR CJNE A, RELBUF, CMPOUT INC REL INC R0 DJNZ R7, CMP1 SETB F0_0CMPOUT: MOV REL, #00H RETSCAN: MOV R3, #0FEH MOV R4, #0H MOV R1, #4H CLR PSW.5L1: MOV A, R3 MOV P1, A MOV R5, #1 ACALL DELAY MOV A, P1 ANL A, #0F0H MOV R2, #4L2: JB ACC.4, N1 MOV KEYNO, R4 SETB PSW.5N1: INC R4 RR A DJNZ R2, L2 MOV A, R3 RL A MOV R3, A DJNZ R1, L1BACK: JNB PSW.5, NO_KEY SETB FKEY AJMP SCANOUTNO_KEY: CLR FKEYSCANOUT: RETCODESW: MOV R0, #40H MOV R1, #50H MOV R7, #4SW1: MOV DPTR, #TAB MOV A, @R0 MOVC A, @A+DPTR MOV @R1, A INC R0 INC R1 DJNZ R7, SW1 RETDISPLAY: ACALL CODESW MOV A, #0FEH MOV R5, #4 MOV R0, #50HDIS1: MOV P3, A MOV P2, @R0 ACALL DELAY INC R0 SETB C RLC A DJNZ R5, DIS1 RETCLEAN: MOV 40H, #0AH MOV 41H, #0AH MOV 42H, #0AH MOV 43H, #0AH RETDELAY: MOV R7, #25D1: MOV R6, #100 DJNZ R6, $ DJNZ R7, D1 RETDELAY1: MOV R7, #245D11: MOV R6, #225D12: DJNZ R6, D12 DJNZ R7, D11 RETPASS: DB 4,3,2,1TAB: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH DB 40H,40H,40H,40H,86H,8EH END 图(1)系统硬件组成图显示的数字 LED码0 3FH1 06H2 5BH3 4FH4 66H5 6DH6 7DH7 07H8 7FH9 6FH- 40H 图(2)LED编码表参考电路图: 图(3)总体电路图 图(4)键盘接口电路 图(5)LED显示接口电路 图(6)开锁显示等电路 图(7)输入密码演示 图(8)锁开启电路5.参考文献