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

📄 key.asm

📁 通过pid算法来对水温的测量、控制等功能
💻 ASM
字号:
//============================================================
// 文件名称:key.asm
// 实现功能:按键扫描获取键值程序
// 日期:    2006/9/20		V1.0
//============================================================
.INCLUDE 	SPCE061A.inc 

.PUBLIC		F_Key_Scan_Initial 
.PUBLIC		_Key_Scan_Initial 
.PUBLIC 	F_Key_Scan_ServiceLoop 
.PUBLIC 	_Key_Scan_ServiceLoop 
.PUBLIC 	F_Key_DebounceCnt_Down 
.PUBLIC 	_Key_DebounceCnt_Down 
.PUBLIC 	_SP_GetCh 
.PUBLIC		F_SP_GetCh 

.PUBLIC 	R_KeyStrobe 

.RAM
.VAR		R_DebounceReg 						//临时键值寄存
.DEFINE 	C_DebounceCnt		0x0015 			//消抖时间控制

.VAR		R_DebounceCnt 						//消抖
.VAR		R_KeyBuf 							
.VAR		R_KeyStrobe 						//最终键值寄存

.CODE
//======================================================
// 函数名称:	Key_Scan_Initial()
// 汇编调用:	F_Key_Scan_Initial
// 实现功能:   按键初始化函数.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1
//======================================================	
F_Key_Scan_Initial:
_Key_Scan_Initial:
	r1 = 0x0000 					
	[R_DebounceReg] = r1 			
	[R_KeyBuf] = r1  				
	[R_KeyStrobe] = r1 				
	r1 = C_DebounceCnt 				
	[R_DebounceCnt] = r1 					// 释放按键计数器

	retf 

//======================================================
// 函数名称:	Key_Scan_ServiceLoop()
// 汇编调用:	F_Key_Scan_ServiceLoop
// 实现功能:   按键服务函数.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1~r2
//======================================================	
F_Key_Scan_ServiceLoop:
_Key_Scan_ServiceLoop:
    r1 = [P_IOA_Data] 						//获取IOA口状态   
	r1 = r1 and 0x7 						//屏蔽高13位
	r2 = [R_DebounceReg] 			
	[R_DebounceReg] = r1 			
	cmp r2,[R_DebounceReg] 					//状态转变?
	je	L_KS_StableTwoSample 				//是
        
	r1 = C_DebounceCnt 						//设置按键释放时间
	[R_DebounceCnt] = r1 		

	retf 					

L_KS_StableTwoSample:
	r1 = [R_DebounceCnt] 	
	jz	L_KS_StableOverDebounce 
	retf 

L_KS_StableOverDebounce:        
	[R_DebounceCnt] = r1 
	r2 = [R_DebounceReg]

	r1 = [R_KeyBuf]
	[R_KeyBuf] = r2 
	r1 = r1 xor 0x00ff 
	r1 = r1 and [R_KeyBuf]
	r1 = r1 and 0x00ff
	r1 = r1 or [R_KeyStrobe]
	[R_KeyStrobe] = r1 						//存取键值到 R_KeyStrobe
	retf 		
//======================================================
// 函数名称:	Key_DebounceCnt_Down()
// 汇编调用:	F_Key_DebounceCnt_Down
// 实现功能:   循环扫描,确认按键时间.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1
//======================================================	
F_Key_DebounceCnt_Down:
_Key_DebounceCnt_Down:
	r1 = [R_DebounceCnt] 					// 键释放时间确认:
	jz	L_DebounceCntZero 					// 时间到?
	r1 -= 0x0001 							// 否,计数器减一
	[R_DebounceCnt] = r1 	
L_DebounceCntZero:							// 是,返回
 	retf   			


//======================================================
// 函数名称:	SP_GetCh()
// 汇编调用:	F_SP_GetCh
// C 调用:		SP_GetCh()
// 实现功能:   获取最终键值.
// 入口参数:	无
// 出口参数:	r1(键值)
// 破坏寄存器:	r1~r2
//======================================================
_SP_GetCh:					
F_SP_GetCh:
	r1 = [R_KeyStrobe] 				// 获取键值
	r2 = 0x0000 
	[R_KeyStrobe] = r2 
	retf 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -