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

📄 带02的密码验证修改.asm

📁 用BC7281键盘辛片,通过12864显示,有键盘操作,主要是密码校对,提示
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		        LCALL  WRI
 		        LCALL  DELAY10
		    	CLR  18H          ;指示光标闪烁
       
		        LCALL  CODEDIP
		        LCALL  CODEBIT
                        LCALL DELAY10
	            
		       RET
;***
    CODEDIP:
                       	LCALL  DELAY10
		        MOV  COM,#01H	  ;清除屏幕显示
		        LCALL  WRI
 			LCALL  DELAY10

			MOV  COM,#91H     ;从第2行开始显示
			LCALL  WRI
			MOV  DATT,#0C7H   ;显示"请"
			LCALL  WRD
			MOV  DATT,#0EBH
			LCALL  WRD

			MOV  COM,#92H
			LCALL  WRI
			MOV  DATT,#0CAH   ;显示"输"
			LCALL  WRD
			MOV  DATT,#0E4H
			LCALL  WRD

			MOV  COM,#93H
			LCALL  WRI
			MOV  DATT,#0C8H   ;显示"入"
			LCALL  WRD
			MOV  DATT,#0EBH
			LCALL  WRD 

			MOV  COM,#94H     
			LCALL  WRI
			MOV  DATT,#0C3H   ;显示"密"
			LCALL  WRD
			MOV  DATT,#0DCH
			LCALL  WRD

			MOV  COM,#95H
			LCALL  WRI
			MOV  DATT,#0C2H  ;显示"码"
			LCALL  WRD
			MOV  DATT,#0EBH
			LCALL  WRD 

               ;         MOV 70H,#2AH
                ;        MOV 71H,#2AH
               ;         MOV 72H,#2AH
               ;         MOV 73H,#2AH
               ;         MOV 74H,#2AH
               ;         MOV 75H,#2AH
               ;         MOV 70H,#2AH
 
            LCALL   CODEIN   ;将密码部分读出,但不显示,显示"******"

		        RET 

;************************************************************************************
     CODEIN:  
			MOV  COM,#89H     ;从第3行开始显示,显示6个 ******
			LCALL  WRI
			MOV  DATT,#20H    ;显示"*"
			LCALL  WRD
		;	MOV  DATT,70H     ;70H---75H,可以显示输入的数字,或者显示"*",有光标移动指示
                        MOV  DATT,#2AH
			LCALL  WRD

			MOV  COM,#8AH
			LCALL  WRI
			MOV  DATT,#20H    ;显示"*"
			LCALL  WRD
		;	MOV  DATT,71H
                        MOV  DATT,#2AH
			LCALL  WRD 

			MOV  COM,#8BH     
			LCALL  WRI
			MOV  DATT,#20H    ;显示"*"
			LCALL  WRD
		;	MOV  DATT,72H
                        MOV  DATT,#2AH
			LCALL  WRD

			MOV  COM,#8CH
			LCALL  WRI
			MOV  DATT,#20H   ;显示"*"
			LCALL  WRD
		;	MOV  DATT,73H
                        MOV  DATT,#2AH
			LCALL  WRD 

 			MOV  COM,#8DH     
			LCALL  WRI
			MOV  DATT,#20H    ;显示"*"
			LCALL  WRD
		;	MOV  DATT,74H
                        MOV  DATT,#2AH
			LCALL  WRD

			MOV  COM,#8EH
			LCALL  WRI
			MOV  DATT,#20H   ;显示"*"
			LCALL  WRD
		;	MOV  DATT,75H
                        MOV  DATT,#2AH
			LCALL  WRD  
			 
	        RET
;*************************************************************************

              ;密码输入光标闪烁子程序,输入一个数字,光标移动一位,并在该位闪烁
		      ;处理光标在此位置闪烁子程序,在调整数据时应该加入闪烁,才可知道调整项目
		      ;增加的项目由此闪烁指示

CODEBIT:	JB  18H,NBIT2
			MOV  COM,#0DH      ;由89H地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#89H
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7

   NBIT2:   JB  19H,NBIT3
			MOV  COM,#0DH      ;由8AH地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#8AH 
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7
	     
	 NBIT3: JB  1AH,NBIT4
			MOV  COM,#0DH      ;由8BH地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#8BH 
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7

	 NBIT4: JB  1BH,NBIT5
			MOV  COM,#0DH      ;由8CH地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#8CH 
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7  

	 NBIT5: JB  1CH,NBIT6
			MOV  COM,#0DH      ;由8DH地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#8DH 
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7 

	 NBIT6: JB  1DH,NBIT7
			MOV  COM,#0DH      ;由8EH地址开始显示
			LCALL  WRI         ;实质上是让光标在此位置闪烁
 			MOV  COM,#8EH 
			LCALL  WRI
			MOV  COM,#0DH
			LCALL  WRI
			LJMP  EXBIT7 
			
	 NBIT7: CLR  30H           ;指示密码数据输入完毕,等待"确认键"
			 
	EXBIT7: RET

