?? 電子密碼鎖程序20051230.asm
字號:
DJNZ R5,WARN
NOP
POP ACC
POP PSW
NOP
RET
BP:CLR SPK ;鳴笛子程序
LCALL T100MSD
SETB SPK
NOP
RET
;***************************
;***** 顯示子程序 ********
;***************************
;功能:分五屏幕顯示數據,分別是XSA,XSB,XSC,XSD,XSE.代表六種狀態。
;鎖定狀態顯示。
XSA:PUSH ACC
PUSH PSW
MOV A, TIMERS1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A ;送已經輸入密碼的次數
JNB TI, $
CLR TI
MOV SBUF, #0FEH ;送短線
JNB TI, $
CLR TI
MOV SBUF, #0FEH ;送短線
JNB TI, $
CLR TI ;送F
MOV SBUF, #78H
JNB TI, $
CLR TI
MOV SBUF, #78H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
;成功開鎖狀態顯示
XSB:PUSH ACC
PUSH PSW
MOV A, TIMERS1
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
MOV SBUF, #10H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
;密碼輸入及修改狀態
XSC:PUSH ACC
PUSH PSW
LCALL KILLXS
SETB RS1 ;切換到第三組寄存器。防止操作數讀取錯誤。
MOV R6, TIMERS
MOV A, R6
SUBB A, #01H
JNC SC0
JZ SC1
SC0:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC1:MOV A, R6
SUBB A, #02H
JNC SC11
JNZ SC2
SC11:MOV SBUF,#0FEH
JNB TI, $
CLR TI
SC2:MOV A, R6
SUBB A, #03H
JNC SC22
JNZ SC3
SC22:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC3:MOV A, R6
SUBB A, #04H
JNC SC33
JNZ SC4
SC33:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC4:MOV A, R6
SUBB A, #05H
JNC SC44
JNZ SC5
SC44:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC5:MOV A, R6
SUBB A, #06H
JNC SC55
JNZ SC6
SC55:MOV SBUF, #0FEH
JNB TI, $
CLR TI
SC6:MOV A, R6
SUBB A, #07H
JNC SC66
JNZ EXIT_C
SC66:MOV SBUF, #0FEH
JNB TI, $
CLR TI
NOP
NOP
EXIT_C:NOP
CLR RS1
POP PSW
POP ACC
NOP
RET
;密碼輸入錯誤的提示
XSD:PUSH ACC
PUSH PSW
MOV SBUF, #98H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #79H
JNB TI, $
CLR TI
MOV SBUF, #38H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
;鎖定狀態顯示
XSE:PUSH ACC
PUSH PSW
MOV SBUF, #0FEH
JNB TI, $
CLR TI
MOV SBUF, #54H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #11H
JNB TI, $
CLR TI
MOV SBUF, #3DH
JNB TI, $
CLR TI
MOV SBUF, #0FEH
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
XSF:PUSH ACC
PUSH PSW
MOV SBUF, #98H
JNB TI, $
CLR TI
MOV SBUF, #38H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #39H
JNB TI, $
CLR TI
MOV SBUF, #3DH ;U
JNB TI, $
CLR TI
MOV SBUF, #98H
JNB TI, $
CLR TI
POP PSW
POP ACC
RET
KILLXS:PUSH ACC
PUSH PSW
MOV R7, #06H
LOOP_XS:MOV SBUF, #0FFH
JNB TI, $
CLR TI
DJNZ R7,LOOP_XS
NOP
POP PSW
POP ACC
RET
TAB: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H ,0FFH
;****************************************************************
;******* 24C02讀寫程序 ×××××××
;****************************************************************
AT_RADE:PUSH PSW
PUSH ACC
MOV R0,#AT1 ;CPU首地址
MOV R6,#06H ;8字節
MOV R5,#08H ;8位
MOV R7,#00H ;24C02首地址
LCALL READ ;讀數據
NOP
NOP
POP ACC
POP PSW
RET
AT_WR:
PUSH PSW
PUSH ACC
MOV R0,#PS1 ;CPU RAM首地址
MOV R6,#06H ;8字節
MOV R5,#08H ;8 BIT
MOV R7,#00H ;24C02 RAM 首地址
LCALL WRT ;先寫進
NOP
NOP
POP ACC
POP PSW
RET
;---------------------
;讀串行器件 R0:RAM的起始地址,R5:位計數器,
;R6:讀的字節數,R7:讀的起始地址
READ: NOP
NOP
LCALL START0
MOV A,#0A0H
LCALL WRB
LCALL ACK
JB F0,RD_FAIL
MOV A,R7
LCALL WRB
LCALL CHK
JB F0,RD_FAIL
LCALL START0
MOV A,#0A1H
LCALL WRB
LCALL CHK
JB F0,RD_FAIL
RD_N: NOP
NOP
LCALL RDB
MOV @R0,A
DJNZ R6,GO_ACK
LCALL N_ACK
RD_FAIL:NOP
LCALL STOP
MOV A,#0FFH
RET;*************read
GO_ACK: NOP
NOP
DEC R0
LCALL ACK
JMP RD_N
;寫串行器件 R0:RAM的起始地址,R5:位計數器,
;R6:寫的字節數(頁),R7:寫的起始地址
WRT: NOP
NOP
LCALL START0
MOV A,#0A0H
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL
MOV A,R7
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL
WR_N: NOP
NOP
MOV A,@R0
LCALL WRBYT
LCALL CHK
JB F0,WR_FAIL
DEC R0
DJNZ R6,WR_N
WR_FAIL:NOP
LCALL STOP
MOV A,#0FFH
RET;*********wrt
;--------------------
START0: NOP
NOP
SETB SDA
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
NOP
RET
;-------------------
STOP: NOP
NOP
CLR SDA
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
NOP
RET
;--------------------
ACK: NOP
NOP
CLR SDA
SETB SCL
NOP
NOP
CLR SCL
SETB SDA
NOP
RET
;--------------------
N_ACK: NOP
NOP
SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
NOP
RET
;--------------------
CHK: NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
MOV F0,C
CLR SCL
NOP
NOP
RET
;---------------------
RDB: NOP
NOP
SETB SDA
MOV R5,#8
RD_B: NOP
NOP
CLR SCL
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
NOP
NOP
SETB SDA
CLR SCL
DJNZ R5,RD_B
NOP
RET
;一字節數據發送子程序
WRBYT: MOV R5,#8
WLP: RLC A
JC WR1
CLR SDA
SETB SCL
NOP
NOP
CLR SCL
DJNZ R5,WLP
RET
WR1: SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
DJNZ R5,WLP
RET
;--------------------
WRB: NOP
NOP
MOV R5,#8
WR_B: NOP
NOP
SETB SDA
RLC A
JC WR_1
CLR SDA
NOP
WR_1: SETB SCL
NOP
NOP
CLR SCL
NOP
CLR SDA
NOP
DJNZ R5,WR_B
NOP
RET
;***********************************************************************************************
;************* 毫秒延時程序 ********************************************
;***********************************************************************************************
T10MSD:SETB RS0
MOV R4, #12
TM:MOV R3, #128
TM6:DJNZ R3, TM6
DJNZ R4, TM
CLR RS0
RET
T100MSD:MOV R3, #200
D11:MOV R4, #125
D12:DJNZ R4, D12
DJNZ R3, D11
RET
T500MSD:LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
NOP
RET
SEC:SETB RS1
MOV R7, #0AH
SEC_LP:LCALL T100MSD
DJNZ R7,SEC_LP
NOP
CLR RS1
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -