?? 發(fā)送.asm
字號:
ORG 00H
MOV SP,#70H ;設(shè)置堆棧
MOV SCON,#50H ;UART工作在MODE1
MOV TMOD,#20H ;TIMER1工作在MODE2
MOV TH1,#0F3H ;波特率為2400
SETB TR1 ;啟動TIMER1
START: MOV R4,#06H ;清除顯示器地址30H~35H
MOV R0,#30H
CLEAR: MOV @R0,#00H
INC R0
DJNZ R4,CLEAR
L1: MOV R3,#0F7H ;掃描初值(P13=0)
MOV R1,#00H ;取碼指針
L2: MOV A,R3 ;開始掃描
MOV P1,A ;將掃描值輸出至P1
MOV A,P1 ;讀入P1值,判斷是否有鍵按下?
MOV R4,A ;存入R4,以判斷是否放開
SETB C ;C =1
MOV R5,#03H ;掃描P15~P17
L3: RLC A ;將按鍵值左移一位
JNC KEYIN ;判斷C =0?有鍵按下則=0,跳至KEYIN
INC R1 ;C=1則表示無鍵按下,將取碼指針值加1
DJNZ R5,L3 ;3列掃描完畢了?
CALL DISP ;調(diào)用顯示子程序
MOV A,R3 ;掃描值載入
SETB C ;C=1
RRC A ;掃描下一行(P13~P10)
MOV R3,A ;存入掃描寄存器
MOV R3,A
JC L2 ;C =1?是則P10尚未掃描到
JMP L1 ;C =0則4行已掃描完畢
KEYIN: MOV R7,#60 ;消除抖動
D2: MOV R6,#248
DJNZ R6,$
DJNZ R7,D2
D3: MOV A,P1 ;讀入P1值
XRL A,R4 ;與上次讀入值作比較
JZ D3 ;ACC=0則相等,表示按鈕未放
MOV A,R1 ;按鈕已放開,取碼指針載入累加器
MOV DPTR,#TABLE ;數(shù)據(jù)指針指到TABLE
MOVC A,@A+DPTR ;至TABLE取碼
MOV R7,A ;取到的數(shù)據(jù)碼暫存入R7
XRL A,#0AH ;是否按“* ”
JZ COMP ;是則跳至COMP
MOV A,R7 ;不是,則再檢測
XRL A,#0BH ;是否按“#”
JZ START ;是則跳至START清除
MOV A,R7 ;不是,則為數(shù)字鍵
MOV SBUF,A ;將按鍵值發(fā)送給8751-R
WAIT: JBC TI,L4 ;發(fā)送完畢否?如發(fā)送完畢TI=1
JMP WAIT
L4: XCH A,30H ;現(xiàn)按鍵值存入(30H)
XCH A,31H ;舊(30H)值存入(31H)
XCH A,32H ;舊(31H)值存入(32H)
XCH A,33H ;舊(32H)值存入(33H)
XCH A,34H ;舊(33H)值存入(34H)
XCH A,35H ;舊(34H)值存入(35H)
CALL DISP ;調(diào)用顯示子程序
JMP L1
COMP: MOV A,R7 ;發(fā)送開門碼(0AH)給8751-R
MOV SBUF,A
WAIT1: JBC TI,START ;發(fā)送完畢否?如發(fā)送完畢TI=1
JMP WAIT1
DISP: MOV A,35H ;D6數(shù)據(jù)值加上74138掃描值
ADD A,#50H ;顯示D6
MOV P0,A ;掃描延時
CALL DELAY
MOV A,34H ;D5數(shù)據(jù)值加上74138掃描值
ADD A,#40H ;顯示D5
MOV P0,A ;掃描延時
CALL DELAY
MOV A,33H ;D4數(shù)據(jù)值加上74138掃描值
ADD A,#30H ;顯示D4
MOV P0,A ;掃描延時
CALL DELAY
MOV A,32H ;D3數(shù)據(jù)值加上74138掃描值
ADD A,#20H ;顯示D3
MOV P0,A ;掃描延時
CALL DELAY
MOV A,31H ;D2數(shù)據(jù)值加上74138掃描值
ADD A,#10H ;顯示D2
MOV P0,A ;掃描延時
CALL DELAY
MOV A,30H ;D1數(shù)據(jù)值加上74138掃描值
ADD A,#00H ;顯示D1
MOV P0,A ;掃描延時
CALL DELAY
RET
DELAY: MOV R7,#06
D1: MOV R6,#248
DJNZ R6,$
DJNZ R7,D1
RET
;MAIN: LCALL FIRST
; ACALL D50S
; ACALL ISDCLR
;FIRST: LCALL ISDCLR
; MOV R4,#00H
; LCALL SPEAKER
; RET
;SPEAKER:MOV DPTR,#0A0H
; MOV A,R4
; ORL A,#080H
; MOVX @DPTR,A
; ACALL D50S
; ANL A,#3FH
; MOVX @DPTR,A
; RET
;ISDCLR: MOV DPTR,#0A0H
; ORL A,#40H
; MOVX @DPTR,A
; LCALL D50S
;D50S: MOV R6,#100
;SD: MOV R7,#248
; DJNZ R7,$
; DJNZ R6,SD
; RET
;D4S: MOV R5,#8
;DE1: ACALL D50S
; DJNZ R5,DE1
; RET
TABLE: DB 01H,02H,03H ;鍵盤碼
DB 04H,05H,06H
DB 07H,08H,09H
DB 0AH,00H,0BH
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -