⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 密码锁_成功.asm

📁 设计防盗电子密码锁
💻 ASM
字号:
					ORG		0000H
		AJMP	START
		ORG		000BH
		AJMP	T_0

		ORG		0100H
START:	LCALL	INIT					  ;初始化程序
TEMP:	LCALL	DISPLAY					  ;数码管显示程序
		LCALL	KEY_TEST                  ;键盘测试,把所测得的键值存入40H
		LCALL	KEY_PRG					  ;键盘响应程序
		SJMP	TEMP

INIT:	MOV		SP,		#60H
		MOV		TMOD,	#10H
		MOV		TH0,	#3CH
		MOV		TL0,	#0B0H
		MOV		IE,		#82H
		SETB	TR0
		LCALL	TEST_S					   ;密码是否保存过
		CLR		09H				   		   ;09H为高电平表示控制灯闪三闪,以示修改密码成功
INIT0:	CLR		00H						   ;控制R0每一次按键只加1
		SETB	01H						   ;初始化灯亮
		SETB	02H
		SETB	03H
		SETB	04H
		MOV		R0,		#0
		MOV		39H,	#100					;表时闹钟响的时间
		MOV		41H,	#0BFH
		MOV		42H,	#0BFH
		MOV		43H,	#0BFH
		MOV		44H,	#0BFH
		MOV		50H,	#00H				;灯灭位
		RET

TEST_S:	LCALL	READ_S						;08H为1时表示首次使用,需设置初始用户密码
		CLR		08H
		MOV		A,		#01H
		CJNE	A,		38H,	S_EXIT
		SETB	08H
S_EXIT:	RET


DISPLAY:JB		01H,	D1				   ;数码管显示程序
		MOV		P2,		#00H
		SJMP	ND1
D1:		MOV		P2,		#01H
ND1:	MOV		P0,		41H
		LCALL	RING
		LCALL	DELAY
		JB		02H,	D2
		MOV		P2,		#00H
		SJMP	ND2
D2:		MOV		P2,		#02H
ND2:	MOV		P0,		42H
		LCALL	RING
		LCALL	DELAY
		JB		03H,	D3
		MOV		P2,		#00H
		SJMP	ND3
D3:		MOV		P2,		#04H
ND3:	MOV		P0,		43H
		LCALL	RING
		LCALL	DELAY
		JB		04H,	D4
		MOV		P2,		#00H
		SJMP	ND4
D4:		MOV		P2,		#08H
ND4:	MOV		P0,		44H
		LCALL	RING
		LCALL	DELAY
		RET

RING:	JNB		08H,	RING_EXIT
		SETB	P2.5
RING_EXIT:RET	


KEY_TEST:MOV	P3,		#0FH				  ;检测是否按键被按下
		MOV		A,		P3
		ANL		A,		#0CH
		CJNE	A,		#0CH,	TEST
		RET

TEST:	MOV		R7,		#4H
		LCALL	DE
		CJNE	A,		#0CH,	J_IN
		RET

J_IN:	MOV		R7,		#2						;键盘测试,把所测得的键值存入40H
		LCALL	DE
		MOV		R2,		#4
		MOV		R3,		#80H
J_IN1:	MOV		A,		R3
		CPL		A
		MOV		P3,		A
		MOV		A,		P3
		ANL		A,		#0CH
		CJNE	A,		#0CH,	J_IN2
		MOV		A,		R3
		RR		A
		MOV		R3,		A
		DJNZ	R2,		J_IN1
		RET
J_IN2:	MOV		R1,		#0
		JNB		ACC.3,	J_IN3
		MOV		R1,		#4
J_IN3:	MOV		A,		R1
		ADD		A,		R2
		MOV		40H,	A
		SETB	00H
		RET


KEY_PRG:MOV		P3,		#0FH			   ;键盘响应程序
		MOV		A,		P3				   ;检测是否按键被按下
		ANL		A,		#0CH
		CJNE	A,		#0CH,	PRG_EXIT
		MOV		R7,		#4
		LCALL	DE
		CJNE	A,		#0CH,	PRG_EXIT
		JNB		00H,	PRG_EXIT
		MOV		A,		40H
		CJNE	A,		#8,		K_7_PRG
		LCALL	OPEN
		SJMP	PRG_E
K_7_PRG:CJNE	A,		#7,		K_6_PRG
		LCALL	SETTING
		SJMP	PRG_E
