密码锁—微机原理及应用课程设计报告 下载本文

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页