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

📄 keydeb.c

📁 * KeyDebounce Accept new key reading, handle timing for debounce & slew * KeyId Report which key i
💻 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 + -