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

📄 password .asm

📁 密码锁 1. 出厂的统一密码为个人码″12345678″
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;*******************************************************
;@************    Filename : CLOCK.ASM  ***************
;@******************  OSC:1MHz    *********************
;@******************    HT48RA0-2      ****************
;;********************************************************
;*********************************************************
;I/O Structure:
;PB1 -- SCL
;PB0 -- SDA
;;4 scan line for output PA3~PA6
;;3 data line for input PB2~PB4
;;key matrix=3x4 12keys
;;PB5 is for "#"  input
;;SYSTEM VOLT = 3V
;;WDT DISABLE
;;PB0~PB4 NO WAKEUP ,PB5 WAKEUP
;*************************************************************

 # include	ht48ra0-2.inc

;=====================================
;Define area
debounce_num	equ		16
scl				equ		pb.1		;serial clock data input
sda				equ		pb.0		;Serial data I/O
read_out		equ		[3ch]			;write register
write_in		equ		[3dh]			;Read register
word_address	equ		[3eh]		
data_8			equ		[3fh]
;---------------------------

;---------------------------
;Define Macro
;Delay Macro,delay 100us
d_1		macro
	local	label
	mov		a,64h
	mov		delay,a
label:
	sdz		delay
	jmp		label
endm
;*************************************************************
SAMPLE  .SECTION        'DATA'

;; --- Temp RAM ---
        a_sr10          db     ?   			   ;;WORK Temp Register
        a_sr11          db     ?      ;;
	temp_num        db     ? 

;;------CODE   RAM---------

	array_data	      db	8 dup (?) 	   ;;8 byte password

;;--------- Program RAM --------
        column     	db      ?      ;;Scan Key column Step Number
        key_code0      	db      ?      ;;Save Previous Key Number
        key_code       	db      ?      ;;Scan Key Number
        col_value       db      ?      ;;Read on column value to a_COL_VALUE
        kd_temp         db      ?      ;;Key Debounce Check Times
        nkd_temp        db      ?      ;;Key Release Confirm Times
	Key_data	db	?      ;;PA temp register
	Key_data1		   db		?
	delay			   db		?
	delay0			   db		?
	delay1			   db		?
	t_count			   db		?
	t_count1		   db		?
	release_num		   db		?		;;count release key 

;;--- User FLAG define ---
        fg_SendActive   	dbit          ;;VALIDITY KEY Flag
        fg_PressRec     	dbit          ;;Check Column Multi_Key Flag
        fg_repeat       	dbit          ;;REPEAT KEY Flag
        fg_Multi_Key    	dbit          ;;INVALID KEY Flag
	release_flg		dbit	      ;;release flag
	flg_chang_key		dbit
	flg_chang_personal	dbit
	flg_chang_manage	dbit
	flg_chang		dbit
;*************************************************************

code    .section        at 0 'code'


                org     00h
START:
		set		pa
		mov		a, 20H
		mov		mp0, a
		mov		a, 50H		
CLR_RAM:		
		clr		r0
		inc		mp0
		sdz		acc
		jmp		clr_ram

		mov		a,070h
		mov		t_count,a
		mov		a,050h
		mov		t_count1,a
		mov		a,07fh
		mov		release_num,a

ini_clock:
		mov		a, offset personal_clock		
                mov     	tblp,a
		mov		a,00h						;write 00H to eeprom address,it is personal password 
		mov		word_address,a
ini_personal_clock:	
		tabrdl	write_in
		call	ht24_write
		inc		TBLP
		inc		word_address
		mov		a,offset personal_clock+8
		xor		a,TBLP
		sz		acc
		jmp		ini_personal_clock

		mov		a, offset manage_clock		
       mov     tblp,a	
		mov		a,010h						;write 10H to eeprom address,it is administration password 
		mov		word_address,a
ini_manage_clock:
		tabrdl	write_in
		call		ht24_write
		inc		TBLP
		inc		word_address
		mov		a,offset manage_clock+8
		xor		a,TBLP
		sz		acc
		jmp		ini_manage_clock

		clr		pa.1
		clr		pa.2		
		mov		a, offset array_data
		mov		mp0, a


;@*********** Polling System Event ***********
MAIN_PROC:
       call 	scan_key_proc         ;SCAN KEY PROCEDURE
		mov		a,0bh					;* key
		xor		a,key_code
		sz		acc	
		jmp		$+2
		jmp		release_proc

		sz  	fg_repeat
		jmp		sleep

        sz      fg_Multi_Key          ;Check Invalid Key
        jmp     main_proc       	  ;			

		mov		a,0ch				  ;red key
		xor		a,key_code
		sz		acc
		jmp		$+4
		set		flg_chang_key
		set		flg_chang_personal
		jmp		main_proc
		
		mov		a,0ah					;"0" key
		xor		a,key_code
		sz  	acc	
		jmp		$+4
		clr		flg_chang_personal	
		set		flg_chang_manage
		jmp		main_proc
		
       sz		key_code             				 ;Check NO Key Press	
		jmp		judge
		jmp		sleep	


