一、设计总说明随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、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语言编写程序,通过KeilC51uVision2软件进行仿真模拟。方案二基于数字电路,操作繁琐,会出现较多的器件故障,同时调试复杂,难于维护。方案三该逻辑语言较为复杂,编写程序时也较为复杂,还需进行软件仿真模拟,设计复杂。综上所述,使用方案一,设计较为简便,调试简单,硬件电路较少,易于维护。六、程序部分ORG1000HMOVR4,#08H密码个数8个MOVR0,#40H密码暂存区MOVA,#00H初始密码0,1,2,3,4,5GO:MOV@R0,AINCR0INCADJNZR4,GOSETBP3.0;确认SETBP3.1锁开SETBP3.2错误SETBP3.4报警MOVR0,#20HMOVA,#03HMOV@R0,A;8155初始化MOVR0,#79HMOVR7,#06HINIT:MOV@R0,#0;显示缓冲区清零INCR0DJNZR7,INITLOP:LCALLDISPLCALLKEYBJBACC.4,LOP;未按键返回MOVR0,#7EHMOVR7,#05HPUSHASETD:DECR0MOVA,@R0INCR0MOV@R0,ADECR0DJNZR7,SETDPOPACCMOV@R0,AMOV7DH,7CHCJNE,A,#0AH,LOPCLRP3.0ACALLCOMPCJNER3,#03H,LOPCLRP3.4SJMPLOP-----------------------------------KEYB:LCALLBKS;按键处理子程序JNZBLK1LCALLDISPSJMPKEYBBLK1:LCALLDISPLCALLDISPLCALLBKSJNZBLK2LCALLDISPSJMPKEYBBLK2:MOVR2,#0FEHMOVR4,#0BLK4:MOVR1,#21HMOVA,R2MOVX@R1,AMOVR1,#23HMOVXA,@R1JBACC.0,BL1MOVA,#0SJMPBLKPBL1:JBACC.1,BL2MOVA,#08HSJMPBLKPBL2:JBACC.2,BL3MOVA,#10HSJMPBLKPBL3:JBACC.3,BLMOVA,#18HBLKP:ADDA,R4PUSHACCBLK3:LCALLDISPLCALLBKSJNZBLK3POPACCCJNEA,#10H,PPPP:JNCPP1MOVDPTR,#TBLMOVCA,@A+DPTRPP1:RETTBL:DB07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00HDB02H,0FH,03H,0EH,0CH,0DHBL:INCR4MOVA,R2JNBACC.7,BKLDRLAMOVR2,ASJMPBLK4BLKD:SJMPKEYBBKS:MOVR1,#21HMOVA,#0MOVX@R1,AMOVR1,#23HMOVXA,@R1CPLAANLA,#0FHRET---------------------------------DISP:MOVR0,#79HMOVR3,#20HBTL:MOVA,R3MOVR1,#21HMOVX@R1,A;送位选码到PA口MOVA,@R0MOVDPTR,#TAB1MOVCA,@A+DPTR查表INCR1MOVX@R1,A;送显示码到PB口LCALLDELAY;延时INCR0MOVA,R3JBACC.0,HERE;一轮显示完到HERERRAMOVR3,ASJMPBTL;继续本轮显示HERE:RETTAB1:DB0C0H,0F9,0A4H,0B0H,99H,92H,82H共阳显示码DB0F8H,80H,90HDELAY:MOVR6,#0FFH;延时子程序D1:MOVR5,#0FFHD2:DJNZR5,D2DJNZR6,D1MOV30H,7EHMOV31H,7DHMOV32H,7CHMOV33H,7BHMOV34H,7AHMOV35H,79HRET---------------------------------COMP:MOVR1,#40HMOVA,@R1CJNEA,30H,MOREINCR1MOVA,@R1CJNEA,31H,MOREINCR1MOVA,@R1CJNEA,32H,MOREINCR1MOVA,@R1CJNEA,33H,MOREINCR1MOVA,@R1CJNEA,34H,MORESJMPKMORE:INCR3CLRP3.2K:RETENDORG1000HMOVR4,#08H密码个数8个MOVR0,#40H密码暂存区MOVA,#00H初始密码0,1,2,3,4,5GO:MOV@R0,AINCR0INCADJNZR4,GOSETBP3.0;确认SETBP3.1锁开SETBP3.2错误SETBP3.4报警MOVR0,#20HMOVA,#03HMOV@R0,A;8155初始化MOVR0,#79HMOVR7,#06HINIT:MOV@R0,#0;显示缓冲区清零INCR0DJNZR7,INITLOP:LCALLDISPLCALLKEYBJBACC.4,LOP;未按键返回MOVR0,#7EHMOVR7,#05HPUSHASETD:DECR0MOVA,@R0INCR0MOV@R0,ADECR0DJNZR7,SETDPOPACCMOV@R0,AMOV7DH,7CHCJNE,A,#0AH,LOPCLRP3.0ACALLCOMPCJNER3,#03H,LOPCLRP3.4SJMPLOP-----------------------------------KEYB:LCALLBKS;按键处理子程序JNZBLK1LCALLDISPSJMPKEYBBLK1:LCALLDISPLCALLDISPLCALLBKSJNZBLK2LCALLDISPSJMPKEYBBLK2:MOVR2,#0FEHMOVR4,#0BLK4:MOVR1,#21HMOVA,R2MOVX@R1,AMOVR1,#23HMOVXA,@R1JBACC.0,BL1MOVA,#0SJMPBLKPBL1:JBACC.1,BL2MOVA,#08HSJMPBLKPBL2:JBACC.2,BL3MOVA,#10HSJMPBLKPBL3:JBACC.3,BLMOVA,#18HBLKP:ADDA,R4PUSHACCBLK3:LCALLDISPLCALLBKSJNZBLK3POPACCCJNEA,#10H,PPPP:JNCPP1MOVDPTR,#TBLMOVCA,@A+DPTRPP1:RETTBL:DB07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00HDB02H,0FH,03H,0EH,0CH,0DHBL:INCR4MOVA,R2JNBACC.7,BKLDRLAMOVR2,ASJMPBLK4BLKD:SJMPKEYBBKS:MOVR1,#21HMOVA,#0MOVX@R1,AMOVR1,#23HMOVXA,@R1CPLAANLA,#0FHRET---------------------------------DISP:MOVR0,#79HMOVR3,#20HBTL:MOVA,R3MOVR1,#21HMOVX@R1,A;送位选码到PA口MOVA,@R0MOVDPTR,#T