線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3121
推到 Plurk!
推到 Facebook!

電子密碼鎖之鎖定問題

答題得分者是:danny
o00o112000
一般會員


發表:5
回覆:3
積分:1
註冊:2007-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-22 11:27:59 IP:140.131.xxx.xxx 訂閱
下面是無名連結的程式碼
http://www.wretch.cc/blog/o00o112000&article_id=14095


這是我們現在的電子密碼鎖

但是可以無限次的輸入密碼

這樣沒有辦法達到防盜的功能

我們想要讓他輸入三次就鎖定不能輸入

請問要在哪邊加上什麼程式呢?!

請各位高手能幫忙
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-23 10:02:59 IP:211.76.xxx.xxx 訂閱
1. 要請教問題, 請先將 source code 貼上來(已經幫你補上), 不要讓回答問題的人再跑到外面去(因為外部連接可能會失效)
2. 先宣告一個記憶體位置(ex: XX), 然後在 SCAN KEY 完(user 確定輸入完成), 將 XX 加一(password 輸入不正確), 如果 XX >= 3 就結束程式不讓他再輸入.
3. 這個應該和 C 無關吧 ? 應該要移到 單晶片與數位電路討論區

8051密碼鎖程式
[code cpp]
EN REG P2.7
RW REG P2.6
RS REG P2.5
SW REG P2.4
CS REG P2.3
SK REG P2.2
DI REG P2.1
DO REG P2.0
ADDR EQU 37H
CNT EQU 38H
SEC EQU 39H
;
ORG 00H
AJMP START
ORG 0BH
AJMP TIMER0
;------
; MAIN
;------
START: MOV SP,#60H
CLR SK
SETB SW
ACALL INIT ;INITIAL RAM & LCD
ACALL SET0 ;SET TIMER 0
L0: ACALL ON ;POWER ON
L1:ACALL SCAN
MOV A,R5
CJNE A,#BH,L2 ;HELP
AJMP HELP
L2: CJNE A,#CH,L3 ;F1
AJMP F1
L3: CJNE A,#DH,L1 ;F2
AJMP F2
;------
; HELP
;------
HELP: SETB SW
SJMP L0
;----
; F1
;----
F1: ACALL CLRLCD
MOV A,#83H
ACALL W_INS
MOV CNT,#10
MOV DPTR,#MSG3
ACALL W_STR
MOV A,#C6H
ACALL W_INS
MOV R0,#50H
F11: ACALL SCAN
MOV A,R5
XRL A,#16 ;NOT
JZ F11
MOV A,R5
CJNE A,#AH,F12 ;SET
AJMP SETF1
F12: CJNE A,#BH,F13 ;CR
AJMP HELP
F13: MOV A,R5
MOV @R0,A
ORL A,#30H
ACALL W_DATA
INC R0
CJNE R0,#54H,F14
MOV R0,#50H
MOV A,#C6H
ACALL W_INS
F14: SJMP F11
;--------
; F1-SET
;--------
SETF1: CLR B.0 ;B.0=0,ERROR.B.0=1,EXACT
ACALL R_CODE
MOV R2,#4
MOV R0,#50H
MOV R1,#54H
B1: MOV A,@R0
XRL A,@R1
JNZ C2
INC R0
INC R1
DJNZ R2,B1
CLR SW
SETB B.0
C2: MOV A,#C6H
ACALL W_INS
MOV DPTR,#MSG4
JB B.0,C3
MOV DPTR,#MSG5
C3: MOV CNT,#5
ACALL W_STR
ACALL DELAY1
ACALL L0
;----
; F2
;----
F2: ACALL CLRLCD
MOV A,#84H
ACALL W_INS
MOV CNT,#7
MOV DPTR,#MSG6
ACALL W_STR
MOV A,#C6H
MOV R0,#54H
ACALL W_INS
F21: ACALL SCAN
MOV A,R5
XRL A,#16 ;NOT
JZ F21
MOV A,R5
CJNE A,#AH,F22
AJMP SETF4 ;SET
F22:CJNE A,#BH,F23
AJMP HELP
F23:MOV A,R5
MOV @R0,A
ADD A,#30H
ACALL W_DATA
INC R0
CJNE R0,#58H,F24
MOV R0,#54H
MOV A,#C6H
ACALL W_INS
F24: SJMP F21
;--------
; F2-SET
;--------
SETF4: ACALL W_CODE
ACALL CLRLCD
MOV A,#84H
ACALL W_INS
MOV CNT,#8
MOV DPTR,#MSG7
ACALL W_STR
ACALL DELAY1
ACALL L0
;----------
; SCAN KEY
;----------
SCAN: MOV R5,#0 ;KEY VALUE
MOV R7,#4 ;COLUME NUM
MOV R6,#11111110B
COL: MOV A,R6
MOV P3,A
JB P3.4,S1
JNB P3.4,$ ;DEBOUNCE
ACALL DELAY
SJMP S5 ;First Line
S1: INC R5
JB P3.5,S2
JNB P3.5,$ ;DEBOUNCE
ACALL DELAY
SJMP S5 ;Second Line
S2: INC R5
JB P3.6,S3
JNB P3.6,$
ACALL DELAY
SJMP S5 ;Third Line
S3: INC R5
JB P3.7,S4
JNB P3.7,$
ACALL DELAY
SJMP S5 ;Fouth Line
S4: INC R5
MOV A,R6
RL A
MOV R6,A
DJNZ R7,COL
S5: RET
;----------
; POWER ON
;----------
ON: PUSH A
MOV A,#80H
ACALL W_INS
MOV CNT,#15
MOV DPTR,#MSG1
ACALL W_STR
MOV A,#C0H
ACALL W_INS
MOV CNT,#15
MOV DPTR,#MSG2
ACALL W_STR
POP A
SETB SW
RET
;------------
; SET TIMER0
;------------
SET0: MOV SEC,#100
MOV TMOD,#01H
MOV IE,#10000010B
MOV TH0,#>(65536-10000)
MOV TL0,#<(65536-10000)
SETB TR0
RET
;----------------
; INIT RAM & LCD
;----------------