judge:
		set		pa.1
		call		delay30ms
		clr		pa.1
		
		mov		a,070h
		mov		t_count,a
		mov		a,050h
		mov		t_count1,a

		sz		release_flg
		jmp		release_proc					;;deal with “*” key
		sz		flg_chang_key
		jmp		manage_code					;;input mange password
		sz		flg_chang_manage
		jmp		chang_manage_proc				;;change mange password
		sz		flg_chang_personal
		jmp		chang_personal_proc				;;change personal password
                jmp     personal_code    						;;input personal password

SLEEP:
		sz		pa.0
		jmp		$+2
		jmp		low_voltage				;;deal with low_voltage

		sdz		t_count1				;\
                jmp		main_proc				; \
		sdz		t_count					; /if no key code wait 25s
                jmp   		  $-3				        ;/
		
		sz 		PB.5		
       		 halt                        ;System Halt
		clr		release_flg
		clr		flg_chang_key
		clr		flg_chang_manage
		clr		flg_chang_personal
		mov		a,070h
		mov		t_count,a
		mov		a,050h
		mov		t_count1,a
      		jmp       main_proc         	;Any Key WakeUp
;@************* SUBROUTINE[xx]: Scan 12 Key Matrix (3x4) ************

SCAN_KEY_PROC:
  ;;--- READ KEY PROCEDURE ---
       ;;Initiate Process
        clr     key_code          ;
        clr     fg_PressRec       ;
        clr     column           ;
        clr     fg_Multi_Key      ;

		mov		a,0f9h
		mov		pa,a
		mov		a,0fdh
		mov		key_data,a
		mov		a,0ch
		mov		key_data1,a
  NEXT_COLUMN:
		mov		a,key_data1	
		xor			a,key_data
		 rl			key_data1
        mov     key_data,a
        mov     pa,a          ;Scan Column PA PORT OUTPUT
       nop     
		nop                   ;
  ;;--- READ PB PORT  ---
        mov     a,pb          ;;Read on column value to a_COL_VALUE
        mov     col_value,a     ;;
        mov     a,1
        mov     a_sr11,a
        mov     a,11111011b       ;;
        mov     a_sr10,a			;; This column value to ACC
        snz     col_value.4
        jmp     key_row_4
        snz     col_value.3
        jmp     key_row_3
        snz     col_value.2
        jmp    key_row_2
        jmp		$+1
        nop
        jmp     col_without_key
      key_row_4:
        rl      a_sr10        ;; a_SR10 rotate to "11101111b"
        inc     a_sr11
      key_row_3:
        rl      a_sr10        ;; a_SR10 rotate to "11110111b"
        inc     a_sr11
      key_row_2:
	mov		a,01ch
	andm 	a,a_sr10 
	and		a, col_value

        xor     A,a_sr10      ;;Check ROW Multi-Key
        sz     z
        jmp     col_with_key
    col_error_key:
        set     fg_Multi_Key

    col_without_key:
        jmp		$+1
        jmp		$+1
        jmp		$+1
        jmp     ready_2_next_column
    col_with_key:               ;;KEY NUMBER PROCESS
		mov		a,2				;;\
		mov		temp_num,a		        ;; \
		mov		a,column  		        ;;  \
		add		   a, column		        ;;   /column  * 3 --> ACC
	   ;mov		column,a		                ;;  /
		sdz		   temp_num		        ;; /
		jmp		   $-2				;;/
       add     a,a_sr11        ;;
       mov     key_code,a      ;;
       sz      fg_PressRec     ;;Check Column Multi-Key
       set     fg_Multi_Key    ;;
       set     fg_PressRec     ;;
  ready_2_next_column:
        inc     column
        mov     A, column
        xor     a,4
        snz     z
        jmp     next_column
        nop
  READ_KEY_COMPLETE:

;@************* SUBROUTINE[xx]: Check Key Active ************
;@--- Scan Key Complete, Check key valid ? ---
CHECK_KEY_ACTIVE:
        sz      key_code       ;;If a_KEY_NUM = ffh, invalid key
        jmp     valid_key_chk
        jmp     invalid_key_chk
  ;@--------------------------
  VALID_KEY_CHK:
        sz      key_code0      					;;Check New Key
        jmp     valid_keyc_pro
        jmp     key_deb

  VALID_KEYC_PRO:
        mov     A, key_code
        xor     A, key_code0    					;; Check Repeat key
        snz     z
        jmp     valid_key
    ;;----------------------------
    VALID_RPSEND_KEY:
        snz     fg_Multi_key    				;Check Multi-Key Clear KEY_CODE
        jmp     repeat_key
        clr     key_code
        ret

   REPEAT_KEY:
        set     fg_REPEAT      				 	;;SET Repeat Flag
        jmp		$+1
        jmp     set_validfg

    valid_key:
        mov     a, key_code0    					;;Check Change Key
        xor     a,0ffh          				;;Check Debounce END
        snz     z
        jmp     chang_key

    ;;--- NEW KEY Initiate
        clr     fg_REPEAT
        mov     a, key_code
        mov     key_code0,a

    ;;--- SET VALIDITY KEY
    SET_VALIDFG:
        set     fg_SendActive
        ret

    CHANG_KEY:
        clr     kd_temp
        jmp     rkey_pro

  ;@----------------------------
  INVALID_KEY_CHK:
        clr     kd_temp

   RKEY_PRO:                           		 	   ;Release Key Confirm
        inc     nkd_temp
        mov     a, nkd_temp
        xor     a,13
        snz     z
        jmp     scan_key_proc
        dec     nkd_temp                

    NO_KEY_PROC:
        clr     fg_SendActive
        jmp		$+1
        jmp		$+1
        nop
    EXIT_INVALID_KEY:
        mov     a, key_code      				 ;Clear KEY_CODE0
        mov     key_code0,a
        jmp		$+1
        ret

    KEY_DEB:                          
                                       			;Check Key Debounce
        inc     kd_temp
        mov     A, kd_temp
        xor     a,debounce_num
        snz     z
        jmp     scan_key_proc

        mov     a,0ffh                  	;SAVE KEY Debounce Check END
        mov     key_code0,A             		;0FFH to KEY_CODE0
        jmp     scan_key_proc

;****************read personal clock******************	
personal_code:
		mov		a,key_code
		mov		r0,	a
		inc		mp0
		rl		release_num
		mov		a,mp0
		and		a,7fh
		xor		a,offset array_data+8
		sz		acc								;;input 8 bit personal password
		jmp		main_proc			
read_code1:
		mov		a,07fh
		mov		release_num,a
		mov		a, 8
		mov		temp_num, a
		mov		a,0
		mov		word_address, a
		mov		a, offset array_data
		mov		mp0, a			
  read_n1:								
  		call	ht24_read		
		mov		a, r0
		xor		a, read_out						;;compare 8 bit personal password
		sz		acc
		jmp		fail_out						;;error password
		inc		mp0
		inc		word_address
		sdz		temp_num
		jmp		read_n1
		jmp		ok_end							;;right password
;--------------------
chang_personal_proc:
		mov		a,key_code
		mov		r0,	a
		inc		mp0
		rl		release_num
		mov		a,mp0
		and		a,7fh
		xor		a,offset array_data+8
		sz		acc								;;input 8 bit manage password
		jmp		main_proc		

		mov		a,07fh
		mov		release_num,a
		mov		a, 8
		mov		temp_num, a
		mov		a,0
		mov		word_address, a
		mov		a, offset array_data
		mov		mp0, a
personal_1:	
		mov		a,r0
		mov 	write_in,a
		call	ht24_write						;;input 8 bit to ht24
		inc		mp0
		inc		word_address
		sdz		temp_num
		jmp		personal_1
		clr		flg_chang_key
		clr		flg_chang_personal
		call	chang_end
		mov		a, offset array_data
		mov		mp0, a
		jmp		main_proc
;---------read manage clock----------------
manage_code:	
		mov		a,key_code
		mov		r0,	a
		inc		mp0
		rl		release_num
		mov		a,mp0
		and		a,7fh
		xor		a,offset array_data+8
		sz		acc
		jmp		main_proc			
read_code2:
		mov		a,07fh
		mov		release_num,a
		mov		a, 8
		mov		temp_num, a
		mov		a,010h
		mov		word_address, a
		mov		a, offset array_data
		mov		mp0, a
  read_n2:					
  		call	ht24_read
		mov		a, r0
		xor		a, read_out
		sz		acc
		jmp		fail_out
		inc		mp0
		inc		word_address
		sdz		temp_num
		jmp		read_n2
		clr		flg_chang_key
		call	chang_proc
		mov		a, offset array_data
		mov		mp0, a
		jmp		main_proc

;---------------------------------------------
chang_manage_proc:
		;call  	chang_proc
		mov		a,key_code
		mov		r0,	a
		inc		mp0
		rl		release_num
		mov		a,mp0
		and		a,7fh
		xor		a,offset array_data+8

⌨️ 快捷键说明

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