1、单片机密码锁设计什么是密码锁电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。硬件设计基于AT89C51为核心的单片机控制的电子密码锁设计。本设计能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。设计的电路框如图1。报警控制电路LCD显示电路AT89C51单片机开锁控制电路矩阵键盘控制指示电路 图一 电路的功能单元设计1.单片机AT89C51组成基本框图 P0AT89C51CPU程序存储器 ROM并行接口串行接口数据存储器 RAM中断系统定时器/计数器时钟电路P3P1P2TxDINT0RxDINT1T0T1外中断内中断
2、单片机引脚介绍P0:P0口是一个漏极开路的8位双向I/O口。在访问片外存储器时P0分时提供低8位地址线和8位双向数据线。当不接片外存储器或不扩展I/O口时,P0可作为一个通用输入/输出口。P0口作输入口使用时,应先向口锁存器写“1”,P0口作输出口时,需接上拉电阻。P1:P1口是一个内部提供上拉电阻的8位双向I/O口,因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”。P2:P2口也是一个内部提供上拉电阻的8位双向I/O口,在访问片外存储器时,输出高8位地址。P3:P3口除了一般的准双向通用I/O口外,还有第二功能。VCC:+5V电源VSS:接地 AL
3、E:地址锁存器控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。 /PSEN:外部程序存储器读选通信号。在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。 /EA:访问程序存储控制信号。当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。 RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初
4、始化操作。XTAL1和XTAL2:外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。2.单片机外围电路设计(1)单片机复位电路: 采用按键手动复位方式中的电平复位方式,复位电平是通过使RST端经电阻与VCC电源接通而实现的。(2)单片机时钟电路:AT89C51内部有时钟电路,需外接石英晶体和微调电容,本设计的晶振频率为11.0592MHz。3.矩阵键盘的设计本设计中用到4*4的键盘。键盘扫描方式,键盘的列线与P1口的低4位相接,行线与P1口的高3位相接。首先使P1.0为低电平“0”,其余三根列线为高电平“1”,读行线状态。如果
5、行线都为高电平状态,则P1.0这列上没键按下,如果读出的行线不全为高电平状态,则为低电平的行线与P1.0相交的键处于闭合状态。如果P1.0上没有键闭合,接着使P1.1为低电平,其余列线为高电平,用同样的方法检查P1.1这列上有没有按键闭合。一直到使P1.3为低电平扫描完成。这一过程称为一次扫描过程。由于按键是利用机械触电的合、断原理,存在弹性的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使电压信号波动,为了保证CPU对键的稳定闭合仅作一次键输入处理,必须采用消除抖动影响。本设计采用软件办法,在检测到有键按下时,执行一个延时程序后,确认该键是否保持闭合状态电平。若仍保持闭合状态电平,则确认该
6、键处于闭合状态,从而消除抖动影响。若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理如表1。编号按键数据输入码P1.7 P1.6 P1.5 P1.4扫描输出信号P1.3 P1.2 P1.1 P1.0所侦测的按键01 1 1 01 1 1 0K0 键11 1 0 11 1 1 0K1 键21 0 1 11 1 1 0K2 键30 1 1 11 1 1 0K3 键41 1 1 01 1 0 1K4 键51 1 0 11 1 0 1K5 键61 0 1 11 1 0 1K6 键70 1 1 11
7、 1 0 1K7 键81 1 1 01 0 1 1K8 键91 1 0 11 0 1 1K9 键101 0 1 11 0 1 1K10 键110 1 1 11 0 1 1K11 键 表14.电路总体设计下面是本次实验的程序;*;以下8个字节存放8位数码管的段码LED_BIT_1EQU30HLED_BIT_2EQU31HLED_BIT_3EQU32HLED_BIT_4EQU33HLED_BIT_5EQU34HLED_BIT_6EQU35HLED_BIT_7EQU36HLED_BIT_8EQU37H;以下6个字节存放初始密码WORD_1EQU38HWORD_2EQU39HWORD_3EQU3AHW
8、ORD_4EQU3BHWORD_5EQU3CHWORD_6EQU3DH;以下6个字节存放用户输入的6位密码KEY_1EQU3EHKEY_2EQU3FHKEY_3EQU40HKEY_4EQU41HKEY_5EQU42HKEY_6EQU43H;*CNT_AEQU44HCNT_BEQU45HKEY_CNTEQU46H;已输出的密码位数LINEEQU47H;按键行号ROWEQU48H;按键列号VALEQU49H;键值;*;以下为初始化程序,包括数据存储空间初始化,设置初始密码ORG00HSJMPSTARTORG0BHLJMPINT_T0START:MOVCNT_A,#00H;程序初始化MOVCNT_B
9、,#00HMOVKEY_CNT,#00HMOVLINE,#00HMOVROW,#00HMOVVAL,#00HSETBP1.0MOVLED_BIT_1,#00H;段码存储区清0MOVLED_BIT_2,#00HMOVLED_BIT_3,#00HMOVLED_BIT_4,#00HMOVLED_BIT_5,#00HMOVLED_BIT_6,#00HMOVLED_BIT_7,#79HMOVLED_BIT_8,#73HMOVKEY_1,#00H;输入密码存储区清0MOVKEY_2,#00HMOVKEY_3,#00HMOVKEY_4,#00HMOVKEY_5,#00HMOVKEY_6,#00HMOVWOR
10、D_1,#6;设置初始密码为123456MOVWORD_2,#5MOVWORD_3,#4MOVWORD_4,#3MOVWORD_5,#2MOVWORD_6,#1MOVTMOD,#01HMOVTH0,#(65536-700)/256MOVTL0,#(65536-700)/256MOVIE,#82HA0:LCALLDISP;*;以下为键盘扫描程序,计算键值并存入VALLSCAN:MOVP3,#0F0H;扫描行码L1:JNBP3.0,L2LCALLDLY_SJNBP3.0,L2MOVLINE,#00HLJMPRSCANL2:JNBP3.1,L3LCALLDLY_SJNBP3.1,L3MOVLINE,
11、#01HLJMPRSCANL3:JNBP3.2,L4LCALLDLY_SJNBP3.2,L4MOVLINE,#02HLJMPRSCANL4:JNBP3.3,A0LCALLDLY_SJNBP3.3,A0MOVLINE,#03HRSCAN:MOVP3,#0FH;扫描列码C1:JNBP3.4,C2MOVROW,#00HLJMPCALCUC2:JNBP3.5,C3MOVROW,#01HLJMPCALCUC3:JNBP3.6,C1MOVROW,#02HCALCU:MOVA,LINE;计算键值MOVB,#03HMULABADDA,ROWMOVVAL,A;*;以下为按键处理程序,对不同的按键作出响应CJNE
12、A,#0AH,J1;是否为CLR键MOVR1,KEY_CNTCJNER1,#00H,J2LCALLALARM_1LJMPSTART J2:LCALLSHIFTR DECKEY_CNTW00:LCALLDISP;等待按键抬起MOVA,P3CJNEA,#0FH,W01LJMPA0W01:MOVA,P3CJNEA,#0F0H,W02LJMPA0W02:SJMPW00J1:MOVA,VALCJNEA,#0BH,J3;判断是否为ENTER键MOVR1,KEY_CNTCJNER1,#06H,J4MOVA,WORD_1;比较密码CJNEA,3EH,J5MOVA,WORD_2CJNEA,3FH,J5MOVA,
13、WORD_3CJNEA,40H,J5MOVA,WORD_4CJNEA,41H,J5MOVA,WORD_5CJNEA,42H,J5MOVA,WORD_6CJNEA,43H,J5CLRP1.0LCALLDLY_LLJMPFINIJ5:LCALLALARM_2LJMPSTARTJ4:LCALLALARM_1LJMPSTARTJ3:INCKEY_CNT;按下数字键MOVA,KEY_CNTCJNEA,#07H,K1LCALLALARM_1W10:LCALLDISP;等待按键抬起MOVA,P3CJNEA,#0FH,W11LJMPSTARTW11:MOVA,P3CJNEA,#0F0H,W12LJMPSTAR
14、TW12:SJMPW10LJMPSTARTLJMPSTARTK1:LCALLSHIFTLW20:LCALLDISP;等待按键抬起MOVA,P3CJNEA,#0FH,W21LJMPA0W21:MOVA,P3CJNEA,#0F0H,W22LJMPA0W22:SJMPW20LJMPA0ALARM_1:SETBTR0;操作错误报警JBTR0,$RETALARM_2:SETBTR0;密码错误报警JBTR0,$LCALLDLY_LRET;*;定时器中断服务程序,用于声音报警INT_T0:CPLP1.7MOVTH0,#(65536-700)/256MOVTL0,#(65536-700)/256INCCNT_
15、AMOVR1,CNT_ACJNER1,#30,RETUNEMOVCNT_A,#00HINCCNT_BMOVR1,CNT_BCJNER1,#20,RETUNEMOVCNT_A,#00HMOVCNT_B,#00HCLRTR0RETUNE:RETI;*;段码,输入密码左移子程序SHIFTL:MOVLED_BIT_6,LED_BIT_5MOVLED_BIT_5,LED_BIT_4MOVLED_BIT_4,LED_BIT_3MOVLED_BIT_3,LED_BIT_2MOVLED_BIT_2,LED_BIT_1MOVLED_BIT_1,#40HMOVKEY_6,KEY_5MOVKEY_5,KEY_4MO
16、VKEY_4,KEY_3MOVKEY_3,KEY_2MOVKEY_2,KEY_1MOVKEY_1,VALRET;*;段码,输入密码右移子程序SHIFTR:MOVLED_BIT_1,LED_BIT_2MOVLED_BIT_2,LED_BIT_3MOVLED_BIT_3,LED_BIT_4MOVLED_BIT_4,LED_BIT_5MOVLED_BIT_5,LED_BIT_6MOVLED_BIT_6,#00HMOVKEY_1,KEY_2MOVKEY_2,KEY_3MOVKEY_3,KEY_4MOVKEY_4,KEY_5MOVKEY_5,KEY_6MOVKEY_6,#00HRET;*;以下为数码显示
17、子程序DISP:CLRP2.7MOVP0,LED_BIT_8LCALLDLY_SSETBP2.7CLRP2.6MOVP0,LED_BIT_7LCALLDLY_SSETBP2.6CLRP2.5MOVP0,LED_BIT_6LCALLDLY_SSETBP2.5CLRP2.4MOVP0,LED_BIT_5LCALLDLY_SSETBP2.4CLRP2.3MOVP0,LED_BIT_4LCALLDLY_SSETBP2.3CLRP2.2MOVP0,LED_BIT_3LCALLDLY_SSETBP2.2CLRP2.1MOVP0,LED_BIT_2LCALLDLY_SSETBP2.1CLRP2.0MOVP0,LED_BIT_1LCALLDLY_SSETBP2.0RET;*DLY_S:MOVR6,#10D1:MOVR7,#250DJNZR7,$DJNZR6,D1RETDLY_L:MOVR5,#100D2:MOVR6,#100D3:MOVR7,#248DJNZR7,$DJNZR6,D3DJNZR5,D2RETFINI:NOPEND 程序流程图主程序开始 正确密码正确与否I/O口初始化,LCD初始化执行主控循环LCD显示错误消息;蜂鸣器产生响警示。LCD显示正确消息;指示灯LED亮。错误