数字密码锁程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;===================================================

;名称:电子密码锁

;作者:小发

;日期:2007年06月13日

;修改日期:2007年06月18日

;说明:首先显示器提示输入密码,密码在12.5S内输入有效,

; 输入次三次错误报警10S,输入正确开门,7秒后返回初态

; 以上参数均可在主程序里设定,修改系统密码在程序的结尾

;===================================================

RS BIT P2.7

RW BIT P2.6

E BIT P2.5

ENTER BIT 22H.0

OPEN BIT P3.6

SPEAK BIT P3.7

PASSBUF EQU 40H

KEYNUMBER EQU 41H ;存放识别后的按键号

ORG 0000H

AJMP MAIN

ORG 0003H

JMP KEY_INT

ORG 000BH

AJMP INTT0

ORG 001BH

AJMP INTT1

ORG 0030H

;========== 主程序开始==============

MAIN: MOV 30H,#07H ;输入密码为7位最高只可设15位

MOV 42H,#200 ;设定报警的时间,42H单元里的数*50MS MOV 43H,#250 ;设定开门时间14的倍数(实际上液晶显示器执行指令占用了时间,开门时间会比14*250MS大)

;44H号单元存放输入错误的次数

;45H为定时器0中断次数

;46H为定时器1中断次数

MOV 47H,#250 ;输入密码时间设定,50MS倍数

MOV SP,#60H

CLR OPEN

CLR SPEAK ;初始化输出设备

CLR ENTER ;标志位初始化

MOV TMOD,#11H ;定时器工作方式2

MOV TH0,#3CH ;初值50MS

MOV TL0,#0BH

MOV TH1,#3CH

MOV TL1,#0BH

SETB EA

SETB ET0

SETB ET1

MOV TCON,#00000000B ;电平触发

START: MOV R0,30H

MOV R1,#31H

SS1: MOV @R1,#00H

INC R1

DJNZ R0,SS1 ;将输入密码缓冲单元清零

MOV P1,#0FH ;初始化按键口

MOV R1,#31H ;从31号单元开始存放按建输入的密码

CLR 20H ;报警标志清零

CLR 21H ;密码超时标志

MOV 46H,#00H ;超时后对定时器中断次数清零,便于下一轮重新计时INIT: ACALL SELLCD ;设定液晶工作方式

ACALL LINE1 ;在第一行显示

MOV DPTR,#MES_P ;显示请输入密码

ACALL DISPLAY

setb EX0 ;开中断,允许键盘输入

KEYIN: JB 21H,ERR ;超时转到错误程序

JNB ENTER,KEYIN ;等待ENTER按下

CLR ENTER

clr EX0 ;密码输入完后锁定键盘

;当使用边沿触发时用上面的指令为什么禁止不了中断???

;========== 密码判断程序============

COMP:

MOV DPTR,#PASS

MOV R4,30H ;密码的长度

MOV A,#0

MOV R1,#31H

LOOP: MOV R5,A

MOVC A,@A+DPTR

MOV PASSBUF,A;取出系统设定的密码

MOV A,@R1 ;从31号单元开始取出输入的密码

CJNE A,PASSBUF,ERR ;比较

MOV A,R5

INC A

INC R1 ;取下一位

DJNZ R4,LOOP

;正确

MA TCH: MOV A,#01H

ACALL ENABLE ;清屏,光标复位

ACALL LINE1 ;从第一行开始显示

MOV DPTR,#MES_C

ACALL DISPLAY;显示"请进"

ACALL LINE2

MOV DPTR,#TAB_1

ACALL DISPLAY

SETB OPEN ;开门

MOV 44H,#00H ;输入错误次数清零MOV R6,43H

ACALL DELAY

CLR OPEN ;复位

JMP START

;错误

ERR: ACALL BACK

MOV R6,#03H

ACALL DELAY

ACALL BACK ;输错提示音,鸣两下

MOV A,#01H

ACALL ENABLE

ACALL LINE1

MOV DPTR,#MES_E

ACALL DISPLAY;显示错误

MOV R6,#40H

ACALL DELAY

INC 44H

MOV A,44H

CJNE A,#03H,EE0

EE0: JC ERROUT ;输错不到三次返回MOV 44H,#00H ;清零

ACALL WRANING ;报警

ERROUT: JMP START

;=========== 按键中断服务程序==========

KEY_INT:push acc

push psw

clr ex0

acall delay10ms ;延时消抖

SETB TR1 ;启动定时器

ACALL SMKEY;按键识别

MOV A,KEYNUMBER ;返回按键号

ACALL BACK ;按键发声

MOV R3,A

相关文档
最新文档