📄 remote_key.asm
字号:
.include "remote.reg"
;===============================================
; Function:Get_Remote_Key()取得遥控按键
;===============================================
.if 0
Get_Remote_Key proc
.endif
Get_Remote_Key:
push R0
push R2
push R3
;判断是否有新的遥控码值到来
tcm Status_1,#IR_KEY_OK_BIT
jp z,get_ir_code
.if 1
;判断按键重复次数是否为零,为零表示无按键按下
cp Ir_Repeat_Times,#00h
jp z,get_code_ret
;判断按键是否弹起
tm Status_1,#IR_KEY_DOWN_UP_BIT
jp z,ir_key_up
;=====================================================================
;-------------------------------------------------------------------------
;需要连续发射的按键
;-------------------------------------------------------------------------
clr R2
clr R3
con_ju_key:
ldc R0,#Repeat_Key_Tab[RR2]
cp R0,Current_Key
jp z,set_con_send_code
inc R3
cp R0,#INVALID_KEY
jp ne,con_ju_key
;--------------------------------------------------------------------------
;需要长按才需发射的按键
;--------------------------------------------------------------------------------
clr R2
clr R3
con_ju_holdkey:
ldc R0,#Hold_Key_Tab[RR2]
cp R0,Current_Key
jp z,set_hold_send_code
inc R3
cp R0,#INVALID_KEY
jp ne,con_ju_holdkey
;--------------------------------------------------------------------------------
;只需发射一次的按键
;--------------------------------------------------------------------------------
and Status_1,#0ffh-IR_KEY_DOWN_UP_BIT ;手动设置按键状态为弹起
or Status_1,#KEY_VALID_BIT ;置按键为有效
jp get_code_ret
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
set_hold_send_code:
;没弹起,有按键
cp Ir_Repeat_Times,#IR_TIMES
jp ult,get_code_ret
clr Ir_Repeat_Times
add Current_Key,#HOLD_KEY_ADDR
or Status_1,#KEY_VALID_BIT ;设为按键有效
and Status_1,#0ffh-IR_KEY_DOWN_UP_BIT ;手动设置按键状态为弹起
jp get_code_ret
;-----------------------------------------------------------------------------------------
set_con_send_code:
;没弹起,有按键
cp Ir_Repeat_Times,#IR_TIMES
jp ult,get_code_ret
ld Ir_Repeat_Times,#01h
;置按键为有效
or Status_1,#KEY_VALID_BIT
jp get_code_ret
;======================================================================
;按键弹起
ir_key_up:
;关闭蜂鸣器
and P5,#0ffh-10h
;清除按键重复次数
clr Ir_Repeat_Times
;判断按键值是否是需要长按按键
clr R2
clr R3
con_ju_holdkey1:
ldc R0,#Hold_Key_Tab[RR2]
cp R0,Current_Key
jp z,send_code
inc R3
cp R0,#INVALID_KEY
jp ne,con_ju_holdkey1
jp get_code_ret
send_code:
;置按键为有效
or Status_1,#KEY_VALID_BIT
.endif
jp get_code_ret
;============================================================
;第一次获得按键码值
get_ir_code:
and Status_1,#0ffh-IR_KEY_OK_BIT ;清除标志位
ld R0,Remote_Sys_Code0
com R0
cp R0,Remote_Sys_Code1
jp ne,get_code_ret
ld R0,Remote_Cmd_Code0
com R0
cp R0,Remote_Cmd_Code1
jp ne,get_code_ret
get_code:
;bs Status_1,@KEY_VALID_BIT
ld Current_Key,Remote_Cmd_Code0
inc Ir_Repeat_Times
ld Show_Led_2,R0;将需要显示的值装入相应的寄存器
rr Show_Led_2
rr Show_Led_2
rr Show_Led_2
rr Show_Led_2
ld Show_Led_3,R0;将需要显示的值装入相应的寄存器
ld Show_Led_0,Remote_Sys_Code0 ;将需要显示的值装入相应的寄存器
rr Show_Led_0
rr Show_Led_0
rr Show_Led_0
rr Show_Led_0
ld Show_Led_1,Remote_Sys_Code0;将需要显示的值装入相应的寄存器
;响蜂鸣器
or P5,#10h
get_code_ret:
pop R3
pop R2
pop R0
ret
;-------------------------------------------
;需连续发射的键
Repeat_Key_Tab: db 001h ;irc_vol_inc
db 002h ;irc_vol_dec
db 003h ;irc_vol_inc
db INVALID_KEY ;end
;-------------------------------------------
;长按只产生一次功能的键
Hold_Key_Tab: db 000h ;
db 001h ;
db INVALID_KEY ;end
;===============================================
; Function:Get_Key()取得整个程序按键
;===============================================
Get_Key:
RET
;**********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -