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

📄 ctrl_task.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2007
 *
 *    File name   : ctrl_task.c
 *    Description : Control task
 *
 *    History :
 *    1. Date        : January 18, 2007
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *  Controlling LEDs flashing speed, pattern and intensity regarding of the keys
 * state and status
 *
 *    $Revision: 1.0 $
 **************************************************************************/
#define __CTRL_TASK_GLOBALS

#include "ctrl_task.h"

static const unsigned char KeysDecode[] =
{
  0,  // 123456 no pressed
  1,  // 100000
  3,  // 010000
  2,  // 110000
  5,  // 001000
  0,  // 101000
  4,  // 011000
  3,  // 111000
  7,  // 000100
  0,  // 100100
  0,  // 010100
  0,  // 110100
  6,  // 001100
  0,  // 101100
  5,  // 011100
  0,  // 111100
  9,  // 000010
  0,  // 100010
  0,  // 010010
  0,  // 110010
  0,  // 001010
  0,  // 101010
  0,  // 011010
  0,  // 111010
  8,  // 000110
  0,  // 100110
  0,  // 010110
  0,  // 110110
  7,  // 001110
  0,  // 101110
  0,  // 011110
  0,  // 111110
 11,  // 000001
  0,  // 100001
  0,  // 010001
  0,  // 110001
  0,  // 001001
  0,  // 101001
  0,  // 011001
  0,  // 111001
  0,  // 000101
  0,  // 100101
  0,  // 010101
  0,  // 110101
  0,  // 001101
  0,  // 101101
  0,  // 011101
  0,  // 111101
 10,  // 000011
  0,  // 100011
  0,  // 010011
  0,  // 110011
  0,  // 001011
  0,  // 101011
  0,  // 011011
  0,  // 111011
  9,  // 000111
  0,  // 100111
  0,  // 010111
  0,  // 110111
  0,  // 001111
  0,  // 101111
  0,  // 011111
  0,  // 111111
};

static const unsigned char LedsIntensity[] =
{
  0,    // 0
  1,    // 1
  4,    // 2
  7,    // 3
  11,   // 4
  15,   // 5
  20,   // 6
  35,   // 7
  55,   // 8
  150,  // 9
  200,  // 10
  255,  // 11
};

const LedsCtrl_t RunningLight[] =
{
  {_LED2_ID  | _LED15_ID,(LedsCtrl_t *)&RunningLight[1]}, // step 1
  {_LED4_ID  | _LED13_ID,(LedsCtrl_t *)&RunningLight[2]}, // step 2
  {_LED6_ID  | _LED11_ID,(LedsCtrl_t *)&RunningLight[3]}, // step 3
  {_LED8_ID  |  _LED9_ID,(LedsCtrl_t *)&RunningLight[4]}, // step 4
  {_LED10_ID |  _LED7_ID,(LedsCtrl_t *)&RunningLight[5]}, // step 5
  {_LED12_ID |  _LED5_ID,(LedsCtrl_t *)&RunningLight[6]}, // step 6
  {_LED14_ID |  _LED3_ID,(LedsCtrl_t *)&RunningLight[7]}, // step 7
  {_LED16_ID |  _LED1_ID,(LedsCtrl_t *)&RunningLight[0]}, // step 8
};

static const LedsCtrl_t ButtonsFault [] =
{
  {_LED2_ID  | _LED4_ID  | _LED6_ID  | _LED8_ID, (LedsCtrl_t *)&ButtonsFault[1]},
  {_LED15_ID | _LED13_ID | _LED11_ID | _LED9_ID, (LedsCtrl_t *)&ButtonsFault[2]},
  {_LED10_ID | _LED12_ID | _LED14_ID | _LED16_ID,(LedsCtrl_t *)&ButtonsFault[3]},
  {_LED7_ID  | _LED5_ID  | _LED3_ID  | _LED1_ID, (LedsCtrl_t *)&ButtonsFault[0]}
};

/*************************************************************************
 * Function Name: CtrlTask
 * Parameters: none
 * Return: none
 *
 *  Description: Controlling LEDs flashing speed, pattern and intensity regarding
 * of the keys state and status
 *
 *************************************************************************/
void CtrlTask (void)
{
CapKeysMessage_t CapKeysMess;
bool ErrorsShow = false;
unsigned int Temp;
  // Init intensity
  BSP_IntensityLED(LedsIntensity[LED_DEFAULT_INTENSITY]);
  // Init LEDs pattern massive
  pNewLEDsCtrl = (pLedsCtrl_t)RunningLight;
  // Init LEDs scan timer
  OS_CreateTimer(&ScanLEDsTimer,LEDsScan,1);
  // Init LEDs pattern update timer
  OS_CreateTimer(&UpdateLEDsPatternTimer,
                 LEDsUpdatePattern,
                 (LED_DEFAULT_SPEED * LED_SPEED_DELTA) + LED_SPEED_OFFSET);
  OS_CreateTimer(&PowerOffTimer,
                 StandBy,
                 STAND_BY_TO * TICK_PER_SEC);
  // Start timers
  OS_StartTimer(&ScanLEDsTimer);
  OS_StartTimer(&UpdateLEDsPatternTimer);
  OS_StartTimer(&PowerOffTimer);
  while(1)
  {
    // wait for a message from the scanning buttons task
    OS_GetMail(&CapKeyMb,&CapKeysMess);
    if(CapKeysMess.KeyErrorMask)
    {
      // Hardware fault set new LEDs pattern
      if(!ErrorsShow)
      {
        pNewLEDsCtrl = (pLedsCtrl_t)ButtonsFault;
        ErrorsShow = true;
      }
    }
    else
    {
      // Restart stanby timer
      OS_RetriggerTimer(&PowerOffTimer);
      if(ErrorsShow)
      {
        // No more hardware errors return usual LEDs pattern
        ErrorsShow = false;
        pNewLEDsCtrl = (pLedsCtrl_t)RunningLight;
      }
      // buttons data implement
      // Left slider control speed
      // Right slider control intensity
      if(CapKeysMess.PressedKeysMask & KEYS_SPEED_MASK)
      {
        Temp = KeysDecode[CapKeysMess.PressedKeysMask & KEYS_SPEED_MASK];
        if(Temp)
        {
          Temp = (Temp * LED_SPEED_DELTA) + LED_SPEED_OFFSET;
          OS_SetTimerPeriod(&UpdateLEDsPatternTimer,Temp);
        }
      }

      if(CapKeysMess.PressedKeysMask & KEYS_INTENSITY_MASK)
      {
        Temp = KeysDecode[((CapKeysMess.PressedKeysMask & KEYS_INTENSITY_MASK) >> KEYS_INTENSITY_OFFSET)];
        if(Temp)
        {
          BSP_IntensityLED(LedsIntensity[Temp]);
        }
      }
    }
  }
}

⌨️ 快捷键说明

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