亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? stm8_tsl_rc_services.c

?? 基于STM8 的電容按鍵算法, 方案便宜
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**
  ******************************************************************************
  * @file STM8_TSL_RC_Services.c
  * @brief RC Touch Sensing Library for STM8 CPU family.
  * Set of library internal functions.
  * @author STMicroelectronics - MCD Application Team
  * @version V1.1.0
  * @date 21-FEB-2009
  ******************************************************************************
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
  * @image html logo.bmp
  ******************************************************************************
  */

#include "STM8_TSL_RC_API.h"
#include "STM8_TSL_RC_Services.h"

//--------    SECTION DEFINITION FOR THIS FILE   --------------
#if defined(__CSMC__) && defined(USE_PRAGMA_SECTION)
#pragma section [TSL_RAM]
#pragma section @tiny [TSL_RAM0]
#pragma section (TSL_CODE)
#pragma section const {TSL_CONST}
#endif

//============================================================================
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//-----          SINGLE CHANNEL KEY OR COMMON KEY SERVICES               -----
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//============================================================================


/**
  ******************************************************************************
  * @brief Update pointer to current Key Structure.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SetStructPointer(void)
{
  pKeyStruct = &sSCKeyInfo[KeyIndex];
}


/**
  ******************************************************************************
  * @brief Delta calculation for the current Key structure.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_DeltaCalculation(void)
{
  Delta = (s16)(pKeyStruct->Channel.LastMeas - pKeyStruct->Channel.Reference);
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the IDLE state.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetIdleState(void)
{
  pKeyStruct->Setting.b.CHANGED = 1;
  TSL_SCKey_BackToIdleState();
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to return to the IDLE state and reset appropriate flags.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_BackToIdleState(void)
{
  pKeyStruct->State.whole = IDLE_STATE;
  pKeyStruct->Setting.b.DETECTED = 0;
  pKeyStruct->Setting.b.LOCKED = 0;
  pKeyStruct->Setting.b.ERROR = 0;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the PRE_DETECTED state and init integrator counter.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetPreDetectState(void)
{
  pKeyStruct->State.whole = PRE_DETECTED_STATE;
  pKeyStruct->Channel.IntegratorCounter = DetectionIntegrator;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the DETECTED state and init detection timeout + flags.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetDetectedState(void)
{
  pKeyStruct->State.whole = DETECTED_STATE;
  pKeyStruct->Setting.b.DETECTED = 1;
  pKeyStruct->Setting.b.CHANGED = 1;
  pKeyStruct->Counter = DetectionTimeout;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the POST_DETECTED state and init end integrator counter.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetPostDetectState(void)
{
  pKeyStruct->State.whole = POST_DETECTED_STATE;
  pKeyStruct->Channel.IntegratorCounter = EndDetectionIntegrator;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go back to the DETECTED state
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_BackToDetectedState(void)
{
  pKeyStruct->State.whole = DETECTED_STATE;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the PRE_CALIBRATION state and init integrator counter.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetPreRecalibrationState(void)
{
  pKeyStruct->State.whole = PRE_CALIBRATION_STATE;
  pKeyStruct->Channel.IntegratorCounter = RecalibrationIntegrator;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the CALIBRATION state and init appropriate flags.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetCalibrationState(void)
{
  pKeyStruct->State.whole = CALIBRATION_STATE;
  pKeyStruct->Setting.b.DETECTED = 0;
  pKeyStruct->Setting.b.CHANGED = 1;
  pKeyStruct->Setting.b.LOCKED = 0;
  pKeyStruct->Setting.b.ERROR = 0;
  pKeyStruct->Counter = SCKEY_CALIBRATION_COUNT_DEFAULT;
  pKeyStruct->Channel.Reference = 0;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the ERROR state and init appropriate flags.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetErrorState(void)
{
  pKeyStruct->State.whole = ERROR_STATE;
  pKeyStruct->Setting.b.DETECTED = 0;
  pKeyStruct->Setting.b.CHANGED = 1;
  pKeyStruct->Setting.b.LOCKED = 0;
  pKeyStruct->Setting.b.ERROR = 1;
}


/**
  ******************************************************************************
  * @brief Short local routine to setup SCKey internal state machine.
  * Used to go to the DISABLE state and init appropriate flags.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_SetDisabledState(void)
{
  pKeyStruct->State.whole = DISABLED_STATE;
  pKeyStruct->Setting.b.DETECTED = 0;
  pKeyStruct->Setting.b.CHANGED = 1;
  pKeyStruct->Setting.b.LOCKED = 0;
  pKeyStruct->Setting.b.ERROR = 0;
}


/**
  ******************************************************************************
  * @brief Considers all Key information to apply the Environmental Change System (ECS).
  * Uses an IIR Filter with order 1:
  * Y(n) = K x X(n) + (1-K) x Y(n-1)
  * Y is the reference and X is the acquisition value.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_ECS(void)
{

  u8 K_Filter, K_Filter_Complement;
  s8 ECS_Fast_Direction, ECS_Fast_Enable;
  u32 IIR_Result;

  disableInterrupts();
  Local_TickECS10ms = TSL_TickCount_ECS_10ms;
  TSL_TickCount_ECS_10ms = 0;
  enableInterrupts();

  while ( Local_TickECS10ms-- )
  {
    ECSTimeStepCounter--;
    ECSTempoPrescaler--;
    if ( !ECSTempoPrescaler )
    {
      ECSTempoPrescaler = 10;
      if ( ECSTempoCounter )
        ECSTempoCounter--;
    }

    K_Filter = ECS_K_Slow;   // Default case !
    ECS_Fast_Enable = 1;
    ECS_Fast_Direction = 0;
    for ( KeyIndex = 0; KeyIndex < NUMBER_OF_SINGLE_CHANNEL_KEYS; KeyIndex++ )
    {
      TSL_SetStructPointer();
      // If any key is in DETECT state, ECS is disabled !
      if ( pKeyStruct->State.whole & (PRE_DETECTED_STATE | DETECTED_STATE | POST_DETECTED_STATE) )
      {
        ECSTempoCounter = ECSTemporization;    // Restart temporization counter ...
        break;           // Out from the for loop
      }
      if ( pKeyStruct->State.whole == IDLE_STATE )
      {
        TSL_DeltaCalculation();
        if ( Delta == 0 )  // No Fast ECS !
          ECS_Fast_Enable = 0;
        else
        {
          if ( Delta < 0 )
          {
            if ( ECS_Fast_Direction > 0 )  // No Fast ECS !
              ECS_Fast_Enable = 0;
            else
              ECS_Fast_Direction = -1;
          }
          else
          {
            if ( ECS_Fast_Direction < 0 )  // No Fast ECS !
              ECS_Fast_Enable = 0;
            else
              ECS_Fast_Direction = + 1;
          }
        }
      }
    }

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
    for ( KeyIndex = 0; KeyIndex < NUMBER_OF_MULTI_CHANNEL_KEYS; KeyIndex++ )
    {
      TSL_MCKey_SetStructPointer();
      if ( pMCKeyStruct->State.whole & (PRE_DETECTED_STATE | DETECTED_STATE | POST_DETECTED_STATE) )
      {
        ECSTempoCounter = ECSTemporization;    // Restart temporization counter ...
        break;           // Out from the for loop
      }
      if ( pMCKeyStruct->State.whole == IDLE_STATE )
      {
        for ( ChannelIndex = 0; ChannelIndex < CHANNEL_PER_MCKEY; ChannelIndex++ )
        {
          TSL_MCKey_DeltaCalculation( ChannelIndex );
          Delta1 += Delta;
        }
        if ( Delta1 == 0 )
        {   // No Fast ECS !
          ECS_Fast_Enable = 0;
        }
        else
        {
          if ( Delta1 < 0 )
          {
            if ( ECS_Fast_Direction > 0 )
            {   // No Fast ECS !
              ECS_Fast_Enable = 0;
            }
            else
              ECS_Fast_Direction = -1;
          }
          else
          {
            if ( ECS_Fast_Direction < 0 )
            {   // No Fast ECS !
              ECS_Fast_Enable = 0;
            }
            else
              ECS_Fast_Direction = + 1;
          }
        }
      }
    }
#endif

    if ( !ECSTimeStepCounter && !ECSTempoCounter )
    {
      ECSTimeStepCounter = ECSTimeStep;

      if (ECS_Fast_Enable)
      {
        K_Filter = ECS_K_Fast;
      }

      K_Filter_Complement = (u8)((0xFF ^ K_Filter) + 1);

      if ( K_Filter )
      {
        // Apply filter to generate new reference value.
        for ( KeyIndex = 0; KeyIndex < NUMBER_OF_SINGLE_CHANNEL_KEYS; KeyIndex++ )
        {
          TSL_SetStructPointer();
          if ( pKeyStruct->State.whole == IDLE_STATE )
          {
            IIR_Result = ((u32)(pKeyStruct->Channel.Reference) << 8) + pKeyStruct->Channel.ECSRefRest;
            IIR_Result = K_Filter_Complement * IIR_Result;
            IIR_Result += K_Filter * ((u32)(pKeyStruct->Channel.LastMeas) << 8);
            pKeyStruct->Channel.Reference = (u16)(IIR_Result >> 16);
            pKeyStruct->Channel.ECSRefRest = (u8)(IIR_Result >> 8);
          }
        }
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
        for ( KeyIndex = 0; KeyIndex < NUMBER_OF_MULTI_CHANNEL_KEYS; KeyIndex++ )
        {
          TSL_MCKey_SetStructPointer();
          if ( pMCKeyStruct->State.whole == IDLE_STATE )
          {
            for ( ChannelIndex = 0; ChannelIndex < CHANNEL_PER_MCKEY; ChannelIndex++ )
            {
              IIR_Result = ((u32)(pMCKeyStruct->Channel[ChannelIndex].Reference) << 8) + pMCKeyStruct->Channel[ChannelIndex].ECSRefRest;
              IIR_Result = K_Filter_Complement * IIR_Result;
              IIR_Result += K_Filter * ((u32)(pMCKeyStruct->Channel[ChannelIndex].LastMeas) << 8);
              pMCKeyStruct->Channel[ChannelIndex].Reference = (u16)(IIR_Result >> 16);
              pMCKeyStruct->Channel[ChannelIndex].ECSRefRest = (u8)(IIR_Result >> 8);
            }
          }
        }
#endif
      }
    }
  }
}


/**
  ******************************************************************************
  * @brief Apply Detection Exclusion System algorithm (DES).
  * This function modify the LOCKED bit of current Key structure only.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  ******************************************************************************
  */
