ORG 00H MOV R7,#00H ;延时 DJNZ R7,$ ;***************设置内定密码******************** 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行已经扫描完,回到第一行从新开始扫描 ;************************************************************* 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 ;数据指针指到TABLE MOVC A,@A+DPTR ;至TABLE取码 MOV R7,A ;取到按键值暂存入R7 XRL A,#0AH ;是否按"*" JZ SET0 ;是则设定新密码 MOV A,R7 ;载入按键值 XRL A,#0BH ;是否按"#" JZ COMP ;是则去比较密码 MOV A,R7 ;不是则载入按键值 XCH A,40H ;现按键值存入(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 |