;********************************************
;********* 電子密碼鎖 *********
;********************************************
;********* 2005/12/24 *********
;********************************************
;顯示緩沖區(qū)
;LED1 EQU 6FH
BUFF EQU 6EH
TIMERS1 EQU 6DH ;輸入回車的次數(shù)
TIMERS2 EQU 6CH ;報警的次數(shù)
TIMERS EQU 6BH ;輸入數(shù)字的位數(shù)
;LED6 EQU 6AH
;密碼緩沖區(qū)
PS1 EQU 69H
PS2 EQU 68H
PS3 EQU 67H
PS4 EQU 66H
PS5 EQU 65H
PS6 EQU 64H
;AT24C02讀取緩沖區(qū)
AT1 EQU 63H
AT2 EQU 62H
AT3 EQU 61H
AT4 EQU 60H
AT5 EQU 5FH
AT6 EQU 5EH
;按鍵標(biāo)志位
F_1 BIT 20H
F_2 BIT 21H
F_3 BIT 22H
F_4 BIT 23H
BUF_FULL BIT 24H ;密碼已經(jīng)夠六位的標(biāo)志位,為1表示滿
CH_STATE BIT 25H ;系統(tǒng)更改的狀態(tài)標(biāo)志位,為1表示busy
FLAG1 BIT 26H ;功能鍵標(biāo)志位,為1表示功能按鍵。
F_F1 BIT 27H
F_F2 BIT 28H
PSW_F BIT 29H ;密碼是否正確的標(biāo)志位
;口資源定義
SPK BIT P2.1
JDQ BIT P2.3
SDA BIT P2.4 ;定義串口數(shù)據(jù)端
SCL BIT P2.5
;發(fā)光二極管燈
L1 BIT P1.0
L2 BIT P1.1
L3 BIT P1.2
;
ORG 0000H
AJMP MAIN
ORG 000BH
;AJMP TIMER0
ORG 001BH
;AJMP TIMER1
ORG 0030H
MAIN:MOV SP, #70H
MOV TMOD, #11H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV TH1, #3CH
MOV TL1, #0B0H
CLR F_1 ;清除標(biāo)志位
CLR F_2
CLR F_3
CLR F_4
CLR BUF_FULL
CLR CH_STATE
CLR FLAG1
CLR F_F1
CLR F_F2
CLR PSW_F
MOV BUFF,#00H ;調(diào)用
LCALL INITPS ;初始化環(huán)境
LCALL INITAT
LCALL XSA ;調(diào)用默認(rèn)顯示
MOV TIMERS1,#00H
NOP
MOV PS1, #11H ;初始化密碼830620
MOV PS2, #0AH
MOV PS3, #02H
MOV PS4, #13H
MOV PS5, #0BH
MOV PS6, #02H
START:NOP ;程序開始
LCALL CH_KEY ;檢查鍵盤
AJMP START ;返回
CH_KEY:LCALL KS ;檢查有沒有按鍵按下
JNZ LK1
AJMP CH_KEY
LK1:
LCALL T12MS
ACALL KS
JNZ LK2
RET
LK2:
NOP
LCALL SBIE ;按鍵識別子程序
MOV BUFF, A ;送緩沖區(qū)以識別是數(shù)字鍵還是功能鍵?
LCALL CH_KF ;判斷按鍵功能。
JB FLAG1 ,KEY_FUN ;標(biāo)志為1,則為功能鍵
;***********數(shù)字按鍵輸入并且存放到緩沖區(qū)內(nèi)等待比較***********
KEY_DIG:NOP ;設(shè)一標(biāo)志,辨別輸入是否滿
;SETB TR0
INC TIMERS ;輸入數(shù)字的位數(shù)
MOV A, TIMERS
CLR C
SUBB A, #01H
JNZ PS_2
MOV PS1, BUFF ;依照順序存放密碼
AJMP NEXT
PS_2:MOV A, TIMERS
SUBB A, #02H
CLR C
JNZ PS_3
MOV PS2, BUFF
AJMP NEXT
PS_3:MOV A, TIMERS
CLR C
SUBB A, #03H
JNZ PS_4
MOV PS3, BUFF
AJMP NEXT
PS_4:MOV A, TIMERS
CLR C
SUBB A, #04
JNZ PS_5
MOV PS4, BUFF
AJMP NEXT
PS_5:MOV A, TIMERS
CLR C
SUBB A, #05
JNZ PS_6
MOV PS5, BUFF
AJMP NEXT
PS_6:MOV A, TIMERS
CLR C
SUBB A, #06H
JNZ CH_KEY
MOV PS6, BUFF
NEXT:LCALL XSC
MOV R7, TIMERS ;比較輸入的次數(shù)。
CJNE R7, #06H ,FULL
FULL:JC NEXT9
SETB BUF_FULL
MOV TIMERS,#06H
CLR L3
NOP
CLR P2.1
LCALL T100MSD
SETB P2.1
NOP
AJMP CH_KEY
NEXT9:CLR P2.1 ;密碼輸入一位,鳴叫一聲。
CLR L3
LCALL T100MSD ;延時100ms
SETB L3
SETB P2.1
AJMP CH_KEY
;*****************功能按鍵比較并且跳轉(zhuǎn)*************
KEY_FUN:
CLR FLAG1
CLR C
MOV A, BUFF
SUBB A, #03H ;按鍵CL跳轉(zhuǎn)
JNZ EN_C
AJMP CL
EN_C:CLR C
MOV A, BUFF ;按鍵EN跳轉(zhuǎn)
SUBB A, #00H
JNZ F1_C
AJMP EN
F1_C:CLR C
MOV A, BUFF
SUBB A, #1BH
JNZ F2_C
AJMP FU1
F2_C:CLR C
MOV A, BUFF
SUBB A, #1AH
JNZ F3_C
AJMP FU2
F3_C:CLR C
MOV A, BUFF
SUBB A, #19H
JNZ F4_C
AJMP FU3
F4_C:CLR C
MOV A, BUFF
SUBB A, #18H
JZ FU4
EXIT8:NOP
LJMP CH_KEY
;***************開門子程序 ********************************
CL:NOP
SETB L3
MOV BUFF, #00H ;消密碼緩沖
MOV TIMERS,#00H
LCALL INITPS ;消除AT緩沖,加調(diào)電存儲后一定要加上
LCALL XSC
LCALL BP
LCALL BP
LCALL T100MSD
LCALL BP
CLR FLAG1
AJMP CH_KEY