各位大哥大姊您們好:

小弟今年高職三年級唸資訊科

我們要做專題報告及製作才能畢業〒ˍ〒

我們這組作的專題是 " 電子密碼鎖 " 但是小弟不知道它的程式碼什麼去寫也不懂

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 CONV
ACALL SCAN
MOV A,R5
CJNE A,#BH,L2 ;HELP
AJMP HELP
L2: CJNE A,#CH,L3 ;F1
AJMP F1
L3: CJNE A,#DH,L4 ;F2
AJMP F2
L4: CJNE A,#EH,L5 ;F3
AJMP F3
L5: CJNE A,#FH,L1 ;F4
AJMP F4
;------
; HELP
;------
HELP: SETB SW
SJMP L0
;----
; F1
;----
F1: ACALL CLRLCD
MOV A,#86H
ACALL W_INS
MOV CNT,#4
MOV DPTR,#MSG3 ;'TIME'
ACALL W_STR
F11: ACALL CONV ;BCD TO ASCII
MOV A,#C4H
ACALL W_INS
ACALL DISP ;LCD DISPLAY DATA
ACALL SCAN
MOV A,R5
CJNE A,#BH,F12 ;HELP
AJMP HELP
F12: CJNE A,#DH,F13 ;F2
AJMP F2
F13: CJNE A,#EH,F14 ;F3
AJMP F3
F14: CJNE A,#FH,F11 ;F4
AJMP F4
;----
; F2
;----
F2: ACALL CLRLCD
MOV R0,#48H ;INPUT BUFFER
MOV A,#82H
ACALL W_INS
MOV CNT,#11
MOV DPTR,#MSG4
ACALL W_STR
MOV A,#C4H
ACALL W_INS
F21: ACALL SCAN
MOV A,R5
XRL A,#16 ;NOT
JZ F21
MOV A,R5
CJNE A,#AH,F22
AJMP SETF2 ;SET
F22: CJNE A,#BH,F23 ;HELP
AJMP HELP
F23: CJNE A,#CH,F24 ;F1
AJMP F1
F24: CJNE A,#DH,F25 ;F2
AJMP F21
F25: CJNE A,#EH,F26 ;F3
AJMP F3
F26: CJNE A,#FH,F27 ;F4
AJMP F4
F27: MOV A,R5
MOV @R0,A
ORL A,#30H
ACALL W_DATA
INC R0
CJNE R0,#4EH,F28
MOV R0,#48H
MOV A,#C4H
ACALL W_INS
F28: SJMP F21
;--------
; F2-SET
;--------
SETF2: MOV R2,#3
MOV R0,#48H
MOV R1,#33H
T1: MOV A,@R0
ANL A,#0FH
SWAP A
INC R0
ADD A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,T1
;
MOV R0,#30H
MOV R1,#33H
MOV A,@R1
CLR C
SUBB A,#24H ;HOUR>24?
JNC T2
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
CLR C
SUBB A,#60H ;MIN>60?
JNC T2
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
CLR C
SUBB A,#60H ;SEC>60?
JNC T2
MOV A,@R1
MOV @R0,A
T2: AJMP F1
;----
; F3
;----
F3: ACALL CLRLCD
MOV A,#83H
ACALL W_INS
MOV CNT,#10
MOV DPTR,#MSG5
ACALL W_STR
MOV A,#C6H
ACALL W_INS
MOV R0,#50H
F31: ACALL SCAN
MOV A,R5
XRL A,#16 ;NOT
JZ F31
MOV A,R5
CJNE A,#AH,F32 ;SET
AJMP SETF3
F32: CJNE A,#BH,F33 ;CR
AJMP HELP
F33: CJNE A,#CH,F34 ;F1
AJMP F1
F34: CJNE A,#DH,F35 ;F2
AJMP F2
F35: CJNE A,#EH,F36 ;F3
AJMP F31
F36: CJNE A,#FH,F37 ;F4
AJMP F4
F37: MOV A,R5
MOV @R0,A
ORL A,#30H
ACALL W_DATA
INC R0
CJNE R0,#54H,F38
MOV R0,#50H
MOV A,#C6H
ACALL W_INS
F38: SJMP F31
;--------
; F3-SET
;--------
SETF3: CLR F0 ;F0=0,ERROR.F0=1,EXACT
ACALL R_CODE
MOV R2,#4
MOV R0,#50H
MOV R1,#54H
C1: MOV A,@R0
XRL A,@R1
JNZ C2
INC R0
INC R1
DJNZ R2,C1
CLR SW
SETB F0 ;CODE EXACT
C2: MOV A,#C6H
ACALL W_INS
MOV DPTR,#MSG6 ;MSG6='EXACT'
JB F0,C3
MOV DPTR,#MSG7 ;MSG7='ERROR'
C3: MOV CNT,#5
ACALL W_STR
C4: ACALL SCAN
MOV A,R5
CJNE A,#BH,C5 ;HELP
AJMP HELP
C5: CJNE A,#CH,C6 ;F1
AJMP F1
C6: CJNE A,#DH,C7 ;F2
AJMP F2
C7: CJNE A,#EH,C8 ;F3
AJMP F3
C8: CJNE A,#FH,C9 ;F4
AJMP F4
C9: AJMP C4
;----
; F4
;----
F4: ACALL CLRLCD
MOV A,#84H
ACALL W_INS
MOV CNT,#8
MOV DPTR,#MSG8
ACALL W_STR
MOV A,#C6H
MOV R0,#54H
ACALL W_INS
F41: ACALL SCAN
MOV A,R5
XRL A,#16 ;NOT
JZ F41
MOV A,R5
CJNE A,#AH,F42
AJMP SETF4 ;SET
F42: CJNE A,#BH,F43 ;HELP
AJMP HELP
F43: CJNE A,#CH,F44 ;F1
AJMP F1
F44: CJNE A,#DH,F45 ;F2
AJMP F2
F45: CJNE A,#EH,F46 ;F3
AJMP F3
F46: CJNE A,#FH,F47 ;F4
AJMP F4
F47: MOV A,R5
MOV @R0,A
ADD A,#30H
ACALL W_DATA
INC R0
CJNE R0,#58H,F48
MOV R0,#54H
MOV A,#C6H
ACALL W_INS
F48: SJMP F41
;--------
; F4-SET
;--------
SETF4: ACALL W_CODE
ACALL CLRLCD
MOV A,#84H
ACALL W_INS
MOV CNT,#8
MOV DPTR,#MSG9
ACALL W_STR
M0: ACALL SCAN
MOV A,R5
CJNE A,#BH,M1 ;HELP
AJMP HELP
M1: CJNE A,#CH,M2 ;F1
AJMP F1
M2: CJNE A,#DH,M3 ;F2
AJMP F2
M3: CJNE A,#EH,M4 ;F3
AJMP F3
M4: CJNE A,#FH,M0 ;F4
AJMP F4
;----------
; 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
ACALL DELAY
ACALL DELAY
SJMP S5 ;First Line
S1: INC R5
JB P3.5,S2
JNB P3.5,$ ;DEBOUNCE
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP S5 ;Second Line
S2: INC R5
JB P3.6,S3
JNB P3.6,$
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP S5 ;Third Line
S3: INC R5
JB P3.7,S4
JNB P3.7,$
ACALL DELAY
ACALL DELAY
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,#16
MOV DPTR,#MSG1
ACALL W_STR
MOV A,#C0H
ACALL W_INS
MOV CNT,#16
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,#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
;
MOV A,#38H
ACALL W_INS
MOV A,#38H
ACALL W_INS
MOV A,#38H
ACALL W_INS
MOV A,#38H
ACALL W_INS
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
;--------------
; BCD TO ASCII
;--------------
CONV: MOV A,#30H
MOV R0,A
MOV A,@R0
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 40H,A
MOV A,@R0
ANL A,#0FH
ADD A,#30H
MOV 41H,A
MOV 42H,#":"
INC R0
MOV A,@R0
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 43H,A
MOV A,@R0
ANL A,#0FH
ADD A,#30H
MOV 44H,A
MOV 45H,#":"
INC R0
MOV A,@R0
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 46H,A
MOV A,@R0
ANL A,#0FH
ADD A,#30H
MOV 47H,A
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,#150
DJNZ R7,$
DJNZ R6,D1
RET
;-------------
; JUDGE H/M/S
;-------------
JUDGE: PUSH A
MOV A,32H
ADD A,#1
DA A
MOV 32H,A
CJNE A,#60H,FIX
MOV 32H,#00
MOV A,31H
ADD A,#1
DA A
MOV 31H,A
CJNE A,#60H,FIX
MOV 31H,#00
MOV A,30H
ADD A,#1
DA A
MOV 30H,A
CJNE A,#24H,FIX
MOV 30H,#00
FIX: POP A
RET
;--------
; TIMER0
;--------
TIMER0: PUSH A ;TIMER 1 SEC
MOV TH0,#>(65536-10000)
MOV TL0,#DJNZ SEC,EXIT3
MOV SEC,#100
ACALL JUDGE
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
DS: 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,DS
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 'F1:TIME F2:ADJ'
MSG2: DB 'F3:INPUT F4:SET'
MSG3: DB 'TIME'
MSG4: DB 'ADJUST TIME'
MSG5: DB 'INPUT CODE'
MSG6: DB 'EXACT'
MSG7: DB 'ERROR'
MSG8: DB 'SET CODE'
MSG9: DB 'SUCCESS!'
END

