CJNE R0,#29H,D13S MOV R0,#RDS D13S: MOV @R0,#0A4H INC R0 LJMP K2 ;功能键1
D14: CJNE A,#0EEH,D15 CJNE R0,#29H,D14S MOV R0,#RDS D14S: MOV @R0,#0B0H INC R0 D15: LJMP K2
;--------------------------------------------------------------------- ;第二行
K20: MOV B,A
LCALL DELAY10MS MOV A,IN CJNE A,B,K3J
LCALL DELAY10MS K21: MOV A,IN
CJNE A,B,D21 SJMP K21
;判断一行中是哪个键按下 D21: MOV A,B
CJNE A,#7DH,D22 CJNE R0,#28,D21S MOV R0,#RDS D21S: MOV @R0,#99H INC R0 K3J: LJMP K3
D22: CJNE A,#0BDH,D23 CJNE R0,#29H,D22S MOV R0,#RDS D22S: MOV @R0,#92H INC R0 LJMP K3
D23: CJNE A,#0DDH,D24 CJNE R0,#29H,D23S MOV R0,#RDS D23S: MOV @R0,#82H INC R0 LJMP K3 ;功能键2
D24: CJNE A,#0EDH,D25
第 16 页 共 33页
CJNE R0,#29H,D24S MOV R0,#RDS D24S: MOV @R0,#0F8H INC R0 D25: LJMP K3
;------------------------------------------------------------------- ;第三行
K30: MOV B,A
LCALL DELAY10MS MOV A,IN CJNE A,B,D35
LCALL DELAY10MS K31: MOV A,IN
CJNE A,B,D31 SJMP K31
;判断一行中是哪个键按下 D31: MOV A,B
CJNE A,#7BH,D32 CJNE R0,#29H,D31S MOV R0,#RDS D31S: MOV @R0,#80H INC R0 LJMP K4
D32: CJNE A,#0BBH,D33 CJNE R0,#29H,D32S MOV R0,#RDS D32S: MOV @R0,#90H INC R0 LJMP K4
D33: CJNE A,#0DBH,D34 CJNE R0,#29H,D33S MOV R0,#RDS D33S: MOV @R0,#88H INC R0 LJMP K4 ;功能键3
D34: CJNE A,#0EBH,D35 CJNE R0,#29H,D34S MOV R0,#RDS D34S: MOV @R0,#83H INC R0 D35: LJMP K4
;------------------------------------------------------------------- ;第四行
第 17 页 共 33页
K40: MOV B,A
LCALL DELAY10MS MOV A,IN CJNE A,B,D45
LCALL DELAY10MS K41: MOV A,IN
CJNE A,B,D41 SJMP K41 ;功能键CALL D41: MOV A,B
CJNE A,#77H,D42 LCALL CALLHOST MOV DPTR,#TAB0 LJMP ST0 ;功能键SET;设置密码 D42: CJNE A,#0B7H,D43
JNB FLAGE1.1,D42S ;FLAGE第一位不为1,跳转 ;---写24C02---------------------------------------------------------- WR2402: MOV SLA,#AT24C02 ;指定期间地址 MOV SUBA,#00H ;指定子地址为00H MOV NUMBYTE,#6 ;写6个字节数 LCALL IWRNBYTE NOP NOP
D42S: LJMP K1 ;返回继续扫描下列程序 ;功能键ESC
D43: CJNE A,#0D7H,D44 ; 判断一行中是哪个按键按下 MOV R0,#RDS MOV R2,#6 ;6个数据存储器清零 CLR A ;将A置0 ESC: MOV @R0,A INC R0
DJNZ R2,ESC SETB P2.6 ;释放电磁锁 LJMP K1 ;返回继续扫描下列程序 ;功能键OK
D44: CJNE A,#0E7H,D45 ;判断一行中是哪个按键按下 ;---读24C02----------------------------------------------------------- RD24C02:MOV SLA,#AT24C02 MOV SUBA,#00H
MOV NUMBYTE,#6 ;读6个字节数据 LCALL IRDNBYTE MOV R2,#6 MOV R0,#RDS
第 18 页 共 33页
MOV R1,#MRD CMP: MOV A,@R0
MOV MTD,@R1
CJNE A,MTD,ERRO ;密码检测,密码不对,转 INC R0 INC R1
DJNZ R2,CMP CLR DCOUT ;正确则驱动电磁锁开门 MOV DPTR,#TAB3 ;显示“HELLO!”
SETB P3.1 NOP
CLR P3.1 ;绿灯亮
CLR P3.0 SETB FLAGE1.1 ;返回,清楚密码 D45: LJMP ST0 ;
ERRO: INC TEMP
MOV A,TEMP
CJNE A,#6H,ERRO1 ;错误输入次数到6次,则报警
SETB P3.0 NOP
CLR P3.0 ;黄灯亮 SETB P3.2 NOP
CLR P3.2 ;红灯亮 SETB FLAGE1.0
ERRO1: MOV DPTR,#TAB2 ;显示“ERROR!” LJMP ST1
;**************************************************** ;隐藏显示输入6个数据-/H********************************** DISPLAY:MOV DPTR,#TAB1 ;指定查表起始地址 MOV A,RDS JZ DS1 ;判断是否有数据,有显示H,否则显示--- MOV A,#1 SJMP DS2 DS1: MOV A,#0
DS2: MOVC A,@A+DPTR MOV P0,A CLR P2.0
ACALL D1MS
第 19 页 共 33页