本人紧急求购保险柜电子密码锁源程序(最好是马达电动开门及LCD显示),有的话请联系本人!Jason.ouyang@yahoo.com.cn
;********************************************************************************
;* 描述: *
;* 正确输入密码继电器将吸合错误将报警 并要求重新输入 。 *
;* *
;********************************************************************************
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
;********************************************************************************
; 端口定义
RS EQU P2.1
RW EQU P2.2
EP EQU P2.0
;**********************************
;CH451测试程序查表轮显0--F
;**********************************
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
;**********************************
DATA_F DATA 034H
DATA_KEY DATA 035H
TIMER DATA 030H
TIMER1 DATA 031H
TIMER2 DATA 032H
TIMER3 DATA 033H
BUFF1 EQU 36H
BUFF2 EQU 48H
BUFF EQU 50H
;***********************************
ORG 0000H
JMP START
ORG 0013H
LJMP CH451_INT1
ORG 0080H
START: MOV SP,#60H
;***********************************
mov p1,#60h ;禁止其它芯片
CLR DIN ;初始化CH451
SETB DCLK
SETB DIN
SETB LOAD
SETB DOUT
NOP
MOV B,#04H ;设置CH451
MOV A,#03H ;关看门狗开显示键盘
nop
LCALL WRITE
NOP
START1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA ;开总中断
MOV R5,#00H
TT0: MOV R0,#03H
TT1: MOV BUFF2,#3CH ;密码存放存储单元首址
DEC BUFF2
LCALL LCD_INIT ; 初始化LCD
MOV A,#15
LCALL DELAY_MS ;调延时
LCALL DISPLAY1
DEC R0
CJNE R0,#01,TT1
LCALL READ_NUM
MOV DPTR,#TAB_LJD
MOV A ,#0FFH
LCALL DELAY_MS ; 在第二行显示字符*
MOV A,#41H ;
LCALL SET_LCD_POS ; 设置第二行第一个字符位置
CJNE A,#99H,$
MOV BUFF,#00H ;清除标志
JMP TT0
;------------------------------------------------------------------------------
READ_NUM: MOV R2,#10 ;读出密码并存入从36h开始的存储单元
MOV R0,#BUFF1
MOV DPTR,#TAB1
LOOP: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,LOOP
RET
TAB:
DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 07H ;7
DB 07FH ;8
DB 06FH ;9
DB 77H ;A
DB 07CH ;B
DB 039H ;C
DB 5EH ;D
DB 079H ;E
DB 071H ;F
TAB1: DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
;****************键盘处理*****************************
CH451_INT1: LCALL INTER
K1:
MOV R3,DATA_KEY
CJNE R3,#40H,K2
JMP LED_0
K2:
MOV R3,DATA_KEY
CJNE R3,#41H,K3
JMP LED_1
K3:
MOV R3,DATA_KEY
CJNE R3,#42H,K4
JMP LED_2
K4:
MOV R3,DATA_KEY
CJNE R3,#43H,K5
JMP LED_3
K5:
MOV R3,DATA_KEY
CJNE R3,#48H,K6
JMP LED_4
K6:
MOV R3,DATA_KEY
CJNE R3,#49H,K7
JMP LED_5
K7:
MOV R3,DATA_KEY
CJNE R3,#4AH,K8
JMP LED_6
K8:
MOV R3,DATA_KEY
CJNE R3,#4BH,K9
JMP LED_7
K9:
MOV R3,DATA_KEY
CJNE R3,#50H,K10
JMP LED_8
K10:
MOV R3,DATA_KEY
CJNE R3,#51H,K11
JMP LED_9
K11:
MOV R3,DATA_KEY
CJNE R3,#52H,K12
JMP LED_A
K12:
MOV R3,DATA_KEY
CJNE R3,#53H,K13
JMP LED_B
K13:
MOV R3,DATA_KEY
CJNE R3,#58H,K14
JMP LED_C
K14:
MOV R3,DATA_KEY
CJNE R3,#59H,K15
JMP LED_D
K15:
MOV R3,DATA_KEY
CJNE R3,#5AH,K16
JMP LED_E
K16:
MOV R3,DATA_KEY
CJNE R3,#5BH,K17
JMP LED_F
K17:
POP ACC
POP PSW
CLR IE1
RETI
NOP
LJMP START
LED_A:
JMP DELAY1
LED_B:
JMP DELAY1
LED_C:
JMP DELAY1
LED_D: MOV R1,#3CH
MOV R0,#36H
MOV R4,#06H
C1: MOV A,@R1
XRL A,@R0 ;比较键盘输入的密码是否与设定密码相同
JNZ C3
INC R0
INC R1
DJNZ R4,C1
LCALL DISPLAY4
CLR P3.6
RETI
C3: MOV R3,#6
EORR: CLR P3.7 ;密码错误鸣音报警
MOV A,#0128
LCALL DELAY_MS
SETB P3.7
MOV A,#128
LCALL DELAY_MS
DJNZ R3,EORR
LCALL DISPLAY3
MOV BUFF,#99H
MOV A,BUFF
RETI
LED_E:
JMP DELAY1
LED_F:
JMP DELAY1
LED_0:
INC DPTR
MOV @R1,#03FH
LCALL DISPLAY2
RETI
LED_1:
MOV @R1,#06H
LCALL DISPLAY2
INC DPTR
RET
LED_2:
MOV @R1,#05BH
LCALL DISPLAY2
INC DPTR
RETI
LED_3:
MOV @R1,#04FH
LCALL DISPLAY2
INC DPTR
RETI
LED_4:
MOV @R1,#066H
LCALL DISPLAY2
INC DPTR
RETI
LED_5:
MOV @R1,#06DH
LCALL DISPLAY2
INC DPTR
RETI
LED_6:
MOV @R1,#07DH
LCALL DISPLAY2
INC DPTR
RETI
LED_7:
MOV @R1,#007H
LCALL DISPLAY2
INC DPTR
RETI
LED_8:
MOV @R1,#07FH
LCALL DISPLAY2
INC DPTR
RETI
LED_9:
MOV @R1,#06FH
LCALL DISPLAY2
INC DPTR
RETI
DELAY1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA
LCALL DELAY_1S
;LCALL DELAY_1S
;LCALL DELAY_1S
;LCALL DELAY_1S
POP B
POP ACC
POP PSW
RETI
太多了,分两次发。
;********************************************************************************
;* 描述: *
;* 正确输入密码继电器将吸合错误将报警 并要求重新输入 。 *
;* *
;********************************************************************************
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
;********************************************************************************
; 端口定义
RS EQU P2.1
RW EQU P2.2
EP EQU P2.0
;**********************************
;CH451测试程序查表轮显0--F
;**********************************
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
;**********************************
DATA_F DATA 034H
DATA_KEY DATA 035H
TIMER DATA 030H
TIMER1 DATA 031H
TIMER2 DATA 032H
TIMER3 DATA 033H
BUFF1 EQU 36H
BUFF2 EQU 48H
BUFF EQU 50H
;***********************************
ORG 0000H
JMP START
ORG 0013H
LJMP CH451_INT1
ORG 0080H
START: MOV SP,#60H
;***********************************
mov p1,#60h ;禁止其它芯片
CLR DIN ;初始化CH451
SETB DCLK
SETB DIN
SETB LOAD
SETB DOUT
NOP
MOV B,#04H ;设置CH451
MOV A,#03H ;关看门狗开显示键盘
nop
LCALL WRITE
NOP
START1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA ;开总中断
MOV R5,#00H
TT0: MOV R0,#03H
TT1: MOV BUFF2,#3CH ;密码存放存储单元首址
DEC BUFF2
LCALL LCD_INIT ; 初始化LCD
MOV A,#15
LCALL DELAY_MS ;调延时
LCALL DISPLAY1
DEC R0
CJNE R0,#01,TT1
LCALL READ_NUM
MOV DPTR,#TAB_LJD
MOV A ,#0FFH
LCALL DELAY_MS ; 在第二行显示字符*
MOV A,#41H ;
LCALL SET_LCD_POS ; 设置第二行第一个字符位置
CJNE A,#99H,$
MOV BUFF,#00H ;清除标志
JMP TT0
;------------------------------------------------------------------------------
READ_NUM: MOV R2,#10 ;读出密码并存入从36h开始的存储单元
MOV R0,#BUFF1
MOV DPTR,#TAB1
LOOP: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,LOOP
RET
TAB:
DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 07H ;7
DB 07FH ;8
DB 06FH ;9
DB 77H ;A
DB 07CH ;B
DB 039H ;C
DB 5EH ;D
DB 079H ;E
DB 071H ;F
TAB1: DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
;****************键盘处理*****************************
CH451_INT1: LCALL INTER
K1:
MOV R3,DATA_KEY
CJNE R3,#40H,K2
JMP LED_0
K2:
MOV R3,DATA_KEY
CJNE R3,#41H,K3
JMP LED_1
K3:
MOV R3,DATA_KEY
CJNE R3,#42H,K4
JMP LED_2
K4:
MOV R3,DATA_KEY
CJNE R3,#43H,K5
JMP LED_3
K5:
MOV R3,DATA_KEY
CJNE R3,#48H,K6
JMP LED_4
K6:
MOV R3,DATA_KEY
CJNE R3,#49H,K7
JMP LED_5
K7:
MOV R3,DATA_KEY
CJNE R3,#4AH,K8
JMP LED_6
K8:
MOV R3,DATA_KEY
CJNE R3,#4BH,K9
JMP LED_7
K9:
MOV R3,DATA_KEY
CJNE R3,#50H,K10
JMP LED_8
K10:
MOV R3,DATA_KEY
CJNE R3,#51H,K11
JMP LED_9
K11:
MOV R3,DATA_KEY
CJNE R3,#52H,K12
JMP LED_A
K12:
MOV R3,DATA_KEY
CJNE R3,#53H,K13
JMP LED_B
K13:
MOV R3,DATA_KEY
CJNE R3,#58H,K14
JMP LED_C
K14:
MOV R3,DATA_KEY
CJNE R3,#59H,K15
JMP LED_D
K15:
MOV R3,DATA_KEY
CJNE R3,#5AH,K16
JMP LED_E
K16:
MOV R3,DATA_KEY
CJNE R3,#5BH,K17
JMP LED_F
K17:
POP ACC
POP PSW
CLR IE1
RETI
NOP
LJMP START
LED_A:
JMP DELAY1
LED_B:
JMP DELAY1
LED_C:
JMP DELAY1
LED_D: MOV R1,#3CH
MOV R0,#36H
MOV R4,#06H
C1: MOV A,@R1
XRL A,@R0 ;比较键盘输入的密码是否与设定密码相同
JNZ C3
INC R0
INC R1
DJNZ R4,C1
LCALL DISPLAY4
CLR P3.6
RETI
C3: MOV R3,#6
EORR: CLR P3.7 ;密码错误鸣音报警
MOV A,#0128
LCALL DELAY_MS
SETB P3.7
MOV A,#128
LCALL DELAY_MS
DJNZ R3,EORR
LCALL DISPLAY3
MOV BUFF,#99H
MOV A,BUFF
RETI
LED_E:
JMP DELAY1
LED_F:
JMP DELAY1
LED_0:
INC DPTR
MOV @R1,#03FH
LCALL DISPLAY2
RETI
LED_1:
MOV @R1,#06H
LCALL DISPLAY2
INC DPTR
RET
LED_2:
MOV @R1,#05BH
LCALL DISPLAY2
INC DPTR
RETI
LED_3:
MOV @R1,#04FH
LCALL DISPLAY2
INC DPTR
RETI
LED_4:
MOV @R1,#066H
LCALL DISPLAY2
INC DPTR
RETI
LED_5:
MOV @R1,#06DH
LCALL DISPLAY2
INC DPTR
RETI
LED_6:
MOV @R1,#07DH
LCALL DISPLAY2
INC DPTR
RETI
LED_7:
MOV @R1,#007H
LCALL DISPLAY2
INC DPTR
RETI
LED_8:
MOV @R1,#07FH
LCALL DISPLAY2
INC DPTR
RETI
LED_9:
MOV @R1,#06FH
LCALL DISPLAY2
INC DPTR
RETI
DELAY1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA
LCALL DELAY_1S
;LCALL DELAY_1S
;LCALL DELAY_1S
;LCALL DELAY_1S
POP B
POP ACC
POP PSW
RETI