K_6_PRG:MOV		A,		#41H
		
		ADD		A,		R0
		MOV		R1,		A
		MOV		A,		40H
		MOV		DPTR,	#TABLE
		MOVC	A,		@A+DPTR
		MOV		@R1,	A
		INC		R0
		CJNE	R0,		#4H,	CONTINUE
		MOV		R0,		#0
CONTINUE:MOV	50H,	#00H
PRG_E:	CLR		00H
		MOV		R7,		#4H
		LCALL	DE
PRG_EXIT:RET				


OPEN:	MOV		A,		41H						 ;厂家密码为1234
		CJNE	A,		#0F9H,	OPEN_EE
		MOV		A,		42H
		CJNE	A,		#0A4H,	OPEN_EE
		MOV		A,		43H
		CJNE	A,		#0B0H,	OPEN_EE
		MOV		A,		44H
		CJNE	A,		#99H,	OPEN_EE
		SJMP	OPEN_OK
OPEN_EE:LCALL	READ_EE							  
		MOV		A,		41H
		CJNE	A,		31H,	OPEN_EXIT
		MOV		A,		42H
		CJNE	A,		32H,	OPEN_EXIT
		MOV		A,		43H
		CJNE	A,		33H,	OPEN_EXIT
		MOV		A,		44H
		CJNE	A,		34H,	OPEN_EXIT
OPEN_OK:SETB	P2.5
		SETB	08H	
OPEN_EXIT:LCALL	INIT0
		RET



SETTING:JNB		08H,	SETTING_EXIT
		MOV		A,		#0BFH
		CJNE	A,		41H,	INPUT1
		SJMP	SETTING_EXIT
INPUT1:	CJNE	A,		42H,	INPUT2
		SJMP	SETTING_EXIT
INPUT2:	CJNE	A,		43H,	INPUT3
		SJMP	SETTING_EXIT
INPUT3:	CJNE	A,		44H,	INPUT_OK
		SJMP	SETTING_EXIT
INPUT_OK:LCALL	WRITE_EE
		LCALL	SAVE_S
		CLR		08H
		SETB	09H
		SETB	01H
		SETB	02H
		SETB	03H
		SETB	04H
		MOV		37H,	#10H
		SJMP	S_E
SETTING_EXIT:LCALL	INIT0
S_E:	RET


DELAY:	MOV		R7,		#5
DE:		MOV		R2,		#250
		DJNZ	R2,		$
		DJNZ	R7,		DE
		RET

		
T_0:   	DJNZ	R6,		EXIT0	                   ;T0 中断
		MOV		R6,		#40
		JNB		09H,	ONELIGHT
		DJNZ	37H,	EXIT0_1
		CLR		09H
		LCALL	INIT0
		SJMP	EXIT0
ONELIGHT:LCALL	LIGHT
		JNB		08H,	EXIT0
		DJNZ	39H,	EXIT0							;39H表示声音响的时间长,也是开锁时间
		LCALL	INIT0
		CLR		08H
		CLR		P2.5
		SJMP	EXIT0
EXIT0_1:CLR		08H
		CLR		P2.5
		LCALL	THREELIGHT
EXIT0:	MOV		TH0,	#3CH
		MOV		TL0,	#0B0H
		RETI

LIGHT:	CJNE	R0,		#0,		LIGHT1			   ;灯的亮灭,01H-04H分别代表四个数码管的亮灭
		CPL		01H
		SJMP	LIGHT0
LIGHT1:	SETB	01H
		CJNE	R0,		#1,		LIGHT2
		CPL		02H
		SJMP	LIGHT_EXIT
LIGHT2:	SETB	02H
		CJNE	R0,		#2,		LIGHT3
		CPL		03H
		SJMP	LIGHT_EXIT
LIGHT3:	SETB	03H	
		CJNE	R0,		#3,		LIGHT0
		CPL		04H
		SJMP	LIGHT_EXIT
LIGHT0:	SETB	04H
LIGHT_EXIT:RET


THREELIGHT:CPL	01H
		CPL	02H
		CPL	03H
		CPL	04H
		RET
					

		
;EEPROM的读写子程序
WRITE_EE:LCALL	INIT_EE							   
		MOV     R1,		#41H
