📄 key.asm
字号:
include "key.inc"
;===============================================
; Function:Get_Remote_Key()取得遥控按键
;===============================================
Get_Remote_Key:
;判断是否有新的遥控码值到来
jbc Status_1,@IR_KEY_OK_BIT
jmp get_ir_code
;判断按键重复次数是否为零,为零表示无按键按下
mov a,Ir_Repeat_Times
sub a,@0x00
jbc FLAG,@Z
jmp get_code_ret
;判断按键是否弹起
jbs Status_1,@IR_KEY_DOWN_UP_BIT
jmp ir_key_up
;=====================================================================
;--------------------------------------------------------------------------------
;需要连续发射的按键
;--------------------------------------------------------------------------------
mov a,Current_Key
sub a,@IR_VOL_UP
jbc FLAG,@Z
jmp set_con_send_code
;-----------------------------
mov a,Current_Key
sub a,@IR_VOL_DOWN
jbc FLAG,@Z
jmp set_con_send_code
;-----------------------------
;--------------------------------------------------------------------------------
;需要长按才需发射的按键
;--------------------------------------------------------------------------------
mov a,Current_Key
sub a,@IR_VOL_FF
jbc FLAG,@Z
jmp set_hold_send_code
;-----------------------------
mov a,Current_Key
sub a,@IR_VOL_FF
jbc FLAG,@Z
jmp set_hold_send_code
;-----------------------------
;--------------------------------------------------------------------------------
;只需发射一次的按键
;--------------------------------------------------------------------------------
bc Status_1,@IR_KEY_DOWN_UP_BIT ;手动设置按键状态为弹起
bs Status_1,@KEY_VALID_BIT ;置按键为有效
jmp get_code_ret
set_hold_send_code:
;没弹起,有按键
mov a,Ir_Repeat_Times
sub a,@IR_TIMES ;长按响应时间
jbc FLAG,@C
jmp get_code_ret
clr Ir_Repeat_Times
mov a,Current_Key
add a,@HOLD_KEY_ADDR
mov Current_Key,a
bs Status_1,@KEY_VALID_BIT ;设为按键有效
bc Status_1,@IR_KEY_DOWN_UP_BIT;手动设置按键状态为弹起
ret
;-----------------------------------------------------------------------------------------
set_con_send_code:
;没弹起,有按键
mov a,Ir_Repeat_Times
sub a,@IR_TIMES ;单次发送响应时间
jbc FLAG,@C
jmp get_code_ret
mov a,@0x01
mov Ir_Repeat_Times,a
;置按键为有效
bs Status_1,@KEY_VALID_BIT
ret
;======================================================================
;按键弹起
ir_key_up:
;清除按键重复次数
clr Ir_Repeat_Times
;判断按键值是否是需要长按按键
;-----------------------------
mov a,@IR_VOL_FF
sub a,Current_Key
jbc FLAG,@Z
jmp send_code
;-----------------------------
mov a,@IR_VOL_FF
sub a,Current_Key
jbc FLAG,@Z
jmp send_code
;-----------------------------
ret
send_code:
;置按键为有效
bs Status_1,@KEY_VALID_BIT
ret
;============================================================
;第一次获得按键码值
get_ir_code:
bc Status_1,@IR_KEY_OK_BIT ;清除标志位
mov a,@IR_SYS_CODE
sub a,Remote_Sys_Code0 ;判断遥控系统码
jbs FLAG,@Z
jmp get_code_ret
com remote_cmd_code0 ;客户码取反
mov a,Remote_Cmd_Code0 ;判断客户码是否相等
sub a,Remote_Cmd_Code1
jbs FLAG,@Z
jmp get_code_ret
get_code:
;bs Status_1,@KEY_VALID_BIT
mov a,Remote_Cmd_Code0
mov Current_Key,a
inc Ir_Repeat_Times
get_code_ret:
RET
;===============================================
; Function:Get_Key()取得整个程序按键
;===============================================
Get_Key:
RET
;**********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -