📄 keydeb.c
字号:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright (c) 2007 by Qu chun lei watt@vip.163.com
*
* File name: KEYDEB.C
* Module number: 1201C
* Language: ANSI C
* $Revision: 15 $
*
* Source code for a key debounce and slewing module which is described
* in keydeb.h.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef KEYDEB_C
#define KEYDEB_C
/*------------------------*
| Include header files
*------------------------*/
#include "keydeb.h"
/*----------------*
| Private data
*----------------*/
static UINT8 keyDebounced; /* ID of key currently being debounced */
static UINT8 keyLast; /* key ID given for last call to KeyDebounce */
static UINT8 keyDebounceTimer; /* time remaining before a key will be debounced */
static UINT16 keySlewTime; /* time between slew events or 0 if not slewing */
static UINT16 keySlewTimer; /* time since last key event */
/*--------------------*
| Public functions
*--------------------*/
/*---------------------------------------------------------------------------*
| KeyDebounce
|
| Accept new key reading and handle timing for debounce and slewing
|
| Entry: Input key reading
|
| Exit: Return event
*---------------------------------------------------------------------------*/
TKeyDebounceEvent KeyDebounce(UINT8 keyReading)
{
TKeyDebounceEvent event = KEY_DEBOUNCE_EVENT_NONE;
if(keySlewTimer < 0xFFFF)
keySlewTimer++;
if (keyReading == keyLast)
{
if (keyDebounceTimer != 0)
{
keyDebounceTimer--;
if (keyDebounceTimer == 0)
{
keyDebounced = keyReading;
keySlewTimer = 0;
keySlewTime = 0;
if (keyReading == 0)
event = KEY_DEBOUNCE_EVENT_RELEASE;
else
event = KEY_DEBOUNCE_EVENT_PRESS;
}
}
}
else
{
if (keyReading == keyDebounced)
keyDebounceTimer = 0;
else
keyDebounceTimer = KEY_DEBOUNCE_TIME;
}
if (keySlewTime != 0)
{
if (keySlewTimer >= keySlewTime)
{
keySlewTimer = 0;
keySlewTime = 0;
event = KEY_DEBOUNCE_EVENT_SLEW;
}
}
keyLast = keyReading;
return(event);
}
#if KEYID_REPORTING
/*---------------------------------------------------------------------------*
| KeyId
|
| Report which key is currently pressed
|
| Entry: No inputs
|
| Exit: Return key ID
*---------------------------------------------------------------------------*/
UINT8 KeyId(void)
{
return(keyDebounced);
}
#endif
/*---------------------------------------------------------------------------*
| KeySlewTimeSet
|
| Accept slew time for currently pressed key
|
| Entry: Input slew time
|
| Exit: Returns nothing
*---------------------------------------------------------------------------*/
void KeySlewTimeSet(UINT16 slewTime)
{
keySlewTime = slewTime;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -