您当前的位置:五五电子网电子知识单元电路电子锁简单的电子密码锁 正文
简单的电子密码锁

简单的电子密码锁

点击数:7442 次   录入时间:03-04 11:50:32   整理:http://www.55dianzi.com   电子锁
    这并不是一个真正的电子密码锁,仅供学习 单片机 用。
   
    电路所完成的功能是等待密码的输入,通过数码管滚动显示输入的文本。输入密码的方
法是:电路中有一个拨码开关(看实物图)用前3位来输入密码,第4位先拨到上,再拨到下
(相当于按了一下“回车”键)以确认。重复以上动作可输入一个6位的密码。 单片机 将把
输入的密码与 单片机 内部的密码相比较,如果一致,比较后显示“ACCEPTED”则意味着密码
正确,锁被打开,然后电路返回初始状态。如果比较的结果是不一致,显示“DENIED”表示
密码不正确。

;***** VARIABLE DEFINITIONS
temp		EQU     0x0C        ; temp variable
PINcode		EQU     0x0D        ; the PIN
delaytemp1	EQU	0x0E
delaytemp2	EQU	0x0F
delayteMP3	EQU	0x010
count		EQU	0x011
entry		EQU	0x012

;**********************************************************************
                ORG     0x000             ; processor reset vector
                goto    main              ; go to beginning of program


                ORG     0x004             ; interrupt vector LOCation
                retfie                    ; return from interrupt
;
table1		ADDWF	PCL, F			; Jump
		RETLW	0x086			; E
		RETLW	0x0AB			; n
		RETLW	0x087			; t
		RETLW	0x086			; E
		RETLW	0x0AF			; r
		RETLW	0x0FF			; sPACe
		RETLW	0x08C			; P
		RETLW	0x0F9			; I
		RETLW	0x0AB			; n
		RETLW	0x07F			; dp
		RETLW	0x00			; null char
;
table2		ADDWF	PCL, F
		RETLW	0x088			; A
		RETLW	0x0C6			; C
		RETLW	0x0C6			; C
		RETLW	0x086			; E
		RETLW	0x08C			; P
		RETLW	0x087			; t
		RETLW	0x086			; E
		RETLW	0x0A1			; d
		RETLW	0x00			; \0
;
table3		ADDWF	PCL, F
		RETLW	0x0A1			; d
		RETLW	0x086			; E
		RETLW	0x0AB			; n
		RETLW	0x0F9			; I
		RETLW	0x086			; E
		RETLW	0x0A1			; d
		RETLW	0x00			; \0
;
main            bsf	STATUS, RP0		; Set page bit
		clrf	TRISB			; All outputs
		bcf	STATUS, RP0		; Clear page bit
						; 7-seg on PORTB, dp on 
                        ; bit 7 seg a on bit 0
		MOVLW	b'00111111'
		MOVWF	pincode
		; Main loop, while PIN is wrong say ENTER PIN
		CLRF	count			; char count
		MOVLW	b'10000000'
		MOVWF	entry			; first entry flag set
main_loop	MOVF	count, W
		CALL	table1
		ANDLW	0x0FF			;test if at end of message
		BTFSC	STATUS, Z
		GOTO	disp_done
		MOVWF	PORTB			; Display char
		CALL	del500ms		; delay
		INCF	count, F
		BTFSC	PORTA, 0		; Enter key, switch 5
		GOTO	main_loop
;
		MOVF	PORTA, W
		MOVWF	temp
		MOVLW	0x03A			; Debounce switch
		CALL	del_xW			; delay of ~ 30 ms
		BTFSC	entry, 7		; first or second press 
                                ;of enter ?
		GOTO	first
		MOVLW	b'00001110'
		ANDWF	temp, F			; mask
		RLF	temp, F			; shift left 1 bit
		RLF	temp, W			; shift left 1 bit
		IORWF	entry, F
		MOVF	entry, W
		CLRF	count
		SUBWF	pincode, W
		BTFSS	STATUS, Z
		GOTO	denied
;		
accepted	MOVF	count, W
		CALL	table2
		ANDLW	0x0FF			;test if at end of message
		BTFSC	STATUS, Z
		GOTO	code_done
		MOVWF	PORTB			; Display char
		CALL	del500ms		; delay
		INCF	count, F
		GOTO	accepted		; Do all chars
;
denied		MOVF	count, W
		CALL	table3
		ANDLW	0x0FF			;test if at end of message
		BTFSC	STATUS, Z
		GOTO	code_done
		MOVWF	PORTB			; Display char
		CALL	del500ms		; delay
		INCF	count, F
		GOTO	denied			; Do all chars
;
code_done	CALL	del500ms
		CLRF	count
		MOVLW	b'10000000'
		MOVWF	entry			; first entry flag set
		GOTO	main_loop
;
first		MOVLW	b'00001110'
		ANDWF	temp, F			; mask
		RRF	temp, W			; shift right 1 bit
		MOVWF	entry			; clears first flag bit
		GOTO	main_loop		; Keep displaying message
;
disp_done	CLRF	count
		GOTO	main_loop		
;
del_xW		movwf	delaytemp2		; delay 256 cycles * W
		clrf	delaytemp1		; min delay ~ 512us 
                                ;max ~ 131072us = 0.131 s
del_loop	decfsz	delaytemp1, f		;delay time = 
		goto	del_loop		;msd * ((3 * 256) + 3) * tcy
		decfsz	delaytemp2, f		;
		goto	del_loop		;Actual delay time is 925 us
		return				;

del500ms	MOVLW	0x03
		MOVWF	delaytemp3		; 4 loops
del_loop2	MOVLW	0x0C3			; 195 loops ~ 100ms * 5 = ~500ms
		CALL	del_xW			; Delay routine
		DECFSZ	delaytemp3, F
		GOTO	del_loop2
		RETURN				; Return from routine

                END				; directive 'end of program'
 



本文关键字:电子  密码锁  电子锁单元电路 - 电子锁

上一篇:密码锁规格