WR_CODE:MOV	    A,		@R1
		LCALL   WBYTE
		LCALL	RACK
		INC  	R1
        CJNE	R1,		#45H,	WR_CODE	
		LCALL 	WAITE
		LCALL	STOP
		RET

READ_EE:LCALL	INIT_EE							   ;写放入31H,32H,33H,34H
		LCALL	STA
		MOV		A,		#0A1H
		LCALL	WBYTE
		LCALL	RACK
		MOV		R5,		#4
		MOV		R1,		#31H
		LCALL	RBYTE
		LCALL	SNACK
		LCALL	STOP
		RET
		

INIT_EE:LCALL	STA
		MOV		A,		#0A0H
		LCALL	WBYTE
		LCALL	RACK
		MOV		A,		#00H
		LCALL	WBYTE
		LCALL	RACK
		RET

												  ;是否已经写入密码放在EEPROM的10H位
SAVE_S:	LCALL	STA
		MOV		A,		#0A0H
		LCALL	WBYTE
		LCALL	RACK
		MOV		A,		#10H
		LCALL	WBYTE
		LCALL	RACK
		MOV		A,		#01H
		LCALL	WBYTE
		LCALL	RACK
		LCALL	STOP
		RET

READ_S:	LCALL	STA								   ;读出在38H
		MOV		A,		#0A0H
		LCALL	WBYTE
		LCALL	RACK
		MOV		A,		#10H
		LCALL	WBYTE
		LCALL	RACK
		LCALL	STA
		MOV		A,		#0A1H
		LCALL	WBYTE
		LCALL	RACK
		MOV		R5,		#1
		MOV		R1,		#38H
		LCALL	RBYTE
		LCALL	SNACK
		LCALL	STOP
		RET


STA: 	CLR		P1.1
		SETB	P1.0     ;SDA=P1.0	 启动信号
        SETB	P1.2     ;SCL=P1.2
        LCALL WAITE
        CLR		P1.0    
        LCALL WAITE
        CLR		P1.2    
        RET

STOP:  	CLR		P1.2
		LCALL	WAITE
		CLR		P1.0 
		LCALL	WAITE    
        SETB	P1.2
        LCALL WAITE
       	SETB	P1.0 
		RET

WBYTE:  MOV 	R3,		#8
WBY24:  CLR 	P1.2     
        LCALL WAITE
        RLC   	A
        MOV  	P1.0,	C
        LCALL WAITE
        SETB 	P1.2
        LCALL WAITE
		CLR		P1.2
        DJNZ 	R3,		WBY24
       	RET

RBYTE:  MOV 	R3,		#8
RBY24:	CLR		P1.2
		LCALL WAITE
		SETB	P1.0
		LCALL WAITE
		SETB	P1.2
		LCALL WAITE
		MOV		C,		P1.0
		LCALL WAITE
		RLC		A
		CLR		P1.2
		LCALL WAITE
		DJNZ	R3,		RBY24
		LCALL	SACK
		MOV		@R1,	A
		INC		R1
		DJNZ	R5,		RBYTE
		RET

RACK:	CLR		P1.2
		LCALL WAITE
		SETB	P1.0
		LCALL WAITE
		SETB	P1.2
		LCALL WAITE
		MOV		C,		P1.0
		MOV		F0,		C
		CLR		P1.2
		RET

SACK:	CLR		P1.2
		LCALL WAITE
		CLR		P1.0
		LCALL WAITE
		SETB	P1.2
		LCALL WAITE	
		LCALL WAITE
		CLR		P1.2
		LCALL WAITE
		SETB	P1.0
		LCALL WAITE
		RET

SNACK:	CLR		P1.2
		LCALL WAITE	
		SETB	P1.0
		LCALL WAITE
		SETB	P1.2
		LCALL WAITE
		LCALL WAITE
		CLR		P1.2
		LCALL WAITE	
		RET


RNACK:	CLR		P1.2
		LCALL WAITE
		SETB  	P1.0
	  	SETB  	P1.2
	  	LCALL WAITE
	  	LCALL WAITE
	 	CLR	 	P1.2
	  	CLR	 	P1.0
	  	RET



WAITE:	NOP								;延时至少5uS
		NOP
		NOP
		NOP
		NOP
		RET
;////////EEPROM读写结束子程序

		
TABLE:	DB	   	0C0H,0F9H,0A4H,0B0H,99H		  ;0-9数码显示
		DB		92H,82H,0F8H,80H,90H	

		

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -