⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remote_key.asm

📁 三星94a5接收红外遥控码的并显示在LED上
💻 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 + -