ORG 00H MOV R7,#00H ;延時 DJNZ R7,$ ;***************設(shè)置內(nèi)定密碼******************** MOV 35H,#06 MOV 34H,#06 MOV 33H,#06 MOV 32H,#06 MOV 31H,#06 MOV 30H,#06 ;*************************************************************** START: MOV P0,#0FFH ;P0口都置1 MOV 45H,#09 ;清除存放地址40H-45H的地址 MOV 44H,#08 MOV 43H,#07 MOV 42H,#06 MOV 41H,#05 MOV 40H,#04 ;*************************************************************** L2: MOV P0,#0FFH ;P0口都置1 MOV R3,#0EFH ;掃描指針初值(P14=0) MOV R1,#00H ;鍵盤取碼指針 L3: MOV A,R3 ;掃描指針載入累加器 MOV P1,A ;輸入至P1掃描 MOV A,P1 ;讀入P1值 MOV R4,A ;存入R4,以判斷按鈕是否放開? SETB C ;C=1 MOV R5,#03H ;掃描P10-P12 L4: RRC A JNC KEYIN ;C=0則有鍵按下 INC R1 ;無鍵按下則指針加1 DJNZ R5,L4 ;三列掃描完后掃描下一行 MOV A,R3 ;載入掃描指針 SETB C ;C=1 RLC A ;掃描下一行 MOV R3,A ;存入掃描指針寄存器 JC L3 ;C=1則4行未掃描完 JMP L2 ;C=0則4行已經(jīng)掃描完,回到第一行從新開始掃描 ;************************************************************* KEYIN: MOV R7,#10 ;消除抖動 D1: MOV R6,#248 DJNZ R6,$ DJNZ R7,D1 D2: MOV A,P1 XRL A,R4 ;按鈕放開否? JZ D2 ;A=R4則未放開,等待 MOV A,R1 ;按鍵放開了,載入按鍵指針 MOV DPTR,#TABLE ;數(shù)據(jù)指針指到TABLE MOVC A,@A+DPTR ;至TABLE取碼 MOV R7,A ;取到按鍵值暫存入R7 XRL A,#0AH ;是否按"*" JZ SET0 ;是則設(shè)定新密碼 MOV A,R7 ;載入按鍵值 XRL A,#0BH ;是否按"#" JZ COMP ;是則去比較密碼 MOV A,R7 ;不是則載入按鍵值 XCH A,40H ;現(xiàn)按鍵值存入(40H) XCH A,41H ;舊(40H)值存入 (41H) XCH A,42H ;舊(41H)值存入 (42H) XCH A,43H ;舊(42H)值存入 (43H) XCH A,44H ;舊(43H)值存入 (44H) XCH A,45H ;舊(44H)值存入 (45H) JMP L2 ;******************************************************************** SET0: MOV R2,#06H ;6個密碼 MOV R0,#40H ;按鍵顯示地址 MOV R1,#30H ;密碼存放地址 E1: MOV A,@R0 ;40H存入30H······45H存入35H XCH A,@R1 INC R0 INC R1 DJNZ R2,E1 CALL DELAY ;延時 E2: JMP START ;************************************ ;******************************************************************** COMP: MOV R1,#45H ;按鍵顯示地址 MOV R0,#35H ;密碼存放地址 MOV R2,#06H ;6個碼 C1: MOV A,@R1 ;按鍵值與密碼值比較 XRL A,@R0 JNZ C3 ;不同則報警 DEC R1 ;相同則比較下一個碼 DEC R0 DJNZ R2,C1 CLR P0.0 ;令電鎖動作 CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY JMP L2 C3: CLR P0.1 CLR P0.2 CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY JMP L2 ;********************* 延時時間 ************************** DELAY: MOV R7,#248 D3: MOV R6,#248 DJNZ R6,$ DJNZ R7,D3 RET
ORG 100H TABLE: DB 01H,02H,03H ;鍵盤值 DB 04H,05H,06H DB 07H,08H,09H DB 0AH,00H,0BH END |