INIT: MOV R0,#6
MOV R1,#30H
CLR A
NEXT0: MOV @R1,A
INC R1
DJNZ R0,NEXT0
MOV R0,#14
MOV R1,#40H
CLR A
NEXT1: MOV @R1,A
INC R1
DJNZ R0,NEXT1
;
ACALL Z1
ACALL Z1
ACALL Z1
ACALL Z1
Z1:MOV A,#38H
ACALL W_INS
RET
MOV A,#08H ;FUNCTION SET
ACALL W_INS
MOV A,#01H ;CLEAR DISPLAY
ACALL W_INS
MOV A,#06H ;INPUT MODE SET
ACALL W_INS
MOV A,#0CH ;DISPLAY ON/OFF
ACALL W_INS
RET
;-----------
; CLEAR LCD
;-----------
CLRLCD: MOV A,#01H
ACALL W_INS
RET
;--------------
; DISPLAY TIME
;--------------
DISP: MOV R1,#8
MOV R0,#40H
DSP: MOV A,@R0
ACALL W_DATA
INC R0
DJNZ R1,DSP
RET
;---------------------
; WRITE STRING TO LCD
;---------------------
W_STR: PUSH A
MOV R5,#0
STR: MOV A,R5
MOVC A,@A DPTR
ACALL W_DATA
INC R5
DJNZ CNT,STR
POP A
RET
;------------------
; WRITE INS TO LCD
;------------------
W_INS: PUSH A
ACALL CHECK
CLR RS
CLR RW
SETB EN
MOV P1,A
CLR EN
POP A
RET
;-------------------
; WRITE DATA TO LCD
;-------------------
W_DATA: PUSH A
ACALL CHECK
SETB RS
CLR RW
SETB EN
MOV P1,A
CLR EN
POP A
RET
;----------------
; CHECK LCD BUSY
;----------------
CHECK: PUSH A
BUSY: CLR RS
SETB RW
SETB EN
MOV A,P1
CLR EN
JB ACC.7,BUSY
ACALL DELAY
POP A
RET
;-------
; DELAY
;-------
DELAY: MOV R6,#20
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
;-------
; DELAY1
;-------
DELAY1: MOV R5,#20
D2:MOV R6,#200
D3: MOV R7,#250
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
;--------
; TIMER0
;--------
TIMER0: PUSH A ;TIMER 1 SEC
MOV TH0,#>(65536-10000)
MOV TL0,#<(65536-10000)
DJNZ SEC,EXIT3
MOV SEC,#100
EXIT3: POP A
RETI
;----------------------
; READ CODE FORM 93CX6
;----------------------
R_CODE: PUSH A
MOV ADDR,#0
MOV R0,#54H
MOV R1,#2
LOOP1: ACALL READ
INC ADDR
DJNZ R1,LOOP1
POP A
RET
;---------------------
; WRITE CODE TO 93CX6
;---------------------
W_CODE: PUSH A
MOV ADDR,#0
MOV R0,#54H
MOV R1,#2
LOOP2: ACALL ERASE
ACALL WEN
ACALL WRITE
ACALL WDS
INC ADDR
DJNZ R1,LOOP2
POP A
RET
;-------------
; ERASE 93CX6
;-------------
ERASE: PUSH A
MOV R6,#00000111B
MOV A,ADDR
MOV R7,A
ACALL SHIFT5
SETB CS
MOV CNT,#11
ER:MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ CNT,ER
ACALL CHKBSY
CLR CS
POP A
RET
;--------------------
; 93CX6 WRITE ENABLE
;--------------------
WEN: PUSH A
MOV R6,#00000100B
MOV R7,#11000000B
ACALL SHIFT5
SETB CS
MOV CNT,#11
W1: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ CNT,W1
CLR CS
POP A
RET
;---------------------
; 93CX6 WRITE DISABLE
;---------------------
WDS: PUSH A
MOV R6,#00000100B
MOV R7,#00000000B
ACALL SHIFT5
SETB CS
MOV CNT,#11
BS:MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ CNT,BS
CLR CS
POP A
RET
;-------
; WRITE
;-------
WRITE: PUSH A
MOV R6,#00000101B
MOV A,ADDR
MOV R7,A
ACALL SHIFT5
SETB CS
MOV CNT,#11
WR:MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ CNT,WR
ACALL W_DAT
ACALL CHKBSY
CLR CS
POP A
RET
;---------------------
; WRITE DATA TO 93CX6
;---------------------
W_DAT: PUSH A
MOV R3,#2
WD1: MOV A,@R0
MOV R4,#8
WD2: RLC A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ R4,WD2
INC R0
DJNZ R3,WD1
POP A
RET
;------
; READ
;------
READ: PUSH A
MOV R6,#00000110B
MOV A,ADDR
MOV R7,A
ACALL SHIFT5
SETB CS
MOV CNT,#11
RD:MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV DI,C
SETB SK
NOP
CLR SK
NOP
DJNZ CNT,RD
ACALL R_DAT
CLR CS
POP A
RET
;----------------------
; READ DATA FROM 93CX6
;----------------------
R_DAT: PUSH A
MOV R3,#2
RD1: MOV R4,#8
RD2: SETB SK
NOP
CLR SK
NOP
MOV C,DO
RLC A
DJNZ R4,RD2
MOV @R0,A
INC R0
DJNZ R3,RD1
POP A
RET
;------------------
; SHIFT LEFT 5 BIT
;------------------
SHIFT5: PUSH A
MOV CNT,#5
SHT: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
DJNZ CNT,SHT
POP A
RET
;------------------
; CHECK 93CX6 BUSY
;------------------
CHKBSY: PUSH A
BSY: CLR CS
SETB CS
MOV C,DO
JNC BSY
POP A
RET
;---------
; MESSAGE
;---------
MSG1: DB 'WELCOME TO 8051'
MSG2: DB 'LUNGHWA PROJECT'
MSG3: DB 'INPUT CODE'
MSG4: DB 'EXACT'
MSG5: DB 'ERROR'
MSG6: DB 'NEWPASS'
MSG7: DB 'SUCCESS!'
END
[/code]
===================引 用 o00o112000 文 章===================
下面是無名連結的程式碼
http://www.wretch.cc/blog/o00o112000&article_id=14095


這是我們現在的電子密碼鎖

但是可以無限次的輸入密碼

這樣沒有辦法達到防盜的功能

我們想要讓他輸入三次就鎖定不能輸入

請問要在哪邊加上什麼程式呢?!

請各位高手能幫忙
------
將問題盡快結案也是一種禮貌!
編輯記錄
danny 重新編輯於 2007-10-23 10:04:38, 註解 無‧
系統時間:2024-04-24 14:13:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!