|
摘要:本系統(tǒng)由單片機系統(tǒng)、矩陣鍵盤、LED顯示和報警系統(tǒng)組成。系統(tǒng)能完成開鎖、超時報警、超次鎖定、管理員解密、修改用戶密碼基本的密碼鎖的功能。除上述基本的密碼鎖功能外,還具有調電存儲、聲光提示等功能,依據實際的情況還可以添加遙控功能。本系統(tǒng)成本低廉,功能實用 關鍵詞:AT89S51;AT24C02;電子密碼鎖;矩陣鍵盤 ;******************************************** ;********* 電子密碼鎖 ********* ;******************************************** ;********* 2005/12/24 ********* ;******************************************** ;顯示緩沖區(qū) ;LED1 EQU 6FH BUFF EQU 6EH TIMERS1 EQU 6DH ;輸入回車的次數 TIMERS2 EQU 6CH ;報警的次數 TIMERS EQU 6BH ;輸入數字的位數 ;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 ;按鍵標志位 F_1 BIT 20H F_2 BIT 21H F_3 BIT 22H F_4 BIT 23H BUF_FULL BIT 24H ;密碼已經夠六位的標志位,為1表示滿 CH_STATE BIT 25H ;系統(tǒng)更改的狀態(tài)標志位,為1表示busy FLAG1 BIT 26H ;功能鍵標志位,為1表示功能按鍵。 F_F1 BIT 27H F_F2 BIT 28H PSW_F BIT 29H ;密碼是否正確的標志位 ;口資源定義 SPK BIT P2.1 JDQ BIT P2.3 SDA BIT P2.4 ;定義串口數據端 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 ;清除標志位 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 ;調用 LCALL INITPS ;初始化環(huán)境 LCALL INITAT LCALL XSA ;調用默認顯示 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ū)以識別是數字鍵還是功能鍵? LCALL CH_KF ;判斷按鍵功能。 JB FLAG1 ,KEY_FUN ;標志為1,則為功能鍵 ;***********數字按鍵輸入并且存放到緩沖區(qū)內等待比較*********** KEY_DIG:NOP ;設一標志,辨別輸入是否滿 ;SETB TR0 INC TIMERS ;輸入數字的位數 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 ;比較輸入的次數。 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 ;*****************功能按鍵比較并且跳轉************* KEY_FUN: CLR FLAG1 CLR C MOV A, BUFF SUBB A, #03H ;按鍵CL跳轉 JNZ EN_C AJMP CL EN_C:CLR C MOV A, BUFF ;按鍵EN跳轉 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緩沖,加調電存儲后一定要加上 LCALL XSC LCALL BP LCALL BP LCALL T100MSD LCALL BP CLR FLAG1 AJMP CH_KEY FU4:NOP LCALL BP LCALL T100MSD LCALL BP LCALL T100MSD LCALL BP LCALL T100MSD LCALL BP LCALL T100MSD LCALL BP CLR FLAG1 AJMP CH_KEY FU3:NOP LCALL BP LCALL T100MSD LCALL BP LCALL KILLXS ;關閉顯示 CLR FLAG1 AJMP CH_KEY FU1:NOP LCALL XSC JB F_F1, NEXT_F1 CLR L1 LCALL BP SETB F_F1 AJMP CH_KEY NEXT_F1:SETB L1 LCALL BP CLR F_F1 ;LCALL CH_STATE ;查看現在的狀態(tài)以防誤按 ;SETB TR1 ;報警限制暫時不開 ;INC F_F1 CLR FLAG1 AJMP CH_KEY FU2:NOP JB F_F2, NEXT_F2 CLR L2 LCALL BP SETB F_F2 AJMP CH_KEY NEXT_F2:SETB L2 LCALL BP CLR F_F2 CLR FLAG1 AJMP CH_KEY ;***************按鍵的功能描述************************* EN:NOP JB BUF_FULL, GOON AJMP EXIT GOON:CLR BUF_FULL JB F_F2, AT_WRON ;F2按鍵標志,若為1,則調用修改密碼子程序。 LCALL AT_RADE LCALL C_PSW ;比較密碼子程序 JB PSW_F,OPEN ;密碼比較正確,則調用開鎖子程序 LCALL XSD INC TIMERS2 MOV R7,TIMERS2 ;密碼錯誤,調入輸入密碼輸入次數,準備鎖定鍵盤 CJNE R7,#03H,D0 D0:JC NEXT1 ;錯誤次數小3次 LCALL XSE ;鎖定5分鐘 LCALL WARN2S LCALL LOCK_1M NEXT1:LCALL WARN2S ;報警2分鐘 LCALL XSA EXIT:LCALL INITPS MOV BUFF, #00H CLR FLAG1 MOV TIMERS, #00H AJMP CH_KEY ;跳出 AT_WRON:LCALL AT_WR LCALL XSF LCALL BP LCALL T100MSD LCALL BP LCALL T500MSD LCALL KILLXS LCALL T500MSD LCALL XSF LCALL T500MSD LCALL KILLXS LCALL T500MSD LCALL XSF LCALL T500MSD NOP NOP LCALL XSA AJMP EXIT OPEN:MOV A, TIMERS1 CJNE A, #09H,CLT1 CLT1:JC GOON1 MOV TIMERS1,#00H GOON1:INC TIMERS1 ;輸入回車的次數 MOV TIMERS2,#00H SETB L3 CLR PSW_F LCALL XSB CLR JDQ ;開門 LCALL BP LCALL BP LCALL BP LCALL BP LCALL SEC LCALL SEC LCALL SEC LCALL SEC LCALL SEC LCALL SEC LCALL SEC LCALL SEC SETB JDQ LCALL XSA NOP AJMP EXIT ;**************各類子程序******************************** ;**** 注意清楚緩沖區(qū)時AT1...AT6不應在初始化中執(zhí)行,以 *** ;**** 防兩緩沖區(qū)都為0,相同開鎖 *** ;********************************************************
CLR_BUF:MOV R7, #06H MOV R0, #6FH LOOP1:MOV A, #00H MOV @R0, A DEC R0 DJNZ R7,LOOP1 RET ;*************初始化顯示緩沖區(qū)以及其他緩沖區(qū)************** INITPS:PUSH ACC PUSH PSW MOV R7, #06H MOV R1, #PS1 MOV A, #00H INIT_PS:MOV @R1, A DEC R1 DJNZ R7, INIT_PS POP PSW POP ACC NOP RET INITAT:PUSH ACC PUSH PSW MOV R7,#06H MOV R1,#AT1 MOV A, #00H INIT_AT:MOV @R1, A DEC R1 DJNZ R7, INIT_AT MOV TIMERS,#00H ;密碼輸入的次數清零。 POP PSW POP ACC RET ;************* 按鍵識別子程序 *************************** SBIE:MOV R2, #0EFH ;識別按鍵子程序,數據送A保存,課本P146頁。 MOV R4, #00H LK4:MOV A, R2 MOV P0, A NOP MOV A, P0 JB ACC.0,LONE MOV A, #00H AJMP LKP LONE:JB ACC.1,LTWO MOV A, #08H AJMP LKP LTWO:JB ACC.2,LTHR MOV A, #10H AJMP LKP LTHR:JB ACC.3,NEXTT ;判斷下一列 MOV A, #18H LKP:ADD A, R4 PUSH ACC LK3:ACALL KS JNZ LK3 POP ACC RET NEXTT:INC R4 MOV A, R2 JNB ACC.7,KND RL A MOV R2, A AJMP LK4 KND:AJMP CH_KEY KS:MOV P0, #0FH NOP MOV A, P0 CPL A ANL A, #0FH NOP RET CH_KF:CLR C MOV A, BUFF ;判斷是數字按鍵還是功能按鍵,為1表示功能鍵 CJNE A, #17H, KY KY:JC SET_CH ;假若是數字按鍵則標志置為0 SETB FLAG1 ;假若是功能按鍵則標志置為1 AJMP CHKE_END SET_CH:CLR C MOV A, BUFF SUBB A, #00H JNZ EN_CH SETB FLAG1 AJMP CH_END EN_CH:MOV A, BUFF SUBB A, #03H JNZ DIG SETB FLAG1 AJMP CH_END DIG:CLR FLAG1 CH_END:NOP CHKE_END:RET T12MS:MOV R7, #18H TM1:MOV R6, #0FFH TM66:DJNZ R6, TM66 DJNZ R7, TM1 RET ;****************檢驗密碼正誤****************************** C_PSW:PUSH PSW PUSH ACC MOV R2,#06H MOV R0,#PS1 MOV R1,#AT1 C_P:CLR C MOV A,@R0 SUBB A,@R1 JNZ RETURN DEC R0 DEC R1 DJNZ R2,C_P NOP SETB PSW_F AJMP EXIT7 RETURN:CLR PSW_F EXIT7:NOP POP ACC POP PSW RET ;×××××××××××××××××鎖定,鳴笛子程序×××××××××××× LOCK_1M:MOV R4,#3CH ;鎖定1分鐘 M1_LOOP:LCALL SEC DJNZ R4,M1_LOOP NOP RET WARN2S:PUSH PSW PUSH ACC MOV R5, #14H ;調用20次BP,報警2s WARN:LCALL BP DJNZ R5,WARN NOP POP ACC POP PSW NOP RET BP:CLR SPK ;鳴笛子程序 LCALL T100MSD SETB SPK NOP RET |