?? ir-led.asm
字號(hào):
;* LED 顯示, P0口為L(zhǎng)ED的數(shù)據(jù)口 *
;* 上電后,將8個(gè)LED全部點(diǎn)亮 *
;* K17鍵按下,繼電器吸合。K19鍵按下,繼電器關(guān)閉。 *
;* *
;-----------------------------------------------
IRCOM EQU 20H ;20H-23H IR使用
IRIN EQU P3.2
BEEP EQU P3.7
RELAY EQU P1.3
;------------------------------------------------
ORG 0000H
JMP MAIN
;------------------------------------------------
MAIN:
MOV SP,#60H
MOV A,#00H
MOV R0,#20H
LOOP0: MOV @R0,A ;20H-24H清零
INC R0
CJNE R0,#25H,LOOP0
SETB IRIN
SETB BEEP
SETB RELAY
MOV 22H,#0FFH
CALL IR_SHOW ;8個(gè)LED全部亮
LOOP1:
CALL IR_IN
CPL A
CJNE A,#40H,LOOP2 ;K17鍵按下
CLR RELAY ;繼電器吸合
LOOP2: CJNE A,#04H,LOOP3 ;K19鍵按下
SETB RELAY ;繼電器關(guān)閉
LOOP3: JMP LOOP1
;---------------------------------------------------
; IR 譯碼子程序
;---------------------------------------------------
IR_IN:
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待 IR 信號(hào)出現(xiàn)
JMP I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1 ;確認(rèn)IR信號(hào)出現(xiàn)
I21: JB IRIN,I3 ;等 IR 變?yōu)楦唠娖? CALL DEL
JMP I21
I3: MOV R3,#0 ;8位數(shù)清為0
LL: JNB IRIN,I4 ;等 IR 變?yōu)榈碗娖? CALL DEL
JMP LL
I4: JB IRIN,I5 ;等 IR 變?yōu)楦唠娖? CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 計(jì)數(shù)
L1: CALL DEL
JB IRIN, N1 ;等 IR 變?yōu)楦唠娖? ;IR=0,檢查R2中的計(jì)數(shù)值
MOV A,#8
CLR C
SUBB A,R2 ;判斷高低位
;IF C=0 BIT=0
MOV A,@R0
RRC A
MOV @R0,A ;處理完一位
INC R3
CJNE R3,#8,LL ;需處理完8位
MOV R3,#0
INC R0
CJNE R0,#24H,LL ;收集到4字節(jié)了
JMP IR_SHOW
N1: INC R2
CJNE R2,#30,L1 ;0.14ms 計(jì)數(shù)過(guò)長(zhǎng)則時(shí)間到自動(dòng)離開
RET
;---------------------------------------------------------------
;鍵值顯示
;22H存入用戶編碼,23H存入用戶編碼的反碼
;---------------------------------------------------------------
IR_SHOW:
MOV A,22H
CPL A ;將22H取反后和23H比較
CJNE A,23H,IR_SHOW1 ;如果不等表示接收數(shù)據(jù)發(fā)生錯(cuò)誤,放棄。
MOV P0,A
CALL BEEP_BL ;蜂鳴器鳴響表示解碼成功
IR_SHOW1: RET
;--------------------------------------------------------
;蜂鳴器響一聲子程序
;--------------------------------------------------------
BEEP_BL:
MOV R6,#100
BL1: CALL DEX1
CPL BEEP
DJNZ R6,BL1
MOV R5,#20
CALL DELAY
RET
DEX1: MOV R7,#180
DEX2: NOP
DJNZ R7,DEX2
RET
DELAY: ;延時(shí)R5×10MS
MOV R6,#50
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;------------------------------------------------
; DELAY R5*0.14MS
DEL:
MOV R5,#1 ;IR解碼使用
DEL0: MOV R6,#2
DEL1: MOV R7,#32
DEL2: DJNZ R7,DEL2
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
DELAY1: ;延時(shí)5MS
MOV R6,#25
DL2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL2
RET
;---------------------------------
END ;結(jié)束
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -