用AT89C2051設(shè)計的多功能密碼鎖
一、硬件電路:
AT89C2051是與MCS-51系列兼容的一種高性能單片機,具有2KB片內(nèi)ROM、256字節(jié)片內(nèi)RAM,可以不需擴展外程序、數(shù)據(jù)存儲器,可滿足一般的程序需求,從硬件組成可以看出該密碼鎖有一個3X4陣列的鍵盤,只需7條I/O引腳就可以了余下的I/O引腳可以開發(fā)其他控制功能,如:控制空調(diào)、電燈、風(fēng)扇等。
二、功能實現(xiàn)
鍵盤掃描所用引腳P1.0-P1.6,其中P1.4-P1.6這3條引腳用于輸出掃描信號,P1.0-P1.3這4條引腳用于檢測按鍵的狀態(tài)。P1.0-P1.6的狀態(tài)組成的鍵碼以及對應(yīng)按鍵如表1所列。
在程序執(zhí)行中,是先從P1.6送出“0”,再判別P1.3-P1.0的輸入。所以,實質(zhì)是在P1.6-P1.4送出“011”,接收P1.3-P1.0的輸入狀態(tài),這時判別8,9,A這4個鍵。接著,在P1.6-P1.4送出“101”,接收P1.3-P1.0的輸入,這時判別4,5,6,7這4個鍵。再而,在P1.6-P1.4送出“110”,接收P1.3-P1.0的輸入,這時判別0,1,2,3這4個鍵的狀態(tài)。
開鎖電平UNLOCK的輸出腳P3.0,當(dāng)輸入的鍵正確時則在P3.0輸出開鎖電平UNLOCK。
報警電平DANG輸出腳P3.1。在6次誤碼輸入的條件下,進行報警。
LOCK控制引腳P3.2,90S之后停止輸入。
有效按鍵提示EFFI引腳P3.3。
錯誤輸入警告WARN引腳P3.4。
另外,還有引腳5,4接石英振蕩器的XTAL2,XTAL1端,組成石英振蕩器電路,在圖1中沒有畫出。引腳1用于復(fù)位。
三、密碼鎖的控制程序
密碼鎖的控制程序由延時子程序、修改密碼子程序、掃描輸入子程序、時鐘中斷子程序及主程序組成。程序框圖如圖2所示。它對輸入的8位十進制密碼進行判別,如果輸入密碼正確,則可以直接開鎖或修改密碼之后開鎖。如果不正確,并且6次以上輸入不正確,則報警并封鎖輸入口。
1.主程序:
ORG 0H
SJMP START
ORG 0BH
SJMP INT
START ;初始化
MOV SP.#70H
SETB P3.0
SETB P3.1
SETB P3.2
SETB P3.3
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#00H
SETB TR0
SETB ET0
SETB EA
MOV R2,#0FFH
MOV 3AH,#03H
MOV R3,#06H
PASSWORD:MOV R4,#08H ;設(shè)置初始密碼
MOV R0,#40H
MOV A,#07H
MOV @R0,A
INC R0
INC A
DJNZ R4,PASSWORD
DETPW: MOV R4,#08H ;輸入密碼
MOV R0,#30H
AGAIN: ACALL INPUT
MOV A,R7
CJ R7,#08H,IN
ACALL CHPSW ;修改密碼子程序
JMP GETPW
IN: MOV @R0,A
CLR P3.3 ;按鍵有效顯示
ACALL DELAY
SETB P3.3
COMP: MOV R4,#08H ;比較密碼
MOV R0,#30H
AGAI: MOV 50H,@R0
ADD R0,#010H
MOV A,@R0
SUB R0,#010H
CJNE A,50H,ONCEMORE
INC R0
DJNZ R4,AGA1
CLR P3.0
HERE: AJMP HERE
ONCEMORE:CLR P3.4 ;錯誤輸入警告
ACALL DELAY
SETB P3.4
DJNZ R3,GETPW
CLR P3.1 ;6次錯誤輸入報警
THERE: AJMP THERE
2.延時子程序
DELAY: MOV R5,#30H
DELAY1: MOV A,#0FFH
LOOOP: DEC A
JNZ LOOP
DJNZ R5,DELAY1
RET
3.修改密碼子程序
CHPSW: MOV R0,#40H
ANOTHER: ACALL INPUT
MOV A,R7
MOV @R0,A
INC R0
CLR P3.3 ;按鍵有效提示
ACALL DELAY
SETB P3.3
DJNZ R4,ANOTHER
RET
4.掃描鍵盤輸入子程序
INPUT: MOV R6,#02H
MOV R1,#40H
LOP: ACALL DELAY
MOV P1,#0FFH ;掃描碼
CLR P1.6
MOV A,P1
ANL A,#0FH ;檢驗有否按鍵
CJNE A,#0FH,INKEY
MOV P1,#0FFH
CLR P1.5
MOV A,P1
ANL A,#0FH
CJNE AA,#0FH,INKEY
MOV P1,#0FFH
CLR P1,4
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,INKEY
SJMP LOP
INKEY: MOV @R1,P1
INC R1
DJNZ R6,LOP
DEC R1
MOV A,@R1
DEC R1
CJNE A,40H,INPUT
RET
5.時鐘中斷子程序
INT: PUSH ACC
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#00H
SETB TR0
SETB ET0
SETB EA
DJNZ R2,CONT
CONTINUE
DJNA 3AH,CONT
CLR P3.2 ;時鐘中斷控制
STOP: AJMP STOP
CONT: POP ACC
RET1
評論