当前位置:文档之家› 单片机密码锁设计

单片机密码锁设计

单片机密码锁设计什么是密码锁电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

硬件设计基于AT89C51为核心的单片机控制的电子密码锁设计。

本设计能完成开锁,修改密码,密码错误报警,LCD 显示密码等基本的密码锁功能。

设计的电路框如图1。

图一电路的功能单元设计1.单片机AT89C51组成基本框图开锁控制电路AT89C51单片机矩阵 键盘 控制指示电路LCD 显示电路报警控制电路单片机引脚介绍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 :接地ALE :地址锁存器控制信号。

在系统扩展时,ALE 用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。

此外,由于ALE 是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。

/PSEN :外部程序存储器读选通信号。

在读外部ROM 时,/PSEN 有效(低电平),以实现外部ROM 单元的读操作。

/EA :访问程序存储控制信号。

当/EA 信号为低电平时,对ROM 的读操作限定在外部程序存储器;当/EA 信号为高电平时,对ROM 的读操作是从内部程序存储器开始,并可延至外部程序存储器。

RST :复位信号。

当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。

XTAL1和XTAL2:外接晶体引线端。

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

P0 AT89C51 CPU程序存储器 ROM并行接口串行接口 数据存储器 RAM中断系统定时器/计数器时钟电路 P3P1 P2TxD INT0 RxDINT1T0 T1外中断内中断2.单片机外围电路设计(1)单片机复位电路:采用按键手动复位方式中的电平复位方式,复位电平是通过使RST 端经电阻与VCC电源接通而实现的。

(2)单片机时钟电路:AT89C51内部有时钟电路,需外接石英晶体和微调电容,本设计的晶振频率为11.0592MHz。

3.矩阵键盘的设计本设计中用到4*4的键盘。

键盘扫描方式,键盘的列线与P1口的低4位相接,行线与P1口的高3位相接。

首先使P1.0为低电平“0”,其余三根列线为高电平“1”,读行线状态。

如果行线都为高电平状态,则P1.0这列上没键按下,如果读出的行线不全为高电平状态,则为低电平的行线与P1.0相交的键处于闭合状态。

如果P1.0上没有键闭合,接着使P1.1为低电平,其余列线为高电平,用同样的方法检查P1.1这列上有没有按键闭合。

一直到使P1.3为低电平扫描完成。

这一过程称为一次扫描过程。

由于按键是利用机械触电的合、断原理,存在弹性的影响,机械触点在闭合及断开瞬间均有抖动过程,从而使电压信号波动,为了保证CPU对键的稳定闭合仅作一次键输入处理,必须采用消除抖动影响。

本设计采用软件办法,在检测到有键按下时,执行一个延时程序后,确认该键是否保持闭合状态电平。

若仍保持闭合状态电平,则确认该键处于闭合状态,从而消除抖动影响。

若有按键被按下时,就将该按键译码出来,本设计采用双重循环做计数编号,当某一按键按下时,其按键编号便是计数编号,有关按键编号,扫描信号及读取按键数据返回码整理如表1。

编号按键数据输入码P1.7 P1.6 P1.5 P1.4 扫描输出信号P1.3 P1.2 P1.1 P1.0所侦测的按键0 1 1 1 0 1 1 1 0 K0 键1 1 1 0 1 1 1 1 0 K1 键2 1 0 1 1 1 1 1 0 K2 键3 0 1 1 1 1 1 1 0 K3 键4 1 1 1 0 1 1 0 1 K4 键5 1 1 0 1 1 1 0 1 K5 键6 1 0 1 1 1 1 0 1 K6 键7 0 1 1 1 1 1 0 1 K7 键8 1 1 1 0 1 0 1 1 K8 键9 1 1 0 1 1 0 1 1 K9 键10 1 0 1 1 1 0 1 1 K10 键11 0 1 1 1 1 0 1 1 K11 键表14.电路总体设计下面是本次实验的程序;******************************************************* ;以下8个字节存放8位数码管的段码LED_BIT_1 EQU 30HLED_BIT_2 EQU 31HLED_BIT_3 EQU 32HLED_BIT_4 EQU 33HLED_BIT_5 EQU 34HLED_BIT_6 EQU 35HLED_BIT_7 EQU 36HLED_BIT_8 EQU 37H;以下6个字节存放初始密码WORD_1 EQU 38HWORD_2 EQU 39HWORD_3 EQU 3AHWORD_4 EQU 3BHWORD_5 EQU 3CHWORD_6 EQU 3DH;以下6个字节存放用户输入的6位密码KEY_1 EQU 3EHKEY_2 EQU 3FHKEY_3 EQU 40HKEY_4 EQU 41HKEY_5 EQU 42HKEY_6 EQU 43H;****************************************************** CNT_A EQU 44HCNT_B EQU 45HKEY_CNT EQU 46H ;已输出的密码位数LINE EQU 47H ;按键行号ROW EQU 48H ;按键列号VAL EQU 49H ;键值;****************************************************** ;以下为初始化程序,包括数据存储空间初始化,设置初始密码ORG 00HSJMP STARTORG 0BHLJMP INT_T0START: MOV CNT_A,#00H ;程序初始化MOV CNT_B,#00HMOV KEY_CNT,#00HMOV LINE,#00HMOV ROW,#00HMOV VAL,#00HSETB P1.0MOV LED_BIT_1,#00H ;段码存储区清0MOV LED_BIT_2,#00HMOV LED_BIT_3,#00HMOV LED_BIT_4,#00HMOV LED_BIT_5,#00HMOV LED_BIT_6,#00HMOV LED_BIT_7,#79HMOV LED_BIT_8,#73HMOV KEY_1,#00H ;输入密码存储区清0MOV KEY_2,#00HMOV KEY_3,#00HMOV KEY_4,#00HMOV KEY_5,#00HMOV KEY_6,#00HMOV WORD_1,#6 ;设置初始密码为"123456"MOV WORD_2,#5MOV WORD_3,#4MOV WORD_4,#3MOV WORD_5,#2MOV WORD_6,#1MOV TMOD,#01HMOV TH0,#(65536-700)/256MOV TL0,#(65536-700)/256MOV IE,#82HA0: LCALL DISP;*********************************************************** ;以下为键盘扫描程序,计算键值并存入VALLSCAN: MOV P3,#0F0H ;扫描行码L1: JNB P3.0,L2LCALL DLY_SJNB P3.0,L2MOV LINE,#00HLJMP RSCANL2: JNB P3.1,L3LCALL DLY_SJNB P3.1,L3MOV LINE,#01HLJMP RSCANL3: JNB P3.2,L4LCALL DLY_SJNB P3.2,L4MOV LINE,#02HLJMP RSCANL4: JNB P3.3,A0LCALL DLY_SJNB P3.3,A0MOV LINE,#03HRSCAN: MOV P3,#0FH ;扫描列码C1: JNB P3.4,C2MOV ROW,#00HLJMP CALCUC2: JNB P3.5,C3MOV ROW,#01HLJMP CALCUC3: JNB P3.6,C1MOV ROW,#02HCALCU: MOV A,LINE ;计算键值MOV B,#03HMUL ABADD A,ROWMOV VAL,A;************************************************** ;以下为按键处理程序,对不同的按键作出响应CJNE A,#0AH,J1 ;是否为"CLR"键MOV R1,KEY_CNTCJNE R1,#00H,J2LCALL ALARM_1LJMP STARTJ2: LCALL SHIFTRDEC KEY_CNTW00:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W01LJMP A0W01:MOV A,P3CJNE A,#0F0H,W02LJMP A0W02:SJMP W00J1: MOV A,VALCJNE A,#0BH,J3 ;判断是否为"ENTER"键MOV R1,KEY_CNTCJNE R1,#06H,J4MOV A,WORD_1 ;比较密码CJNE A,3EH,J5MOV A,WORD_2CJNE A,3FH,J5MOV A,WORD_3CJNE A,40H,J5MOV A,WORD_4CJNE A,41H,J5MOV A,WORD_5CJNE A,42H,J5MOV A,WORD_6CJNE A,43H,J5CLR P1.0LCALL DLY_LLJMP FINIJ5: LCALL ALARM_2LJMP STARTJ4: LCALL ALARM_1LJMP STARTJ3: INC KEY_CNT ;按下数字键MOV A,KEY_CNTCJNE A,#07H,K1LCALL ALARM_1W10:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W11LJMP STARTW11:MOV A,P3CJNE A,#0F0H,W12LJMP STARTW12:SJMP W10LJMP STARTLJMP STARTK1: LCALL SHIFTLW20:LCALL DISP ;等待按键抬起MOV A,P3CJNE A,#0FH,W21LJMP A0W21:MOV A,P3CJNE A,#0F0H,W22LJMP A0W22:SJMP W20LJMP A0ALARM_1:SETB TR0 ;操作错误报警JB TR0,$RETALARM_2:SETB TR0 ;密码错误报警JB TR0,$LCALL DLY_LRET;************************************************** ;定时器中断服务程序,用于声音报警INT_T0:CPL P1.7MOV TH0,#(65536-700)/256MOV TL0,#(65536-700)/256INC CNT_AMOV R1,CNT_ACJNE R1,#30,RETUNEMOV CNT_A,#00HINC CNT_BMOV R1,CNT_BCJNE R1,#20,RETUNEMOV CNT_A,#00HMOV CNT_B,#00HCLR TR0RETUNE: RETI;************************************************** ;段码,输入密码左移子程序SHIFTL: MOV LED_BIT_6,LED_BIT_5MOV LED_BIT_5,LED_BIT_4MOV LED_BIT_4,LED_BIT_3MOV LED_BIT_3,LED_BIT_2MOV LED_BIT_2,LED_BIT_1MOV LED_BIT_1,#40HMOV KEY_6,KEY_5MOV KEY_5,KEY_4MOV KEY_4,KEY_3MOV KEY_3,KEY_2MOV KEY_2,KEY_1MOV KEY_1,VALRET;************************************************** ;段码,输入密码右移子程序SHIFTR: MOV LED_BIT_1,LED_BIT_2MOV LED_BIT_2,LED_BIT_3MOV LED_BIT_3,LED_BIT_4MOV LED_BIT_4,LED_BIT_5MOV LED_BIT_5,LED_BIT_6MOV LED_BIT_6,#00HMOV KEY_1,KEY_2MOV KEY_2,KEY_3MOV KEY_3,KEY_4MOV KEY_4,KEY_5MOV KEY_5,KEY_6MOV KEY_6,#00HRET;************************************************** ;以下为数码显示子程序DISP: CLR P2.7MOV P0,LED_BIT_8LCALL DLY_SSETB P2.7CLR P2.6MOV P0,LED_BIT_7LCALL DLY_SSETB P2.6CLR P2.5MOV P0,LED_BIT_6LCALL DLY_SSETB P2.5CLR P2.4MOV P0,LED_BIT_5LCALL DLY_SSETB P2.4CLR P2.3MOV P0,LED_BIT_4LCALL DLY_SSETB P2.3CLR P2.2MOV P0,LED_BIT_3LCALL DLY_SSETB P2.2CLR P2.1MOV P0,LED_BIT_2LCALL DLY_SSETB P2.1CLR P2.0MOV P0,LED_BIT_1LCALL DLY_SSETB P2.0RET;********************************************** DLY_S: MOV R6,#10D1: MOV R7,#250DJNZ R7,$DJNZ R6,D1RETDLY_L: MOV R5,#100D2: MOV R6,#100D3: MOV R7,#248DJNZ R7,$DJNZ R6,D3DJNZ R5,D2RETFINI: NOPEND程序流程图主程序开始正确密码正确与否I/O口初始化,LCD初始化执行主控循环LCD显示错误消息;蜂鸣器产生响警示。

相关主题