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

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

?? key.c

?? Bitek 公司 bit1611b模擬屏驅(qū)動芯片外接MCU驅(qū)動DEMO源碼
?? C
字號:
/* **********************************************************************

         Copyright (c) 2002-2006 Beyond Innovation Technology Co., Ltd

        All rights are reserved. Reproduction in whole or in parts is
    prohibited without the prior written consent of the copyright owner.
   ----------------------------------------------------------------------

    Module: KEY.C - Keypad.

    Purpose: Implementation of KEY module.

    Version: 0.01                                   11:35AM  2005/11/17

    Compiler: Keil 8051 C Compiler v8.01

    Reference:

   ----------------------------------------------------------------------
    Modification:

    R0.01 11:35AM  2005/11/17 Jeffrey Chang
    Reason:
        1. Original.
    Solution:

   ********************************************************************** */

#define _KEY_C_

/* ------------------------------------
    Header Files
   ------------------------------------ */
#include "key.h"


/* ::::::::::::::::::::::::::::::::::::
    Key scanning states
   :::::::::::::::::::::::::::::::::::: */
#define KEY_STATE_UP                    1
#define KEY_STATE_DEBOUNCE              2
#define KEY_STATE_REPEAT_START_DELAY    3
#define KEY_STATE_REPEAT_DELAY          4

#define NO_RELEASE_AFTER_STILL          ON



/* ------------------------------------
    Macro Definitions
   ------------------------------------ */



/* ------------------------------------
    Type Definitions
   ------------------------------------ */


/* ------------------------------------
    Variables Definitions
   ------------------------------------ */
static UB8 abKeyBfr[ KEY_BFR_SIZE ];       /* Keypad buffer */

/* Buffer index where next scan code will be inserted */
static UB8 bKeyBfrInIdx;

/* Buffer index where next scan code will be removed */
static UB8 bKeyBfrOutIdx;


#if (NO_RELEASE_AFTER_STILL)
// To filter out the RELEASE key after STILL one.
static BOOL fKeyNO_STILL;
#endif


/* ------------------------------------
    Function Prototypes
   ------------------------------------ */

/* -------------------------------------------------------------------
    Name: KEY_BufferFlush -
    Purpose: To flush the key buffer data structure.
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void KEY_BufferFlush (void)
{
    bKeyCnt         = 0;
    bKeyBfrInIdx    = 0;
    bKeyBfrOutIdx   = 0;
} /* KEY_BufferFlush */


/* -------------------------------------------------------------------
    Name: KEY_BufferIn -
    Purpose: To insert a scan code into the key buffer data structure.
    Passed:
        UB8 bCode = a scan code.
    Returns: None.
    Notes:
        1) THIS ONE MIGHT BE CALLED FROM different ISRs / Code.
           Therefore no local variables are allowed otherwise it causes
           a overlay error in Keil-C.
   ------------------------------------------------------------------- */
void KEY_BufferIn (UB8 bCode)
{
    if (bCode)
    {
        if (bKeyCnt < KEY_BFR_SIZE)
        {
            bKeyCnt++;

            abKeyBfr[ bKeyBfrInIdx++ ] = bCode;

            if (bKeyBfrInIdx >= KEY_BFR_SIZE)
                bKeyBfrInIdx = 0;
        } /* if */
    }
} /* KEY_BufferIn */


/* -------------------------------------------------------------------
    Name: KEY_BufferOut -
    Purpose: To retrieve a scan code from the key buffer data structure.
    Passed: None.
    Returns:
        KEY_NULL if there is no key in the key buffer.
    Notes:
   ------------------------------------------------------------------- */
UB8 KEY_BufferOut (void)
{
    UB8 bCode;


    if (bKeyCnt)
    {
        bKeyCnt--;

        bCode = abKeyBfr[ bKeyBfrOutIdx ];

        bKeyBfrOutIdx++;
        if (bKeyBfrOutIdx >= KEY_BFR_SIZE)
            bKeyBfrOutIdx = 0;

        return( bCode );
    }
    else
    {
        return( KEY_NULL );
    } /* if */
} /* KEY_BufferOut */


/* -------------------------------------------------------------------
    Name: KEY_Decode -
    Purpose: To decode keypad pins to scan code.
    Passed: None.
    Returns:
        KEY_NULL if there is no key in the key buffer.

    Notes: Keypad is active low.
   ------------------------------------------------------------------- */
UB8 KEY_Decode (void)
{
    return( (~KEY_IOPORT) & KEY_MASK );
} /* KEY_Decode */


/* -------------------------------------------------------------------
    Name: KEY_Hit -
    Purpose: To check whether the key buffer is not empty.
    Passed: None.
    Returns:
        TRUE if the key buffer is not empty.
    Notes:
   ------------------------------------------------------------------- */
BOOL KEY_Hit (void)
{
    return( bKeyCnt > 0 );
} /* KEY_Hit */


/* -------------------------------------------------------------------
    Name: KEY_Init -
    Purpose: To initialize the KEY module.
    Passed: None.
    Returns: None.
    Notes:
        KEY_Init() must be called before calling any other of
    the user accessible functions.

   ------------------------------------------------------------------- */
void KEY_Init (void)
{
    // Setup KEYPAD input !

    #if (PLATFORM_CFG == PLATFORM_01_DMO1611A0)
    // (01)VID540-100-027/BIT1611B0  (v1.00 2005/10/14 BIT1611B0 Demo Board)

    KEY_iPOWER      = 1;

    KEY_iMENU       = 1;
    KEY_iSELECT     = 1;
    KEY_iUP         = 1;
    KEY_iDOWN       = 1;

    #elif (PLATFORM_CFG == PLATFORM_04_DMO1611S0)
    // (04)PLATFORM_04_DMO1611S0 (VID502-002-031,BIT1611BS0)

    KEY_iPOWER      = 1;

    KEY_iMENU       = 1;
    KEY_iSELECT     = 1;
    KEY_iUP         = 1;
    KEY_iDOWN       = 1;

    #elif (PLATFORM_CFG == PLATFORM_06_VTX0501)
    // (06)PLATFORM_06_VTX0501 (BMW HS 2.1)

    KEY_iPOWER      = 1;

    KEY_iMENU       = 1;
    KEY_iSELECT     = 1;
    KEY_iUP         = 1;
    KEY_iDOWN       = 1;

    #else
        #error KEY.C - Invalid PLATFORM_CFG !

    #endif /* PROJECT */



    #if (KEY_AUTO_REPEAT)
    bTimerKeyAuto       = 0;    /* For key auto repeat feature */
    #endif // KEY_AUTO_REPEAT

    #if (KEY_STILL_DETECTION)
    // Pressed key duration !
    bKEY_STILL_INTERVAL = KEY_STILL_INTERVAL;
    bTimerKeyPressed    = bKEY_STILL_INTERVAL;
    #endif

    KEY_BufferFlush();

    fKeyReleased    = TRUE;

    bKeyScanState   = KEY_STATE_UP;

    #if (KEY_VR_AIN21)
    bKEY_VR_ADJUSTMENT  = KEY_VR_DEFAULT;
    #endif

} /* KEY_Init */


/* -------------------------------------------------------------------
    Name: KEY_Pressed - To check whether any keys are pressed.
    Purpose: .
    Passed: None.
    Returns:
        FALSE if no key pressed.
     Notes:
   ------------------------------------------------------------------- */
BOOL KEY_Pressed (void)
{
    return( (KEY_IOPORT & KEY_MASK) != KEY_MASK );
} /* KEY_Pressed */


/* -------------------------------------------------------------------
    Name: KEY_Scan -
    Purpose: To scan the keypad periodically.
    Passed: None.
    Returns: None.
    Notes:
        1) THIS ONE IS USUALLY CALLED FROM TIMER ISR ONLY
        2) Local variables are allowed if it is NOT called by other ISRs
           or code !
        3) The duration is at least 30ms between each call of this scan
           function for avoiding de-bounce failure.

   ------------------------------------------------------------------- */
void KEY_Scan (void)
{
    #if (KEY_AUTO_REPEAT)
    if (bTimerKeyAuto)
        bTimerKeyAuto--;
    #endif // KEY_AUTO_REPEAT

    if (bTimerKeyPressed)
        bTimerKeyPressed--;

    #if (KEY_STILL_DETECTION)
    if (bTimerKeyPressed == 1)
    {
        KEY_BufferFlush();
        KEY_BufferIn(bLastKey | KEY_MASK_STILL);

        #if (NO_RELEASE_AFTER_STILL)
        fKeyNO_STILL = FALSE;
        #endif
    }
    #endif // KEY_STILL_DETECTION


    switch (bKeyScanState)
    {
        case KEY_STATE_UP:
            if (KEY_Pressed())
            {
                bKeyScanState = KEY_STATE_DEBOUNCE;

                #if (NO_RELEASE_AFTER_STILL)
                fKeyNO_STILL = TRUE;
                #endif
            }
            #if (KEY_STILL_DETECTION)
            else
            {
                bTimerKeyPressed = 0;
                fKeyReleased = TRUE;
            }
            #endif // KEY_STILL_DETECTION
            break;


        case KEY_STATE_DEBOUNCE:
            if (KEY_Pressed())
            {
                KEY_BufferIn(KEY_Decode());

                #if (KEY_AUTO_REPEAT)
                bTimerKeyAuto = KEY_REPEAT_START_DELAY;
                #endif // KEY_AUTO_REPEAT

                bLastKey = KEY_Decode();

                #if (KEY_STILL_DETECTION)
                if (bLastKey == KEY_POWER)
                    bTimerKeyPressed = bKEY_STILL_INTERVAL;
                #endif // KEY_STILL_DETECTION

                bKeyScanState = KEY_STATE_REPEAT_START_DELAY;
            }
            else
            {
                bTimerKeyPressed = 0;
                fKeyReleased = TRUE;

                bKeyScanState = KEY_STATE_UP;
            }
            break;


        case KEY_STATE_REPEAT_START_DELAY:
            if (KEY_Pressed())
            {
                #if (KEY_AUTO_REPEAT)
                if (bTimerKeyAuto == 0)
                {
                    KEY_BufferIn(KEY_Decode());

                    bTimerKeyAuto = KEY_REPEAT_INTERVAL;

                    bKeyScanState = KEY_STATE_REPEAT_DELAY;
                } /* if */
                #endif // KEY_AUTO_REPEAT
            }
            else
            {
                #if (NO_RELEASE_AFTER_STILL)
                if (fKeyNO_STILL)
                #endif
                {
                    KEY_BufferFlush();
                    KEY_BufferIn(bLastKey | KEY_MASK_RELEASE);
                }

                bTimerKeyPressed = 0;
                fKeyReleased = TRUE;

                bKeyScanState = KEY_STATE_DEBOUNCE;
            } /* if */
            break;


        #if (KEY_AUTO_REPEAT)
        case KEY_STATE_REPEAT_DELAY:
            if (KEY_Pressed())
            {
                if (bTimerKeyAuto == 0)
                {
                    KEY_BufferIn(KEY_Decode());

                    bTimerKeyAuto = KEY_REPEAT_INTERVAL;
                } /* if */
            }
            else
            {
                #if (NO_RELEASE_AFTER_STILL)
                if (fKeyNO_STILL)
                #endif
                {
                    KEY_BufferFlush();
                    KEY_BufferIn(bLastKey | KEY_MASK_RELEASE);
                }

                bTimerKeyPressed = 0;
                fKeyReleased = TRUE;

                bKeyScanState = KEY_STATE_DEBOUNCE;
            }
            break;
        #endif // KEY_AUTO_REPEAT

        default :
            break;
    } /* switch */
} /* KEY_Scan */


/* -------------------------------------------------------------------
    Name:  -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */

/* **********************************************************************

    Description:


   ********************************************************************** */

/* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级亚洲高清视频| 亚洲色大成网站www久久九九| 亚洲成人av资源| 欧美日韩视频在线第一区| 婷婷久久综合九色国产成人| 69av一区二区三区| 国产一区在线观看视频| 久久精品人人做人人爽人人| 成人黄色777网| √…a在线天堂一区| 欧美视频第二页| 蜜桃av一区二区| 国产欧美日本一区视频| 色综合久久久久久久| 午夜天堂影视香蕉久久| 久久综合999| 91同城在线观看| 日韩专区在线视频| 国产亚洲一区字幕| 97精品超碰一区二区三区| 午夜国产精品影院在线观看| 欧美变态口味重另类| 成人免费黄色在线| 亚洲五码中文字幕| 久久综合五月天婷婷伊人| 99久久精品一区二区| 首页国产欧美久久| 国产精品国产三级国产| 欧美另类z0zxhd电影| 国产91在线|亚洲| 亚洲高清免费视频| 国产欧美一区二区精品性| 欧美性受极品xxxx喷水| 国产91精品一区二区麻豆网站| 亚洲最新在线观看| 欧美videossexotv100| 一本色道久久综合精品竹菊| 美女久久久精品| 亚洲激情图片qvod| 国产亚洲短视频| 欧美日韩国产精品自在自线| 懂色av中文一区二区三区 | 久久国产剧场电影| 亚洲乱码一区二区三区在线观看| 91精品国产综合久久久久久久久久| 粉嫩aⅴ一区二区三区四区五区 | 久久国产福利国产秒拍| 国产精品成人一区二区艾草| 日韩一卡二卡三卡四卡| 在线观看视频一区| 成人综合在线视频| 久国产精品韩国三级视频| 亚洲美女精品一区| 国产精品网友自拍| 精品99一区二区| 日韩欧美国产1| 欧美日韩电影一区| 色呦呦国产精品| 成人成人成人在线视频| 久久99国产精品久久99果冻传媒| 亚洲福利一区二区| 亚洲人成网站在线| 亚洲天堂av一区| 欧美高清在线一区| 久久久综合精品| 精品久久久久99| 欧美mv日韩mv国产网站app| 7777精品伊人久久久大香线蕉 | 国产69精品久久777的优势| 久久99这里只有精品| 日本在线播放一区二区三区| 亚洲成人久久影院| 亚洲福利一区二区三区| 亚洲电影一区二区| 午夜伊人狠狠久久| 亚洲超碰精品一区二区| 午夜精品福利一区二区三区av| 亚洲制服丝袜一区| 婷婷久久综合九色综合伊人色| 亚洲一区中文在线| 日本视频在线一区| 美腿丝袜亚洲综合| 裸体在线国模精品偷拍| 久久国产精品露脸对白| 国产一区91精品张津瑜| 国产精品综合网| 国产成人精品一区二区三区网站观看| 国内精品国产三级国产a久久| 国产精品一区二区x88av| 成人黄色网址在线观看| 91小视频免费观看| 91官网在线观看| 制服丝袜日韩国产| 欧美精品一区二区精品网| 久久婷婷久久一区二区三区| 日本一区二区三区电影| 中文字幕日韩精品一区| 一区二区三区美女| 男人的天堂久久精品| 韩国欧美一区二区| 成人av动漫在线| 欧美亚洲日本一区| 日韩精品中文字幕一区| 国产欧美一区二区精品忘忧草 | 欧美日韩免费一区二区三区 | 欧美浪妇xxxx高跟鞋交| 欧美一区二视频| 国产日产亚洲精品系列| 一区二区高清在线| 蜜臀av性久久久久蜜臀av麻豆| 国产精品1024| 欧美日韩一卡二卡| 久久久五月婷婷| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲免费在线观看| 免播放器亚洲一区| 成人国产一区二区三区精品| 在线播放中文一区| 国产免费观看久久| 日本特黄久久久高潮 | 91浏览器打开| 日韩欧美另类在线| 亚洲黄色性网站| 国产精品一二一区| 欧美综合久久久| 国产日韩av一区| 视频一区视频二区在线观看| 成人av电影在线网| 精品少妇一区二区三区日产乱码| 椎名由奈av一区二区三区| 久久99精品国产.久久久久久 | 亚洲一区二区三区四区在线观看 | 色综合久久中文字幕综合网 | 69堂国产成人免费视频| 国产精品视频第一区| 美女在线一区二区| 色噜噜狠狠色综合欧洲selulu| 精品乱人伦一区二区三区| 亚洲一区免费在线观看| 成人99免费视频| 精品福利二区三区| 视频一区在线播放| 欧美在线视频你懂得| 国产精品欧美一级免费| 美女在线一区二区| 在线播放/欧美激情| 亚洲精品日产精品乱码不卡| 国v精品久久久网| 精品日韩av一区二区| 亚洲国产成人高清精品| 91麻豆swag| 国产精品污网站| 成人开心网精品视频| 精品电影一区二区三区| 人人超碰91尤物精品国产| 欧美色综合网站| 亚洲人成网站影音先锋播放| 丁香天五香天堂综合| 久久久噜噜噜久噜久久综合| 久久福利视频一区二区| 日韩精品一区二区三区在线 | 亚洲午夜国产一区99re久久| 99久久综合色| 国产精品久久福利| 成人综合婷婷国产精品久久免费| 精品乱人伦一区二区三区| 久久国产麻豆精品| 精品剧情在线观看| 紧缚捆绑精品一区二区| 久久久久久电影| 国产大陆a不卡| 国产精品久久久久一区| 成人高清免费观看| 亚洲精品视频在线| 欧美最猛黑人xxxxx猛交| 亚洲国产一区在线观看| 欧美日韩精品一二三区| 日韩激情在线观看| 91精品国产色综合久久ai换脸| 日韩不卡在线观看日韩不卡视频| 欧美一区二区久久| 极品少妇xxxx精品少妇偷拍| 久久亚洲影视婷婷| 波多野结衣亚洲| 午夜婷婷国产麻豆精品| 日韩限制级电影在线观看| 奇米综合一区二区三区精品视频 | 国产69精品一区二区亚洲孕妇| 国产日韩欧美精品电影三级在线| 成人综合在线观看| 一区二区三区免费网站| 欧美一卡二卡三卡| 国产91在线|亚洲| 亚洲黄色av一区| 欧美一区二区网站| 丁香激情综合国产| 亚洲一区二区三区视频在线播放 | 国产一区二区三区久久久| 国产精品第五页| 欧美日韩一卡二卡三卡|