bp912306
2008-01-04, 02:41 PM
:lovely: 編碼如下
小弟現在卡在不知道如何讓他由鍵盤輸出我要的文字
如按1的時候顯示 I LOVE
按2顯示 HAPPY
而且要想辦法清除第1次輸入的結果才能顯示第2次的
清除的部份測試的結果都是無法完全清除
不知道這兩個問題該如何解決
有大大可以幫忙解答一下嗎??
用過好多方法了~"~
MASK EQU 00001111B
DSEG AT 30H
KBDBUF: DS 1
CSEG AT 00H
ORG 00H
JMP START
ORG 13H
JMP KBD_ISR
START:
MOV SP,#5FH
CLR P1.3
CLR P1.7 ;設定4bit模式
CLR P1.6 ;
SETB P1.5 ;
CLR P1.4 ;
SETB P1.2 ;
CLR P1.2 ;
CALL DELAY ;
;游標歸位
SETB P1.2 ;設定4bit
CLR P1.2 ;
SETB P1.7 ;改變bit
SETB P1.2 ;在設定4bit
CLR P1.2
CALL DELAY
;輸入模式設定
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.6
SETB P1.5
SETB P1.2
CLR P1.2
CALL DELAY
;顯示器控制
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.7
SETB P1.6
CLR P1.5 ;游標開關
SETB P1.4
SETB P1.2
CLR P1.2
CALL DELAY
MOV P0,#11111111B ;中斷程式
MOV P0,#11110000B ;<--
SETB IT1 ;
SETB EA ;
SETB EX1 ;
SETB P1.3
LOOP:
JMP $
CLEAR_LCD:
CLR P1.3
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.4
SETB P1.2
CLR P1.2
CALL LONG_DELAY
RET
SendChar:
MOV C,ACC.7
MOV P1.7,C
MOV C,ACC.6
MOV P1.6,C
MOV C,ACC.5
MOV P1.5,C
MOV C,ACC.4
MOV P1.4,C
SETB P1.2
CLR P1.2
MOV C,ACC.3
MOV P1.7,C
MOV C,ACC.2
MOV P1.6,C
MOV C,ACC.1
MOV P1.5,C
MOV C,ACC.0
MOV P1.4,C
SETB P1.2
CLR P1.2
CALL DELAY
RET
KBD_ISR:
PUSH ACC
CLR EX1
MOV P0,#11111111B
CALL KEY_SCAN
JNB F0,RECOUNT
CALL TRANS
MOV A,KBDBUF
CALL SendChar
RECOUNT:
MOV P0,#11110000B
JNB P3.3,$
SETB EX1
POP ACC
RETI
TRANS:
MOV A,KBDBUF
MOV DPTR,#KEY_TAB
MOVC A,@A+DPTR
MOV KBDBUF,A
RET
KEY_SCAN:
CLR F0
MOV KBDBUF,#0
CLR P0.3
CALL COL_SCAN
SETB P0.3
JB F0,FINISH_SCAN
CLR P0.2
CALL COL_SCAN
SETB P0.2
JB F0,FINISH_SCAN
CLR P0.1
CALL COL_SCAN
SETB P0.1
JB F0,FINISH_SCAN
CLR P0.0
CALL COL_SCAN
SETB P0.0
FINISH_SCAN:
RET
COL_SCAN:
JNB P0.6,GET_KEY
INC KBDBUF
JNB P0.5,GET_KEY
INC KBDBUF
JNB P0.4,GET_KEY
INC KBDBUF
RET
GET_KEY:
SETB F0
RET
DELAY:
PUSH 0
MOV R0,#50
DJNZ R0,$
POP 0
RET
LONG_DELAY:
PUSH 0
PUSH 1
MOV R0,#100
L0:
MOV R0,#200
DJNZ R0,$
DJNZ R1,L0
POP 1
POP 0
RET
KEY_TAB:
DB '1'
DB '2'
DB '3'
DB '4'
DB '5'
DB '6'
DB '7'
DB '8'
DB '9'
DB '*'
DB '0'
DB '#'
END
贊助商連結
小弟現在卡在不知道如何讓他由鍵盤輸出我要的文字
如按1的時候顯示 I LOVE
按2顯示 HAPPY
而且要想辦法清除第1次輸入的結果才能顯示第2次的
清除的部份測試的結果都是無法完全清除
不知道這兩個問題該如何解決
有大大可以幫忙解答一下嗎??
用過好多方法了~"~
MASK EQU 00001111B
DSEG AT 30H
KBDBUF: DS 1
CSEG AT 00H
ORG 00H
JMP START
ORG 13H
JMP KBD_ISR
START:
MOV SP,#5FH
CLR P1.3
CLR P1.7 ;設定4bit模式
CLR P1.6 ;
SETB P1.5 ;
CLR P1.4 ;
SETB P1.2 ;
CLR P1.2 ;
CALL DELAY ;
;游標歸位
SETB P1.2 ;設定4bit
CLR P1.2 ;
SETB P1.7 ;改變bit
SETB P1.2 ;在設定4bit
CLR P1.2
CALL DELAY
;輸入模式設定
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.6
SETB P1.5
SETB P1.2
CLR P1.2
CALL DELAY
;顯示器控制
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.7
SETB P1.6
CLR P1.5 ;游標開關
SETB P1.4
SETB P1.2
CLR P1.2
CALL DELAY
MOV P0,#11111111B ;中斷程式
MOV P0,#11110000B ;<--
SETB IT1 ;
SETB EA ;
SETB EX1 ;
SETB P1.3
LOOP:
JMP $
CLEAR_LCD:
CLR P1.3
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
SETB P1.2
CLR P1.2
SETB P1.4
SETB P1.2
CLR P1.2
CALL LONG_DELAY
RET
SendChar:
MOV C,ACC.7
MOV P1.7,C
MOV C,ACC.6
MOV P1.6,C
MOV C,ACC.5
MOV P1.5,C
MOV C,ACC.4
MOV P1.4,C
SETB P1.2
CLR P1.2
MOV C,ACC.3
MOV P1.7,C
MOV C,ACC.2
MOV P1.6,C
MOV C,ACC.1
MOV P1.5,C
MOV C,ACC.0
MOV P1.4,C
SETB P1.2
CLR P1.2
CALL DELAY
RET
KBD_ISR:
PUSH ACC
CLR EX1
MOV P0,#11111111B
CALL KEY_SCAN
JNB F0,RECOUNT
CALL TRANS
MOV A,KBDBUF
CALL SendChar
RECOUNT:
MOV P0,#11110000B
JNB P3.3,$
SETB EX1
POP ACC
RETI
TRANS:
MOV A,KBDBUF
MOV DPTR,#KEY_TAB
MOVC A,@A+DPTR
MOV KBDBUF,A
RET
KEY_SCAN:
CLR F0
MOV KBDBUF,#0
CLR P0.3
CALL COL_SCAN
SETB P0.3
JB F0,FINISH_SCAN
CLR P0.2
CALL COL_SCAN
SETB P0.2
JB F0,FINISH_SCAN
CLR P0.1
CALL COL_SCAN
SETB P0.1
JB F0,FINISH_SCAN
CLR P0.0
CALL COL_SCAN
SETB P0.0
FINISH_SCAN:
RET
COL_SCAN:
JNB P0.6,GET_KEY
INC KBDBUF
JNB P0.5,GET_KEY
INC KBDBUF
JNB P0.4,GET_KEY
INC KBDBUF
RET
GET_KEY:
SETB F0
RET
DELAY:
PUSH 0
MOV R0,#50
DJNZ R0,$
POP 0
RET
LONG_DELAY:
PUSH 0
PUSH 1
MOV R0,#100
L0:
MOV R0,#200
DJNZ R0,$
DJNZ R1,L0
POP 1
POP 0
RET
KEY_TAB:
DB '1'
DB '2'
DB '3'
DB '4'
DB '5'
DB '6'
DB '7'
DB '8'
DB '9'
DB '*'
DB '0'
DB '#'
END
贊助商連結