用89C2051控制的智能密码锁

2011年06月22日 11:47    发布者:circuit_share
本密码锁控制器由AT89C2051单片机组成, 工作稳定可靠, 保密性高, 实用性强, 并具有报警控制功能。

一、电路组成和原理图

工作原理图如附图一所示, 该电路由AT89C2051做控制元件, P1口为键盘口, 其中P1.4~P1.7为键盘扫描输出口, P1.0~P1.3为键盘扫描输入口; P3口为信号输出口, 其中P3.0输出开锁控制信号去驱动电磁锁, P3.1输出密码错信号, P3.2输出报警控制信号去驱动报警器。1脚为复位端,4脚、5脚接晶振,各元器件参数如图所示。该电路键盘由16个按键组成,15个“数字”键, 1个“输入”键; 密码由8位数字组成(可由用户对程序稍加修改设置为任意位数的密码),每位数字均可为15个数字中的任意一个数,这样组成的密码不可破译,特别是当别人不知密码位数时更不可破译。



二、工作原理

通电复位,电路进入就绪状态,等待用户输入密码。当用户输入密码并按下“输入”键后,如输入密码正确则由P3.0输出开锁控制信号且绿灯亮,如输入密码错误则由P3.1输出密码错误指示信号红灯亮,如连续三次输入密码错误则由P3.2输出报警控制信号且黄灯亮,并且必须等待解出报警后方可重新开锁。

三、源程序

ORG 0000H

MOV P3,#0BFH

MOV R4,#00H

BEGIN: MOV R0,#01FH

MOV R3,#00H

KEY : MOV P1,#0FH

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,KEY1

SJMP KEY

KEY1: MOV P3,#0BFH

LCALL DEL12

MOV A,#0EFH

KEY2: MOV R2,A

MOV P1,A

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,KEY3

MOV A,R2

SETB C

RLC A

JC KEY2

SJMP KEY

KEY3: MOV B,#0FBH

KEY4: RRC A

INC B

JC KEY4

MOV A,R2

SWAP A

KEY5: RRC A

INC B

INC B

INC B

INC B

JC KEY5

KEY6: MOV A,P1

ANL A,#0FH

CJNE A,#0FH,KEY6

LCALL DEL12

LCALL OPREAT

LJMP KEY
ORG 0100H

DEL12: MOV R6,#01EH

DEL2: MOV R7,#64H

DEL1: DJNZ R7,DEL1

DJNZ R6,DEL2

RET
ORG 0200H

OPREAT:INC R0

MOV A,B

MOV @R0,A

CJNE A,#0FH,COUNT

CJNE R3,#08H,ERROR

MOV R1,#20H

MOV B,#00H

MOV DPTR,#TAB

LOOP: MOV A,B

MOVC A,@A+DPTR

CLR C

SUBB A,@R1

JNZ ERROR

INC R1

INC B

DJNZ R3,LOOP

OPEN: MOV P3,#0BEH

LJMP $

ERROR: MOV P3,#0BDH

INC R4

CJNE R4,#03H,AGAIN

ALARM: MOV P3,#0B9H

LJMP $

AGAIN: LJMP BEGIN

COUNT: INC R3

RET
TAB:DB 01H,03H,05H,07H,02H,04H,06H,08H

END