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

📄 key lock (1).asm

📁 Proteus在MCS-51%26ARM7系统中的应用百例 Proteus在MCS-51%26ARM7系统中的应用百例
💻 ASM
字号:
;R3——输入错误次数
;R4——密码个数
;R7——输入密码暂存
;R2——键值暂存
;R6——延时参数
		ORG		00H
		SJMP	START
		ORG		0BH
START:	
                                	;设置初始密码
PASSWORD:
		MOV		R4,#08H				;密码个数8个
		MOV		R0,#40H				;密码暂存区
		MOV		A,#00H				;初始密码0,1,2,3,4,5,6,7
PASSNEXT:
		MOV		@R0,A
		INC		R0
		INC		A
		DJNZ	R4,PASSNEXT
MLOOP:
		CLR		P3.0				;锁合
		SETB	P3.1				;锁开
		SETB	P3.2				;键有效
		SETB	P3.3				;错误
		SETB	P3.4				;报警
		MOV		R3,#03H				;错误次数3次
	                           		;输入密码
GETPW:	MOV		R4,#08H				;密码个数
		MOV		R0,#30H				;输入密码暂存区
AGAIN:	ACALL	KEY					;输入密码
		CJNE	A,#0AH,CONTIUE	  	;按确认键无效
		SJMP	AGAIN
CONTIUE:
		MOV		@R0,A
		ACALL	DISPLED				;按键有效显示
		INC	R0
		DJNZ	R4,AGAIN
AGAIN1:	ACALL	KEY					;按确认键
		CJNE	A,#0AH,AGAIN1
		ACALL	DISPLED			 	;按确认键有效显示
		ACALL	COMP				;比较密码
		SETB	P3.0				;息锁合
		CLR		P3.1				;开锁
WAIT:	MOV		C,P3.5				;是否重新上锁
		JNC		MLOOP				;主循环
		ACALL	TestKey				;是否有键按下,是否修改密码
		JZ		WAIT				;累加器的内容为0,则转移;否则执行下一条指令
		ACALL	CHPSW				;修改密码子程序
		SJMP	WAIT
COMP:	MOV		R4,#08H
		MOV		R0,#30H
AGAI:	MOV		50H,@R0				;取输入密码到50H
		MOV		A,R0
		ADD		A,#010H				;40H
		MOV		R0,A
		MOV		A,@R0				;取密码
		MOV		B,A
		MOV		A,R0
		SUBB	A,#010H				;30H
		MOV		R0,A
		MOV		A,B
		CJNE	A,50H,ONCEMORE	   	;比较
		INC		R0
		DJNZ	R4,AGAI
		RET							;正确返回
ONCEMORE:
		CLR		P3.3				;输入错误
		MOV		R6,#0FFH
		ACALL	DELAY
		MOV		R6,#0FFH
		ACALL	DELAY
		SETB	P3.3
		DJNZ	R3,GETPW			;3次错误输入
		CLR		P3.4				;声报警
		CLR		P3.3				;光报警
W:		SJMP	W
		                         	;修改密码子程序
CHPSW:	MOV		R4,#07H
		MOV		R0,#48H
		ACALL	KEY
		CJNE	A,#0AH,CONTIUE2	  	;按确认键无效
		LJMP	WAIT				;返回
CONTIUE2:
		MOV		@R0,A
		INC		R0
		ACALL	DISPLED				;按键有效显示
ANOTHER:
		ACALL	KEY
		CJNE	A,#0AH,CONTIUE3	 	;按确认键无效
		SJMP	ANOTHER
CONTIUE3:
		MOV		@R0,A
		INC		R0
		ACALL	DISPLED				;按键有效显示
		DJNZ	R4,ANOTHER
AGAIN2:	ACALL	KEY					;按确认键
		CJNE	A,#0AH,AGAIN2
		ACALL	DISPLED				;按确认键有效显示
		MOV		R4,#08H
		MOV		R0,#40H
		MOV		R1,#48H
CHANGE:								;确认后修改密码
		MOV		A,@R1
		MOV		@R0,A
		INC		R0
		INC		R1
		DJNZ	R4,CHANGE
		RET
			                       	;按键有效显示
DISPLED:
		CLR		P3.2				;按键有效显示
		MOV		R6,#80H
		ACALL	DELAY
		SETB	P3.2
		RET
TestKey:MOV		P1,#0FH
		MOV		A,P1				;读入键状态
		CPL		A					;累加器取
		ANL		A,#0F0H
		RET
		                          	;取键值子程序,阵列式键盘
KEY:	MOV		P1,#0F0H
		MOV		A,P1
		CJNE	A,#0F0H,K11
K10:	AJMP	KEY
K11:	MOV		R6,#02H
		ACALL	DELAY
		MOV		P1,#0F0H
		MOV		A,P1
		CJNE	A,0F0H,K12
		SJMP	K10
K12:	MOV		B,A
		MOV		P1,#0FH
		MOV		A,P1
		CJNE	A,#0FH,K122
K121:	AJMP	KEY
K122:	MOV		R6,#02H
		ACALL	DELAY
		MOV		P1,#0FH
		MOV		A,P1
		CJNE	A,0FH,K13
		AJMP	K10
K13:	
		ANL		A,B
		MOV		B,A
		MOV		R1,#11
		MOV		R2,#0
		MOV		DPTR,#K1TAB
K14:	MOV		A,R2
		MOVC	A,@A+DPTR
		CJNE	A,B,K16
		MOV		P1,#0FH
K15:	MOV		A,P1
		CJNE	A,#0FH,K15
		MOV		R6,#02H
		ACALL	DELAY
		MOV		A,R2
		RET
K16:	INC		R2
		DJNZ	R1,K14
		AJMP	K10
			            			;键码表
K1TAB:	DB		81H,41H,21H,11H
		DB		82H,42H,22H,12H
		DB		84H,44H,24H
		                        	;延时子程序
DELAY:	MOV		R6,#80H
AA1:	MOV		R5,#0F8H
AA:		NOP
		NOP
		DJNZ	R5,AA
		DJNZ	R6,AA1
		RET
		END

⌨️ 快捷键说明

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