;*************************************
WRIDAT:
    
       MOV R6,#00H ;写入字节地址的设置

       LCALL XXX   ;写入第一页(8个字节的数据,24C01/02一次最多只能写 8 个字节!!!)

       LCALL DELAY ;调用大概 1mS 延时,此延时程序非常必要!!!
       LCALL DELAY
       LCALL DELAY
       LCALL DELAY
RET


;--------------------------------写入数据//
 XXX:
       
        LCALL START_IC  ;发开始信号

        MOV A,#0A0H  ;写入器件地址设置为 A0H
        LCALL WR_BYTE

        MOV A,R6  ;写入字节地址
        LCALL WR_BYTE

        LCALL WRITE_BYTE    ;写入第一页的数据

        LCALL STOP_IC
        RET

;*******************
 WRITE_BYTE:       ;字节写入模式写数据(WRITE_BYTE)
              MOV A,50H
              LCALL WR_BYTE  ;写入数据
	      MOV A,51H
              LCALL WR_BYTE  ;写入数据
	      MOV A,52H
              LCALL WR_BYTE  ;写入数据
	      MOV A,53H
              LCALL WR_BYTE  ;写入数据
	      MOV A,54H
              LCALL WR_BYTE  ;写入数据
	      MOV A,55H
              LCALL WR_BYTE  ;写入数据
      RET
 ;----------------------------------------------------------------------

     READAT:
       MOV R1,#00H  ;THE FIRST BYTE'S ADDRESS
       LCALL DDD
       LCALL DELAY
       LCALL DELAY
       MOV 56H,80H

        INC R1      ;THE SECOND BYTE'S ADDRESS
        LCALL DDD
        LCALL DELAY
         LCALL DELAY
        MOV 57H,80H

        INC R1     
        LCALL DDD
        LCALL DELAY
        LCALL DELAY
        MOV 58H,80H

        INC R1      
        LCALL DDD
        LCALL DELAY
        LCALL DELAY
        MOV 59H,80H

      INC R1      
        LCALL DDD
        LCALL DELAY
        LCALL DELAY
        MOV 5AH,80H


         INC R1     
        LCALL DDD
        LCALL DELAY
        LCALL DELAY
        MOV 5BH,80H

RET
;--------------------------------读取一个数据//2005.06.27// OK!!!
          DDD:

           MOV A,#00H
    
            PUSH ACC  ;保存A中的数据
            LCALL START_IC  ;发开始信号

           MOV A,#0A0H  ;写入器件地址,表示选中该器件
           LCALL WR_BYTE
           
           MOV A,R1 ;写入字节地址---------------地址设置!!!!!!!
              LCALL WR_BYTE
           POP ACC  ;恢复A中数据

           LCALL START_IC

            MOV A,#0A1H    ;*****读器件时地址必须设置为 A1H !!!!!
              LCALL WR_BYTE

              LCALL RD_BYTE  ;读出第一个字节
              MOV 80H,A
              NOP
              NOP

               LCALL STOP_IC
                 RET

;*******************************************************************************
;*********************************以下为各功能子程序****************************
;*******************************************************************************

;-------------------------------------------------------------------
;-----------------------------开始条件------------------------------
START_IC:

CLR SCL ; SCL低电平时才允许SDA更改
NOP  ;加入空指令延时以确保信号可靠
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
NOP
RET

;----------------------------------------------------------------------------------
;-------------------写一字节数据到EEPROM,程序中已包含应答子程序!!!-----------------
;----------------------------------------------------------------------------------
 WR_BYTE:
                             MOV R5,#08  ;一字节8位数据
                             CLR SCL

                             NOP
                             NOP
                             WR_BYTE1:RLC A  ;带进位位左移,A.8->C
                             MOV SDA,C   ; SCL低电平时改变SDA上的数据
                             NOP
                             SETB SCL  ;拉高SCL把数据发送出去
                              NOP
                              NOP
                             CLR SCL
                             NOP
                             NOP
                              DJNZ R5,WR_BYTE1;  依次发送A中的8位数据
                             SETB SDA
                             SETB SCL
                             JB SDA,$ ;  等待IC卡确认信号
                             CLR SCL
                             NOP
                             nop
                             RET