這是我重我同學那拿過來的其實我們這組所有人都不太懂這程式碼 還有人說我們這組的程式
碼全部都是錯誤連篇 能請大哥大姊及高手專家幫幫忙小弟嗎????
也煩請幫忙小弟解釋程式碼 小弟的程式碼的過程是要輸入鍵盤與LED和等等.....相關一些
密碼鎖的事情 謝謝您們的講解 這個程式碼是關於我們能不能拿畢業證書的大問題
能煩請各位的幫忙謝謝~~~~~~~~〒ˍ〒


共 2 則回應

1 樓 · jasonking · 發表於 2012-02-21 20:27 · 檢舉

引述《jasonking》之銘言:
> 各位大哥大姊您們好:
>
> 小弟今年高職三年級唸資訊科
>
> 我們要做專題報告及製作才能畢業〒ˍ〒
>
> 我們這組作的專題是 " 電子密碼鎖 " 但是小弟不知道它的程式碼什麼去寫也不懂
>
> 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 CONV
> ACALL SCAN
> MOV A,R5
> CJNE A,#BH,L2 ;HELP
> AJMP HELP
> L2: CJNE A,#CH,L3 ;F1
> AJMP F1
> L3: CJNE A,#DH,L4 ;F2
> AJMP F2
> L4: CJNE A,#EH,L5 ;F3
> AJMP F3
> L5: CJNE A,#FH,L1 ;F4
> AJMP F4
> ;------
> ; HELP
> ;------
> HELP: SETB SW
> SJMP L0
> ;----
> ; F1
> ;----
> F1: ACALL CLRLCD
> MOV A,#86H
> ACALL W_INS
> MOV CNT,#4
> MOV DPTR,#MSG3 ;'TIME'
> ACALL W_STR
> F11: ACALL CONV ;BCD TO ASCII
> MOV A,#C4H
> ACALL W_INS
> ACALL DISP ;LCD DISPLAY DATA
> ACALL SCAN
> MOV A,R5
> CJNE A,#BH,F12 ;HELP
> AJMP HELP
> F12: CJNE A,#DH,F13 ;F2
> AJMP F2
> F13: CJNE A,#EH,F14 ;F3
> AJMP F3
> F14: CJNE A,#FH,F11 ;F4
> AJMP F4
> ;----
> ; F2
> ;----
> F2: ACALL CLRLCD
> MOV R0,#48H ;INPUT BUFFER
> MOV A,#82H
> ACALL W_INS
> MOV CNT,#11
> MOV DPTR,#MSG4
> ACALL W_STR
> MOV A,#C4H
> ACALL W_INS
> F21: ACALL SCAN
> MOV A,R5
> XRL A,#16 ;NOT
> JZ F21
> MOV A,R5
> CJNE A,#AH,F22
> AJMP SETF2 ;SET
> F22: CJNE A,#BH,F23 ;HELP
> AJMP HELP
> F23: CJNE A,#CH,F24 ;F1
> AJMP F1
> F24: CJNE A,#DH,F25 ;F2
> AJMP F21
> F25: CJNE A,#EH,F26 ;F3
> AJMP F3
> F26: CJNE A,#FH,F27 ;F4
> AJMP F4
> F27: MOV A,R5
> MOV @R0,A
> ORL A,#30H
> ACALL W_DATA
> INC R0
> CJNE R0,#4EH,F28
> MOV R0,#48H
> MOV A,#C4H
> ACALL W_INS
> F28: SJMP F21
> ;--------
> ; F2-SET
> ;--------
> SETF2: MOV R2,#3
> MOV R0,#48H
> MOV R1,#33H
> T1: MOV A,@R0
> ANL A,#0FH
> SWAP A
> INC R0
> ADD A,@R0
> MOV @R1,A
> INC R0
> INC R1
> DJNZ R2,T1
> ;
> MOV R0,#30H
> MOV R1,#33H
> MOV A,@R1
> CLR C
> SUBB A,#24H ;HOUR>24?
> JNC T2
> MOV A,@R1
> MOV @R0,A
> INC R0
> INC R1
> MOV A,@R1
> CLR C
> SUBB A,#60H ;MIN>60?
> JNC T2
> MOV A,@R1
> MOV @R0,A
> INC R0
> INC R1
> MOV A,@R1
> CLR C
> SUBB A,#60H ;SEC>60?
> JNC T2
> MOV A,@R1
> MOV @R0,A
> T2: AJMP F1
> ;----
> ; F3
> ;----
> F3: ACALL CLRLCD
> MOV A,#83H
> ACALL W_INS
> MOV CNT,#10
> MOV DPTR,#MSG5
> ACALL W_STR
> MOV A,#C6H
> ACALL W_INS
> MOV R0,#50H
> F31: ACALL SCAN
> MOV A,R5
> XRL A,#16 ;NOT
> JZ F31
> MOV A,R5
> CJNE A,#AH,F32 ;SET
> AJMP SETF3
> F32: CJNE A,#BH,F33 ;CR
> AJMP HELP
> F33: CJNE A,#CH,F34 ;F1
> AJMP F1
> F34: CJNE A,#DH,F35 ;F2
> AJMP F2
> F35: CJNE A,#EH,F36 ;F3
> AJMP F31
> F36: CJNE A,#FH,F37 ;F4
> AJMP F4
> F37: MOV A,R5
> MOV @R0,A
> ORL A,#30H
> ACALL W_DATA
> INC R0
> CJNE R0,#54H,F38
> MOV R0,#50H
> MOV A,#C6H
> ACALL W_INS
> F38: SJMP F31
> ;--------
> ; F3-SET
> ;--------
> SETF3: CLR F0 ;F0=0,ERROR.F0=1,EXACT
> ACALL R_CODE
> MOV R2,#4
> MOV R0,#50H
> MOV R1,#54H
> C1: MOV A,@R0
> XRL A,@R1
> JNZ C2
> INC R0
> INC R1
> DJNZ R2,C1
> CLR SW
> SETB F0 ;CODE EXACT
> C2: MOV A,#C6H
> ACALL W_INS
> MOV DPTR,#MSG6 ;MSG6='EXACT'
> JB F0,C3
> MOV DPTR,#MSG7 ;MSG7='ERROR'
> C3: MOV CNT,#5
> ACALL W_STR
> C4: ACALL SCAN
> MOV A,R5
> CJNE A,#BH,C5 ;HELP
> AJMP HELP
> C5: CJNE A,#CH,C6 ;F1
> AJMP F1
> C6: CJNE A,#DH,C7 ;F2
> AJMP F2
> C7: CJNE A,#EH,C8 ;F3
> AJMP F3
> C8: CJNE A,#FH,C9 ;F4
> AJMP F4
> C9: AJMP C4
> ;----
> ; F4
> ;----
> F4: ACALL CLRLCD
> MOV A,#84H
> ACALL W_INS
> MOV CNT,#8
> MOV DPTR,#MSG8
> ACALL W_STR
> MOV A,#C6H
> MOV R0,#54H
> ACALL W_INS
> F41: ACALL SCAN
> MOV A,R5
> XRL A,#16 ;NOT
> JZ F41
> MOV A,R5
> CJNE A,#AH,F42
> AJMP SETF4 ;SET
> F42: CJNE A,#BH,F43 ;HELP
> AJMP HELP
> F43: CJNE A,#CH,F44 ;F1
> AJMP F1
> F44: CJNE A,#DH,F45 ;F2
> AJMP F2
> F45: CJNE A,#EH,F46 ;F3
> AJMP F3
> F46: CJNE A,#FH,F47 ;F4
> AJMP F4
> F47: MOV A,R5
> MOV @R0,A
> ADD A,#30H
> ACALL W_DATA
> INC R0
> CJNE R0,#58H,F48
> MOV R0,#54H
> MOV A,#C6H
> ACALL W_INS
> F48: SJMP F41
> ;--------
> ; F4-SET
> ;--------
> SETF4: ACALL W_CODE
> ACALL CLRLCD
> MOV A,#84H
> ACALL W_INS
> MOV CNT,#8
> MOV DPTR,#MSG9
> ACALL W_STR
> M0: ACALL SCAN
> MOV A,R5
> CJNE A,#BH,M1 ;HELP
> AJMP HELP
> M1: CJNE A,#CH,M2 ;F1
> AJMP F1
> M2: CJNE A,#DH,M3 ;F2
> AJMP F2
> M3: CJNE A,#EH,M4 ;F3
> AJMP F3
> M4: CJNE A,#FH,M0 ;F4
> AJMP F4
> ;----------
> ; 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
> ACALL DELAY
> ACALL DELAY
> SJMP S5 ;First Line
> S1: INC R5
> JB P3.5,S2
> JNB P3.5,$ ;DEBOUNCE
> ACALL DELAY
> ACALL DELAY
> ACALL DELAY
> SJMP S5 ;Second Line
> S2: INC R5
> JB P3.6,S3
> JNB P3.6,$
> ACALL DELAY
> ACALL DELAY
> ACALL DELAY
> SJMP S5 ;Third Line
> S3: INC R5
> JB P3.7,S4
> JNB P3.7,$
> ACALL DELAY
> ACALL DELAY
> 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,#16
> MOV DPTR,#MSG1
> ACALL W_STR
> MOV A,#C0H
> ACALL W_INS
> MOV CNT,#16
> 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,#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
> ;
> MOV A,#38H
> ACALL W_INS
> MOV A,#38H
> ACALL W_INS
> MOV A,#38H
> ACALL W_INS
> MOV A,#38H
> ACALL W_INS
> 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
> ;--------------
> ; BCD TO ASCII
> ;--------------
> CONV: MOV A,#30H
> MOV R0,A
> MOV A,@R0
> SWAP A
> ANL A,#0FH
> ADD A,#30H
> MOV 40H,A
> MOV A,@R0
> ANL A,#0FH
> ADD A,#30H
> MOV 41H,A
> MOV 42H,#":"
> INC R0
> MOV A,@R0
> SWAP A
> ANL A,#0FH
> ADD A,#30H
> MOV 43H,A
> MOV A,@R0
> ANL A,#0FH
> ADD A,#30H
> MOV 44H,A
> MOV 45H,#":"
> INC R0
> MOV A,@R0
> SWAP A
> ANL A,#0FH
> ADD A,#30H
> MOV 46H,A
> MOV A,@R0
> ANL A,#0FH
> ADD A,#30H
> MOV 47H,A
> 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,#150
> DJNZ R7,$
> DJNZ R6,D1
> RET
> ;-------------
> ; JUDGE H/M/S
> ;-------------
> JUDGE: PUSH A
> MOV A,32H
> ADD A,#1
> DA A
> MOV 32H,A
> CJNE A,#60H,FIX
> MOV 32H,#00
> MOV A,31H
> ADD A,#1
> DA A
> MOV 31H,A
> CJNE A,#60H,FIX
> MOV 31H,#00
> MOV A,30H
> ADD A,#1
> DA A
> MOV 30H,A
> CJNE A,#24H,FIX
> MOV 30H,#00
> FIX: POP A
> RET
> ;--------
> ; TIMER0
> ;--------
> TIMER0: PUSH A ;TIMER 1 SEC
> MOV TH0,#>(65536-10000)
> MOV TL0,#DJNZ SEC,EXIT3
> MOV SEC,#100
> ACALL JUDGE
> 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
> DS: 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,DS
> 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 'F1:TIME F2:ADJ'
> MSG2: DB 'F3:INPUT F4:SET'
> MSG3: DB 'TIME'
> MSG4: DB 'ADJUST TIME'
> MSG5: DB 'INPUT CODE'
> MSG6: DB 'EXACT'
> MSG7: DB 'ERROR'
> MSG8: DB 'SET CODE'
> MSG9: DB 'SUCCESS!'
> END
>
> 這是我重我同學那拿過來的其實我們這組所有人都不太懂這程式碼 還有人說我們這組的程式
> 碼全部都是錯誤連篇 能請大哥大姊及高手專家幫幫忙小弟嗎????
> 也煩請幫忙小弟解釋程式碼 小弟的程式碼的過程是要輸入鍵盤與LED和等等.....相關一些
> 密碼鎖的事情 謝謝您們的講解 這個程式碼是關於我們能不能拿畢業證書的大問題
> 能煩請各位的幫忙謝謝~~~~~~~~〒ˍ〒

2 樓 · jasonking · 發表於 2012-02-21 20:29 · 檢舉

〒ˍ〒 〒ˍ〒 〒ˍ〒 〒ˍ〒 〒ˍ〒

為什麼都沒有人回應是不是這太難了,還是我走錯地方發問

問題............

誰能救救我們這些不懂程式碼的高三生..............