?? ir-dsy.asm
字號:
;********************************************************************************
;* 標題: ME300系列單片機開發系統演示程序 - 遙控鍵值解碼-數碼管顯示 *
;* 硬件: ME300A+,ME300B *
;* 文件: IR-DSY.asm *
;* 日期: 2005-3-20 *
;* 版本: 1.0 *
;* 作者: gguoqing *
;* 郵箱: gguoqing@sxicc.ac.cn *
;* 網站: http://www.willar.com *
;********************************************************************************
;* 描述: *
;* ME300 遙控鍵值讀取器 *
;* 數碼管顯示, P0口為數碼管的數據口 *
;* *
;* K17鍵按下,繼電器吸合。K19鍵按下,繼電器關閉。 *
;********************************************************************************
;* 跳線設置: *
;* ME300A+ JP1 全部短接,JP2短接2-3端 *
;* ME300B JP1 短接,JP2短接2-3端,JP4的P32需要短接 *
;* *
;********************************************************************************
;* 【版權】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
;* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
;********************************************************************************
;-----------------------------------------------
IRCOM EQU 20H ;20H-23H IR使用
IRIN EQU P3.2
BEEP EQU P3.7
RELAY EQU P1.3
;------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0003H ;外部中斷INT0入口地址
JMP IR_IN
;------------------------------------------------
MAIN:
MOV SP,#60H
MOV A,#00H
MOV R0,#20H
LOOP0: MOV @R0,A ;20H-27H清零
INC R0
CJNE R0,#28H,LOOP0
MOV IE,#81H ;允許總中斷中斷,使能 INT0 外部中斷
MOV TCON,#01H ;觸發方式為脈沖負邊沿觸發
SETB IRIN
SETB BEEP
SETB RELAY
CALL IR_SHOW
LOOP1:
CALL IR_SHOW
MOV A,22H
CJNE A,#40H,LOOP2 ;K17鍵按下
CLR RELAY ;繼電器吸合
LOOP2: CJNE A,#04H,LOOP3 ;K19鍵按下
SETB RELAY ;繼電器關閉
LOOP3: JMP LOOP1
;---------------------------------------------------
; IR 譯碼子程序
;---------------------------------------------------
IR_IN:
CLR EA ;暫時關閉CPU的所有中斷請求
PUSH ACC
PUSH PSW
SETB PSW.3 ;選擇工作寄存器組1
CLR PSW.4
MOV R2,#04H
MOV R0,#IRCOM
I1: JNB IRIN,I2 ;等待 IR 信號出現
DJNZ R2,I1
JMP IR_OUT ;IR信號沒出現,退出。
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1 ;確認IR信號出現
I21: JB IRIN,I3 ;等 IR 變為高電平
CALL DEL
JMP I21
I3: MOV R3,#0 ;8位數清為0
LL: JNB IRIN,I4 ;等 IR 變為低電平
CALL DEL
JMP LL
I4: JB IRIN,I5 ;等 IR 變為高電平
CALL DEL
JMP I4
I5: MOV R2,#0 ;0.14ms 計數
L1: CALL DEL
JB IRIN, N1 ;等 IR 變為高電平
;IR=0,檢查R2中的計數值
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字節了
JMP IR_COMP
N1: INC R2
CJNE R2,#30,L1 ;0.14ms 計數過長則時間到自動離開
IR_OUT: POP PSW
POP ACC
SETB EA
RETI
;---------------------------------------------------------------
;鍵值比較與鍵值數據處理
;22H存入用戶編碼,23H存入用戶編碼的反碼
;---------------------------------------------------------------
IR_COMP:
MOV A,22H
CPL A ;將22H取反后和23H比較
CJNE A,23H,IR_OUT ;如果不等表示接收數據發生錯誤,放棄
IR_CHULI:
MOV A,22H
ANL A,#0FH
MOV 25H,A ;送個位顯示單元
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 26H,A ;送十位顯示單元
CALL IR_SHOW ;顯示鍵值
CALL BEEP_BL ;蜂鳴器鳴響表示解碼成功
JMP IR_OUT
;=======================================================
;鍵值顯示
;=======================================================
IR_SHOW:
MOV A,25H ;取顯示數據到A
MOV DPTR,#TAB ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數據對應段碼
MOV P0,A ;段碼放入P0口
CLR P2.7
SETB P2.6
LCALL DELAY1
MOV A,26H ;取顯示數據到A
MOV DPTR,#TAB ;取段碼表地址
MOVC A,@A+DPTR ;查顯示數據對應段碼
MOV P0,A ;段碼放入P0口
CLR P2.6
SETB P2.7
LCALL DELAY1
RET
;-----------------------------------------------------
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88h,83h,0c6h,0a1h,86h,8eh ;0-F
;-----------------------------------------------------
;--------------------------------------------------------
;蜂鳴器響一聲子程序
;--------------------------------------------------------
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: ;延時R5×10MS
MOV R6,#25
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: ;數碼管延時4MS
MOV R6,#20
DL2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL2
RET
;-------------------------------------------------
END ;結束
;================================
;DT9122D 遙控器(偉納電子)
;****** 紅外遙控器鍵值表 ******
; 10 03 01 06
; 09 1D 1F 0D
; 19 1B 11 15
; 17 12 16 4C
; 40 48 04 00
; 02 05 54 4D
; 0A 1E 0E 1A
; 1C 14 0F 0C
;================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -