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

📄 电子密码锁程序20051230.asm

📁 电子锁由于其保密性高
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          DJNZ  R5,WARN
          NOP
          POP   ACC
          POP   PSW
          NOP
          RET
      BP:CLR   SPK            ;鸣笛子程序
         LCALL T100MSD
         SETB  SPK
         NOP
         RET
        ;***************************
        ;*****  显示子程序  ********
        ;***************************
        ;功能:分五屏幕显示数据,分别是XSA,XSB,XSC,XSD,XSE.代表六种状态。
        ;锁定状态显示。
     XSA:PUSH  ACC
         PUSH  PSW
         MOV  A,    TIMERS1
         MOV  DPTR, #TAB
         MOVC A,    @A+DPTR
         MOV  SBUF, A                    ;送已经输入密码的次数
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH               ;送短线
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH                ;送短线
         JNB  TI, $
         CLR  TI                         ;送F
         MOV  SBUF, #78H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #78H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;成功开锁状态显示
     XSB:PUSH ACC
         PUSH PSW
         MOV  A,    TIMERS1
         MOV  DPTR, #TAB
         MOVC A,    @A+DPTR
         MOV  SBUF, A
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;密码输入及修改状态
     XSC:PUSH ACC
         PUSH PSW
         LCALL KILLXS
         SETB RS1   ;切换到第三组寄存器。防止操作数读取错误。
         MOV  R6,  TIMERS
         MOV  A,   R6
         SUBB A,   #01H
         JNC  SC0
         JZ  SC1
     SC0:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC1:MOV  A,   R6
         SUBB A,   #02H
         JNC  SC11
         JNZ  SC2
    SC11:MOV  SBUF,#0FEH
         JNB  TI, $
         CLR  TI
     SC2:MOV  A,   R6
         SUBB A,   #03H
         JNC  SC22
         JNZ  SC3
    SC22:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC3:MOV  A,   R6
         SUBB A,   #04H
         JNC  SC33
         JNZ  SC4
    SC33:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC4:MOV  A,   R6
         SUBB A,   #05H
         JNC  SC44
         JNZ  SC5
    SC44:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC5:MOV  A,   R6
         SUBB A,   #06H
         JNC  SC55
         JNZ  SC6
    SC55:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC6:MOV  A,   R6
         SUBB A,   #07H
         JNC  SC66
         JNZ  EXIT_C
    SC66:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         NOP
         NOP
  EXIT_C:NOP
         CLR  RS1
         POP  PSW
         POP  ACC
         NOP
         RET

         ;密码输入错误的提示
     XSD:PUSH ACC
         PUSH PSW
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #38H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;锁定状态显示
     XSE:PUSH ACC
         PUSH PSW
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #54H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #3DH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
     XSF:PUSH ACC
         PUSH PSW
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #38H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #3DH  ;U
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
  KILLXS:PUSH ACC
         PUSH PSW
         MOV  R7,   #06H
 LOOP_XS:MOV  SBUF, #0FFH
         JNB  TI, $
         CLR  TI
         DJNZ R7,LOOP_XS
         NOP
         POP  PSW
         POP  ACC
         RET
        TAB: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H ,0FFH
;****************************************************************
;*******               24C02读写程序                      ×××××××
;****************************************************************
 AT_RADE:PUSH  PSW
         PUSH  ACC
         MOV   R0,#AT1    ;CPU首地址
         MOV   R6,#06H    ;8字节
         MOV   R5,#08H    ;8位
     	   MOV   R7,#00H    ;24C02首地址
       	 LCALL READ     ;读数据
         NOP
         NOP
         POP   ACC
         POP   PSW
         RET

  AT_WR:
       PUSH  PSW
       PUSH  ACC
       MOV R0,#PS1    ;CPU RAM首地址
       MOV R6,#06H    ;8字节
       MOV R5,#08H    ;8 BIT
       MOV R7,#00H    ;24C02 RAM 首地址
       LCALL WRT      ;先写进
       NOP
       NOP
       POP  ACC
       POP  PSW
       RET

;---------------------
;读串行器件 R0:RAM的起始地址,R5:位计数器,
;R6:读的字节数,R7:读的起始地址
READ:	NOP
	NOP
  LCALL	START0
	MOV	A,#0A0H
	LCALL	WRB
	LCALL	ACK
	JB	F0,RD_FAIL
	MOV	A,R7
	LCALL	WRB
	LCALL	CHK
	JB	F0,RD_FAIL
	LCALL	START0
	MOV	A,#0A1H
	LCALL	WRB
	LCALL	CHK
	JB	F0,RD_FAIL
RD_N:	NOP
	NOP
	LCALL	RDB
	MOV	@R0,A
	DJNZ	R6,GO_ACK
	LCALL	N_ACK
	RD_FAIL:NOP
	LCALL	STOP
	MOV	A,#0FFH
	RET;*************read
GO_ACK:	NOP
	NOP
	DEC	R0
	LCALL	ACK
	JMP	RD_N
;写串行器件 R0:RAM的起始地址,R5:位计数器,
;R6:写的字节数(页),R7:写的起始地址
WRT:	NOP
	NOP
	LCALL	START0
	MOV	A,#0A0H
	LCALL	WRBYT
	LCALL	CHK
	JB	F0,WR_FAIL
	MOV	A,R7
	LCALL	WRBYT
	LCALL	CHK
	JB	F0,WR_FAIL
WR_N:	NOP
	NOP
	MOV	A,@R0
	LCALL	WRBYT
	LCALL	CHK
	JB	F0,WR_FAIL
	DEC	R0
	DJNZ	R6,WR_N
WR_FAIL:NOP
	LCALL	STOP
	MOV	A,#0FFH
	RET;*********wrt
;--------------------
START0:	NOP
	NOP
	SETB	SDA
	SETB	SCL
	NOP
	NOP
	CLR	SDA
	NOP
	NOP
	CLR	SCL
	NOP
	RET
;-------------------
STOP:	NOP
	NOP
	CLR	SDA
	SETB	SCL
	NOP
	NOP
	SETB	SDA
	NOP
	NOP
	CLR	SCL
	NOP
	RET
;--------------------
ACK:	NOP
	NOP
	CLR	SDA
	SETB	SCL
	NOP
	NOP
	CLR	SCL
	SETB	SDA
	NOP
	RET
;--------------------
N_ACK:	NOP
	NOP
	SETB	SDA
	SETB	SCL
	NOP
	NOP
	CLR	SCL
	CLR	SDA
	NOP
	RET
;--------------------
CHK:	NOP
	NOP
	SETB	SDA
	NOP
	NOP
	SETB	SCL
	NOP
	NOP
	MOV	C,SDA
	MOV	F0,C
	CLR	SCL
	NOP
	NOP
	RET
;---------------------
RDB:	NOP
	NOP
	SETB	SDA
	MOV	R5,#8
RD_B:	NOP
	NOP
	CLR	SCL
	NOP
	NOP
	SETB	SCL
	NOP
	NOP
	MOV	C,SDA
	RLC	A
	NOP
	NOP
	SETB	SDA
	CLR	SCL
	DJNZ	R5,RD_B
	NOP
	RET
;一字节数据发送子程序
WRBYT:  MOV 	R5,#8
WLP: 	RLC 	A
 	JC 	WR1
 	CLR	SDA
 	SETB	SCL
	NOP
 	NOP
 	CLR	SCL
 	DJNZ	R5,WLP
 	RET
 	WR1:	SETB SDA
 	SETB	SCL
        NOP
 	NOP
 	CLR	SCL
 	CLR	SDA
 	DJNZ	R5,WLP
 	RET
;--------------------
WRB:	NOP
	NOP
	MOV	R5,#8
WR_B:	NOP
	NOP
	SETB	SDA
	RLC	A
	JC	WR_1
	CLR	SDA
	NOP
WR_1:	SETB	SCL
	NOP
	NOP
	CLR	SCL
	NOP
	CLR	SDA
	NOP
	DJNZ	R5,WR_B
	NOP
	RET
;***********************************************************************************************
;*************               毫秒延时程序           ********************************************
;***********************************************************************************************
  T10MSD:SETB   RS0
         MOV    R4, #12
      TM:MOV    R3, #128
     TM6:DJNZ   R3, TM6
         DJNZ   R4, TM
         CLR    RS0
         RET


 T100MSD:MOV     R3,   #200
     D11:MOV     R4,   #125
     D12:DJNZ    R4,   D12
         DJNZ    R3,   D11
         RET
         
 T500MSD:LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         NOP
         RET

     SEC:SETB   RS1
         MOV    R7,    #0AH
  SEC_LP:LCALL  T100MSD
         DJNZ   R7,SEC_LP
         NOP
         CLR    RS1
         RET
         END

⌨️ 快捷键说明

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