void TSL_SCKey_DES(void)
{

  u8 DESGroupMask, KeyToCheck;

  if ( pKeyStruct->Setting.b.LOCKED )
    return;

  DESGroupMask = pKeyStruct->DESGroup;

  for ( KeyToCheck = 0; KeyToCheck < NUMBER_OF_SINGLE_CHANNEL_KEYS; KeyToCheck++ )
  {
    if ( KeyToCheck != KeyIndex )
    {
      // KeyToCheck and current key are in same group ?
      if ( sSCKeyInfo[KeyToCheck].DESGroup & DESGroupMask )
      {
        if ( sSCKeyInfo[KeyToCheck].Setting.b.LOCKED )
        {
          goto ExitToIdle;
        }
      }
    }
  }

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
  for ( KeyToCheck = 0; KeyToCheck < NUMBER_OF_MULTI_CHANNEL_KEYS; KeyToCheck++ )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品综合小说图片区| 美国十次综合导航| 中文字幕高清一区| 26uuu国产日韩综合| 日韩欧美一二三四区| 日韩欧美不卡一区| 精品少妇一区二区三区视频免付费| 91精品在线观看入口| 4438成人网| 91精品一区二区三区久久久久久 | 成人av电影免费在线播放| 美女在线一区二区| 免费欧美日韩国产三级电影| 亚洲精品国产一区二区三区四区在线| 国产偷v国产偷v亚洲高清| 精品国产一区二区在线观看| 日韩视频免费直播| 欧美一级欧美一级在线播放| 69堂成人精品免费视频| 欧美丝袜第三区| 欧美日韩免费一区二区三区| 欧美专区在线观看一区| 色爱区综合激月婷婷| 色琪琪一区二区三区亚洲区| 色综合久久久久久久久久久| 91久久免费观看| 欧美在线啊v一区| 欧美精品第一页| 欧美丰满嫩嫩电影| 91精品国产综合久久精品图片| 日韩一区二区不卡| 精品国产自在久精品国产| 国产午夜亚洲精品羞羞网站| 国产日韩欧美高清| 中文字幕一区二区三区av| 亚洲精选视频免费看| 亚洲成av人片| 久久99精品久久久久久久久久久久 | 欧美专区在线观看一区| 一本大道久久a久久综合婷婷| 91在线观看视频| av激情综合网| 色综合视频一区二区三区高清| 色综合久久综合网| 91免费在线视频观看| 99久久99久久免费精品蜜臀| 色妞www精品视频| 在线看日韩精品电影| 欧美一区二区三区在线看| 久久网这里都是精品| 国产精品久久久久久久久免费樱桃| 日韩理论片中文av| 天使萌一区二区三区免费观看| 开心九九激情九九欧美日韩精美视频电影| 国产精品77777| 久久蜜桃一区二区| 国产精品久久福利| 亚洲国产日产av| 狠狠狠色丁香婷婷综合久久五月| 成人三级伦理片| 欧美日韩精品欧美日韩精品一 | 自拍偷拍国产精品| 亚洲sss视频在线视频| 韩国女主播一区二区三区| www.亚洲在线| 欧美一区二区三区日韩视频| 国产女同互慰高潮91漫画| 亚洲综合色区另类av| 狠狠色丁香久久婷婷综合_中| 一本色道久久综合亚洲精品按摩| 日韩一区二区中文字幕| 中文字幕一区日韩精品欧美| 日韩精品亚洲专区| 成人激情免费网站| 欧美日韩在线播放三区| 欧美精品一区二区三区高清aⅴ| 国产精品嫩草影院com| 亚洲妇熟xx妇色黄| 精品系列免费在线观看| 欧美在线视频全部完| 精品国产乱码久久久久久1区2区 | 精品一区二区免费在线观看| 91久久线看在观草草青青| 久久久91精品国产一区二区精品| 亚洲图片欧美综合| 99久久夜色精品国产网站| 日韩欧美一区电影| 亚洲国产精品久久人人爱蜜臀| 成人午夜电影小说| 欧美精品一区二区在线播放| 婷婷激情综合网| 91蜜桃免费观看视频| 日本一区二区免费在线观看视频| 日韩黄色在线观看| 91久久久免费一区二区| 亚洲国产成人在线| 国内精品自线一区二区三区视频| 欧美男男青年gay1069videost| 国产精品久久久久影院老司| 国产精品自在在线| 欧美一区二区三区系列电影| 一区二区三区四区中文字幕| 成人爱爱电影网址| 久久精品人人做| 麻豆精品一区二区| 欧美狂野另类xxxxoooo| 一区二区三区国产精华| 99久久免费视频.com| 国产精品欧美一区喷水| 国产乱国产乱300精品| 日韩欧美一二三| 奇米四色…亚洲| 欧美精品一卡二卡| 一级特黄大欧美久久久| 国产精品不卡在线| 国产成人av一区二区三区在线 | 欧美日韩二区三区| 亚洲风情在线资源站| 91久久精品网| 亚洲韩国一区二区三区| 欧美中文字幕一二三区视频| 亚洲精品videosex极品| 91国产视频在线观看| 玉足女爽爽91| 色av成人天堂桃色av| 亚洲欧美一区二区不卡| 色综合天天综合网国产成人综合天 | 亚洲女厕所小便bbb| 91免费精品国自产拍在线不卡| 中文字幕欧美一区| 91同城在线观看| 一区二区国产视频| 欧美亚洲丝袜传媒另类| 午夜精品久久久久久久蜜桃app| 欧美喷潮久久久xxxxx| 日本午夜精品视频在线观看| 欧美一区二区三区在线观看| 久久超碰97人人做人人爱| 精品日韩欧美在线| 国产风韵犹存在线视精品| 欧美国产日韩一二三区| av激情综合网| 亚洲一级电影视频| 宅男噜噜噜66一区二区66| 精品综合久久久久久8888| 久久综合狠狠综合久久激情| 大白屁股一区二区视频| 亚洲欧美区自拍先锋| 欧美日韩在线三级| 黑人巨大精品欧美黑白配亚洲| 国产欧美一区二区三区在线老狼| 不卡av电影在线播放| 伊人婷婷欧美激情| 91精品国产91热久久久做人人| 精品一区二区三区av| 国产精品色眯眯| 欧美图区在线视频| 麻豆91精品视频| 国产亚洲精品福利| 99精品欧美一区二区蜜桃免费| 亚洲韩国一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久噜噜噜久久人人看 | 精品美女被调教视频大全网站| 成人精品免费网站| 亚洲一区二区在线免费看| 精品乱人伦小说| 91年精品国产| 蓝色福利精品导航| 久久免费精品国产久精品久久久久| 成人黄色综合网站| 午夜精品久久久| 欧美精品一区二区在线观看| 色天天综合色天天久久| 韩国成人在线视频| 亚洲午夜一区二区三区| 久久久久久免费网| 色香蕉成人二区免费| 精品一区二区三区视频在线观看| 中文字幕在线观看一区| 日韩欧美自拍偷拍| 在线中文字幕不卡| 免费看欧美女人艹b| 中文一区二区在线观看| 91丨九色porny丨蝌蚪| 亚洲丶国产丶欧美一区二区三区| 中文欧美字幕免费| 欧美不卡一区二区三区四区| 欧美在线小视频| 北条麻妃国产九九精品视频| 捆绑紧缚一区二区三区视频| 夜夜爽夜夜爽精品视频| 欧美v国产在线一区二区三区| 高清在线观看日韩| 三级精品在线观看| 中文字幕五月欧美| 欧美白人最猛性xxxxx69交| 欧美乱熟臀69xxxxxx| 色婷婷av一区二区三区软件| jlzzjlzz亚洲日本少妇|