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

📄 cap_keys_task.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2007
 *
 *    File name   : cap_keys_task.h
 *    Description : Capacitive keys task
 *
 *    History :
 *    1. Date        : January 18, 2007
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *  Check all keys, analyze result and send messages with keys status
 * and state
 *
 *    $Revision: 1.0 $
 **************************************************************************/
#define __CAP_KEY_TASK_GLOBALS
#include "cap_keys_task.h"

static CapKeysMessage_t CapKeyMbBuffer[3];

/*************************************************************************
 * Function Name: CapKeysTask
 * Parameters: none
 * Return: none
 *
 * Description: Check all keys, analyze result and send message when
 * key/s is pressed or by some hardware fault
 *
 *************************************************************************/
void CapKeysTask (void)
{
unsigned int ButtCnt;
CapKeysMessage_t CapKey;
unsigned int KeyPressLevel[_CAP_BUTTONS_NUMB];
unsigned int KeyUnpressLevel[_CAP_BUTTONS_NUMB];
static unsigned int HoldKeysState = 0;

  OS_CREATEMB(&CapKeyMb,                  // Mail box ctlr block
              sizeof(CapKeysMessage_t),   // Size of a message in bytes
              sizeof(CapKeyMbBuffer)/sizeof(CapKeysMessage_t),  // Maximum number of messages
              CapKeyMbBuffer);            // Mail box buffer
  // Init unpressed and pressed buttons levels
  for(int i = 0; i < _CAP_BUTTONS_NUMB; ++i)
  {
    KeyUnpressLevel[i] = \
    KeyPressLevel[i] = 0xffffffff;
  }

  OS_PutMail(&CapKeyMb,&HoldKeysState);   // no pressed keys or error message

  while(1)
  {
    CapKey.Data = 0;
    for(int i = 0; i < _CAP_BUTTONS_NUMB; ++i)
    {
      if(BSP_GetButton(i,&ButtCnt) != BUTT_OK)
      {
        ButtCnt = 0;
        CapKey.KeyErrorMask |= 1UL << i;
      }
      else
      {
        // analyzing key counter and calculate key press level
        // assume that unpressed level is minimum value of button's counter
        if(ButtCnt < KeyUnpressLevel[i])
        {
          KeyUnpressLevel[i] = ButtCnt;
          KeyPressLevel[i] = ButtCnt + (ButtCnt/2);
        }
        if (ButtCnt >= KeyPressLevel[i])
        {
          // The key is pressed
          CapKey.PressedKeysMask |= 1UL << i;
        }
      }
    }

    if(HoldKeysState != CapKey.Data)
    {
      // Send message when key/s is pressed or
      // when hardware error flag/s is set
      OS_PutMail(&CapKeyMb,&CapKey);
      HoldKeysState = CapKey.Data;
    }
    OS_Delay(KEYS_SCAN_TO);
  }
}

⌨️ 快捷键说明

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