;---------------------------------------------------------------------------
;--------------------------从EEPROM读一字节(RD_BYTE)//2005.06.27 ---------
;---------------------------------------------------------------------------
RD_BYTE:

MOV R5,#08
SETB SDA;设备SDA为读状态
CLR A;清空A寄存器
RD_BYTE1:
MOV C,SDA;读一位数据到进位位
RLC A;左移数据到A.0
SETB SCL
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R5,RD_BYTE1;依次读出8位数据到A中
RET;无应答信号

;利用该程序可将读出的数据存放在A中。需要注意的是:读数据的器件不是通过确认状态来应答的,
;而是随后产生一个停止状态。


;-----------------------------------------------------------------------
;------------------------------------停止条件
           STOP_IC:

                           CLR SCL
                           NOP
                           NOP

                           CLR SDA
                           NOP
                           NOP
                           SETB SCL
                           NOP
                           NOP
                           SETB SDA
                           NOP
                           NOP
                           CLR SCL
                           NOP
                           NOP
                           CLR SDA

                          RET


;-------------------------------------------------------------------------

DELAY: MOV R4,#2;延时程序,延时1000微秒= 1mS  FOSC=6MHz
DD3:MOV R5,#124
   DJNZ R5,$
   DJNZ R4,DD3
   RET

DELAY1: MOV R4,#10H     ;一秒延迟子程序
DELAY11:MOV R5,#255
DELAY41:MOV R6,#0FFH
        DJNZ R6,$
        DJNZ R5,DELAY41
        DJNZ R4,DELAY11
        RET


;*******************************************
;*******************************************
     DATAMA:          NOP               ;数字键存储在5DH,每一次按键均从5DH中读出  
 		      MOV A,5DH         ;5DH存储BCD,临时存储第一次按键键值         
		      ORL  A,#30H
		      MOV 5EH, A        ;5EH--ASC,只是单一数字,为送显示做准备工作 
                      NOP

                    JNB 00H,DAMA1       ;密码输入模式        
                    JNB 01H,DAMA4       ;密码修改模式
                    JNB 02H,DAMA3          ;时间修改模式
                    LJMP DAMA2

            DAMA1 :   LCALL KEYCODE      ;密码输入模式
                      LJMP DAMA2
            DAMA3 :   LCALL TIMECH        ;时间修改模式
                      LJMP DAMA2
            DAMA4 :   LCALL keyx        ;密码修改模式
            DAMA2 : 
                             RET               ;由模式键切换数据状态模式
;**********************************************************
; 修改密码部分
;*****************************************************

 keyx:               
		        JB  78H,CHACODE2
		    	MOV 71H,5EH
                        MOV 56H,5DH
		    	SETB  78H
	    		CLR   79H
                        LCALL  CODEINX       ;显示新输入的密码
		    	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX
		        
       CHACODE2:        JB  79H,CHACODE3
		     	MOV 72H,5EH
                        MOV 57H,5DH
		    	SETB  79H
		    	CLR   7AH
                        LCALL  CODEINX       ;显示新输入的密码
		    	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX

      CHACODE3:         JB  7AH,CHACODE4
			MOV 73H,5EH
		     	MOV 58H,5DH
                        SETB  7AH
		    	CLR   7BH
                        LCALL  CODEINX       ;显示新输入的密码
		    	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX
      CHACODE4:         JB  7BH,CHACODE5
			MOV 74H,5EH
                        MOV 59H,5DH
			SETB 7BH
		     	CLR   7CH
                        LCALL  CODEINX       ;显示新输入的密码
	           	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX
  
        CHACODE5:       JB  7CH,CHACODE6
		     	MOV 75H,5EH
                        MOV 5AH,5DH
			SETB  7CH
	 		CLR   7DH
                        LCALL  CODEINX       ;显示新输入的密码
		    	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX

        CHACODE6:       JB  7DH,CHACODE7
			MOV 76H,5EH
                        MOV 5BH,5DH
			SETB  7DH
			CLR   31H
                        LCALL  CODEINX       ;显示新输入的密码
		    	LCALL  CODEBITX;键入的数字键已经处理完毕 
             	        LJMP  EXKYCDX

⌨️ 快捷键说明

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