電子密碼鎖之鎖定問題 |
答題得分者是:danny
|
o00o112000
一般會員 發表:5 回覆:3 積分:1 註冊:2007-10-04 發送簡訊給我 |
下面是無名連結的程式碼
http://www.wretch.cc/blog/o00o112000&article_id=14095 這是我們現在的電子密碼鎖 但是可以無限次的輸入密碼 這樣沒有辦法達到防盜的功能 我們想要讓他輸入三次就鎖定不能輸入 請問要在哪邊加上什麼程式呢?! 請各位高手能幫忙 |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
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, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |