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

📄 key.asm

📁 51单片机测温程序
💻 ASM
字号:
//======================================================
//  The information contained herein is the exclusive property of
//  Sunnnorth Technology Co. And shall not be distributed, reproduced,
//  or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2003  SUNNORTH TECHNOLOGY CO.
//                          ALL RIGHTS RESERVED
//  The entire notice above must be reproduced on all authorized copies.
//========================================================
//============================================================
// 文件名称:key.asm
// 实现功能:按键扫描获取键值程序
// 日期:    2005/11/28
//============================================================
.INCLUDE hardware.inc 

.PUBLIC	F_Key_Scan_Initial 
.PUBLIC F_Key_Scan_ServiceLoop 
.PUBLIC F_Key_DebounceCnt_Down 
.PUBLIC _SP_GetCh 
.PUBLIC	F_SP_GetCh 

.PUBLIC R_KeyStrobe 

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

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

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

		retf 

//======================================================
// 函数名称:	F_Key_Scan_ServiceLoop()
// 汇编调用:	F_Key_Scan_ServiceLoop
// 实现功能:   按键服务函数.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1~r2
//======================================================	
F_Key_Scan_ServiceLoop:
		
     	r1 = [P_IOA_Data] 				//获取IOA口状态   
        r1 = r1 and 0xf 				//屏蔽高12位
        r2 = [R_DebounceReg] 			
        [R_DebounceReg] = r1 			
        cmp r2,[R_DebounceReg] 			//状态转变?
        je	L_KS_StableTwoSample 		//是
        
        r1 = C_DebounceCnt 				//debounce time setting
        [R_DebounceCnt] = r1 			//
        retf 							//

L_KS_StableTwoSample:
		r1 = [R_DebounceCnt] 			//
		jz	L_KS_StableOverDebounce 	//
		retf 
//======================================================
// 函数名称:	L_KS_StableOverDebounce()
// 汇编调用:	L_KS_StableOverDebounce
// 实现功能:   确认键值.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1~r2
//======================================================	
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 				//save stable key code to R_KeyStrobe
		retf 		
//======================================================
// 函数名称:	F_Key_DebounceCnt_Down()
// 汇编调用:	F_Key_DebounceCnt_Down
// 实现功能:   循环扫描,确认按键时间.
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	r1
//======================================================	
F_Key_DebounceCnt_Down:
		r1 = [R_DebounceCnt] 			// Debounce subroutine for F_IO_Key_Scan:
		jz	L_DebounceCntZero 			// stop count if zero
		r1 -= 0x0001 					//
		[R_DebounceCnt] = r1 			//
L_DebounceCntZero:						//
 		retf   							//	


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

⌨️ 快捷键说明

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