数字密码锁程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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