📄 key.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 + -