?? fase.asm
字號(hào):
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DS0
ORG 0030H
MAIN:
MOV TMOD,#11H
CLR 30H //30H位用于控制定時(shí)器的計(jì)時(shí)回轉(zhuǎn),可以用TF1
CLR 40H //40H位用于發(fā)送0判斷位
SETB P2.7 //P2.7用于控制紅外發(fā)射管的發(fā)射
LCALL DELAY
LCALL DELAY
SETB ET0
SETB ET1
SETB EA
MOV R3,#4 //R3是行掃描移位次數(shù)
MOV SP,#60H //設(shè)置棧的初值
MOV P1,#0F0H //鍵掃描初值
MOV A,P1
CJNE A,#0F0H,DELAY1 //判斷有沒(méi)有鍵值過(guò)來(lái)
LJMP MAIN //循環(huán)判斷
DELAY1: //下面延時(shí)約1ms (50*2+2)*10
MOV R0,#10
L1:
MOV R1,#50
L2:
DJNZ R1,L2
DJNZ R0,L1
MOV A,P1
CJNE A,#0F0H,GETKEY0 //如果1ms后判斷有鍵值,則跳到GETKEY里面取出鍵值
LJMP MAIN
GETKEY0:
MOV A,#0FEH
MOV P1,A
MOV A,P1
CJNE A,#0EEH,KEY1
MOV 20H,#0 //如果掃描結(jié)果為0EEH則把0放到20H寄存器里面發(fā)射
LJMP SEND
KEY1: //有錯(cuò),不能超過(guò)8個(gè)
CJNE A,#0DEH,KEY2
MOV 20H,#1
LJMP SEND
KEY2:
CJNE A,#0BEH,KEY3
MOV 20H,#2
LJMP SEND
KEY3:
CJNE A,#07EH,GETKEY1
MOV 20H,#3
LJMP SEND
GETKEY1:
MOV A,#0FDH
MOV P1,A
MOV A,P1
CJNE A,#0EDH,KEY5
MOV 20H,#4
LJMP SEND
KEY5:
CJNE A,#0DDH,KEY6
MOV 20H,#5
LJMP SEND
KEY6:
CJNE A,#0BDH,KEY7
MOV 20H,#6
LJMP SEND
KEY7:
CJNE A,#07DH,GETKEY2
MOV 20H,#7
LJMP SEND
GETKEY2:
MOV A,#0FBH
MOV P1,A
MOV A,P1
CJNE A,#0EBH,KEY9
MOV 20H,#8
LJMP SEND
KEY9:
CJNE A,#0DBH,KEY10
MOV 20H,#9
LJMP SEND
KEY10:
CJNE A,#0BBH,KEY11
MOV 20H,#10
LJMP SEND
KEY11:
CJNE A,#07BH,GETKEY3
MOV 20H,#11
LJMP SEND
GETKEY3:
MOV A,#0F7H
MOV P1,A
MOV A,P1
CJNE A,#0E7H,KEY13
MOV 20H,#12
LJMP SEND
KEY13:
CJNE A,#0D7H,KEY14
MOV 20H,#13
LJMP SEND
KEY14:
CJNE A,#0B7H,KEY15
MOV 20H,#14
LJMP SEND
KEY15:
CJNE A,#077H,KEY16 //只能前127后128,不能跳得太長(zhǎng)
MOV 20H,#15
LJMP SEND
KEY16:
LJMP MAIN
SEND:
MOV P3,20H
MOV TH0,#0DAH //9ms起始碼,
MOV TL0,#0E3H
CLR P2.7
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
MOV TH0,#0ECH //5ms結(jié)果碼。
MOV TL0,#077H
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
JB 07H,K7 //發(fā)送第七位
LCALL SEND0
LJMP BIT6
K7:
LCALL SEND1
BIT6:
JB 06H,K6
LCALL SEND0
LJMP BIT5
K6: LCALL SEND1
BIT5:
JB 05H,K5
LCALL SEND0
LJMP BIT4
K5: LCALL SEND1
BIT4:
JB 04H,K4
LCALL SEND0
LJMP BIT3
K4: LCALL SEND1
BIT3:
JB 03H,K3
LCALL SEND0
LJMP BIT2
K3: LCALL SEND1
BIT2:
JB 02H,K2
LCALL SEND0
LJMP BIT1
K2: LCALL SEND1
BIT1:
JB 01H,K1
LCALL SEND0
LJMP BIT0
K1: LCALL SEND1
BIT0:
JB 00H,K0
LCALL SEND0
LCALL DELAY
LJMP MAIN
K0: LCALL SEND1
LCALL DELAY
LJMP MAIN
SEND1:
MOV TH0,#0FEH //低電平0.5ms
MOV TL0,#00BH
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
MOV TH0,#0F4H //高電平3ms
MOV TL0,#047H
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
RET
SEND0:
MOV TH0,#0FEH //低電平0.5ms
MOV TL0,#00BH
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
MOV TH0,#0FCH //高電平1ms
MOV TL0,#017H
SETB TR0
JNB 30H,$
CLR TR0
CLR 30H
RET
DS0:
SETB 30H
CPL P2.7
RETI
DELAY:
MOV R3,#0FFH
DEL2:
MOV R4,#8H
DEL1:
DJNZ R4,DEL1
DJNZ R3,DEL2
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -