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

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

?? kbd_task.c

?? ATMEL 89c51sndc mp3外接硬盤源碼
?? C
字號(hào):
/*C**************************************************************************
* NAME:         kbd_task.c
*----------------------------------------------------------------------------
* Copyright (c) 2002 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      snd1c-demo-hdd-0_2_0      
* REVISION:     1.1     
*----------------------------------------------------------------------------
* PURPOSE:
* This file contains the keyboard task and attached routines
*
* NOTES:
* Global Variables:
*   - gl_key_press:   bit in bdata space
*   - gl_key_repeat:  bit in bdata space
*   - gl_key:         byte in idata space
*   - gl_kbd_tick:    byte in data space
*
* keypad repeat behavior
*           ---------------------------------------------------------------> t
* key_press ^          ^    ^    ^    ^    ^    ^    ^    ^    ^    ^    ^
*           <--- 1 --->< 2 >< 2 >< 2 >< 2 ><-2-><-2-><-2-><-2-><-2-><-2->
*                      <----------- 3 -------------->           
* delays: 0: KBD_DEBOUNCE_TEMPO  debounce time (not represented)
*         1: KBD_REP_START_TEMPO auto-repeat start time
*         2: KBD_REP_CONT_TEMPO  auto-repeat time
*         3: KBD_REP_LONG_TEMPO  long repeat start time  
*****************************************************************************/

/*_____ I N C L U D E S ____________________________________________________*/

#include "config.h"                         /* system configuration */
#include "lib_demob\board.h"                /* board definition */
#include "lib\kbd\kbd_drv.h"                /* Keyboard driver definition */
#include "..\display\disp.h"                /* display definition */
#include "kbd_task.h"                       /* Keyboard task definition */


/*_____ M A C R O S ________________________________________________________*/


/*_____ D E F I N I T I O N ________________________________________________*/

extern  bdata   bit     gl_key_press;       /* set to TRUE if a key is decoded */
extern  bdata   bit     gl_key_repeat;      /* set to TRUE during repeat start */
extern  idata   Byte    gl_key;             /* value of the key pressed */
extern  data    Byte    gl_kbd_tick;        /* keypad tick counter */

static  Byte    kbd_state;                  /* keyboard task state */


/*_____ D E C L A R A T I O N ______________________________________________*/


/*F**************************************************************************
* NAME: kbd_task_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*   Keyboard task initialisation
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_task_init (void)
{
  gl_key_press = FALSE;                     /* no key pressed */
  gl_key_repeat = FALSE;                    /* no repeat started */
  gl_key = NO_KEY;
  if (kbd_init() == ON)                     /* keyboard initialization */
    kbd_state = KBD_IDLE;
  else
    print_kbd_lock();
    kbd_state = KBD_LOCK;
}


/*F**************************************************************************
* NAME: kbd_task
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*   Keyboard task
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_task (void)
{
  switch (kbd_state)
  {
    case KBD_LOCK:
      if (!Kbd_key_locked())
      {
        print_kbd_unlock();
        kbd_state = KBD_IDLE;
        kbd_init();
      }
      break;

    case KBD_IDLE:
      if (Kbd_key_event())
      { /* key pressed */
        gl_kbd_tick = KBD_DEBOUNCE_INIT;    /* init debounce timer */
        kbd_state = KBD_DEBOUNCE;
      }
      break;

    case KBD_DEBOUNCE:
      if (gl_kbd_tick > KBD_DEBOUNCE_TEMPO)
      {
        gl_key = kbd_decode();              /* read key pressed */
        if (gl_key != NO_KEY)               /* if real key pressed */
        {
          if (gl_key == KEY_LOCK)
          {
            print_kbd_lock();
            kbd_state = KBD_LOCK;
          }
          else
          {
            gl_key_press = TRUE;            /* signal to other tasks */
            kbd_state = KBD_REP_START;
            gl_key_repeat = TRUE;
            gl_kbd_tick = KBD_REP_START_INIT; /* start repeat timer */
          }
        }
        else
        {
          kbd_state = KBD_IDLE;
        }
      }
      break;

    case KBD_REP_START:
      if (Kbd_key_event())
      { /* key pressed or released */
        gl_kbd_tick = KBD_DEBOUNCE_INIT;    /* init debounce timer */
        kbd_state = KBD_DEBOUNCE;
        gl_key_repeat = FALSE;              /* end of repeat */
      }
      else
      {
        if (gl_kbd_tick > KBD_REP_START_TEMPO)
        {
          gl_key = kbd_decode();            /* read key pressed */
          if (gl_key != NO_KEY)             /* if real key pressed */
          {
            gl_key_press = TRUE;            /* signal to other tasks */
            gl_key |= KBD_REP_MASK;         /* mark as repeated key */
            kbd_state = KBD_REP_CONT;
            gl_kbd_tick = KBD_REP_CONT_INIT;/* continue repeat timer */
          }
          else
          {
            gl_key_repeat = FALSE;          /* end of repeat */
            kbd_state = KBD_IDLE;
          }
        }
      }
      break;

    case KBD_REP_CONT:
      if (Kbd_key_event())
      { /* key pressed or released */
        gl_key_repeat = FALSE;              /* end of repeat */
        gl_kbd_tick = KBD_DEBOUNCE_INIT;    /* init debounce timer */
        kbd_state = KBD_DEBOUNCE;
      }
      else
      {
        if (gl_kbd_tick > KBD_REP_CONT_TEMPO)
        {
          gl_key = kbd_decode();            /* read key pressed */
          if (gl_key != NO_KEY)             /* if real key pressed */
          {
            kbd_state++;                    /* for long repeat check */          
            gl_key_press = TRUE;            /* signal to other tasks */
            gl_key |= KBD_REP_MASK;         /* mark as repeated key */
            gl_kbd_tick = KBD_REP_CONT_INIT;/* continue repeat timer */
          }
          else
          {
            gl_key_repeat = FALSE;          /* end of repeat */
            kbd_state = KBD_IDLE;
          }
        }
      }
      break;

    case KBD_REP_LONG:
      if (Kbd_key_event())
      { /* key pressed or released */
        gl_key_repeat = FALSE;              /* end of repeat */
        gl_kbd_tick = KBD_DEBOUNCE_INIT;    /* init debounce timer */
        kbd_state = KBD_DEBOUNCE;
      }
      else
      {
        if (gl_kbd_tick > KBD_REP_CONT_TEMPO)
        {
          gl_key = kbd_decode();            /* read key pressed */
          if (gl_key != NO_KEY)             /* if real key pressed */
          {
            gl_key_press = TRUE;            /* signal to other tasks */
            gl_key |= KBD_LREP_MASK;        /* mark as repeated key */
            gl_kbd_tick = KBD_REP_CONT_INIT;/* continue repeat timer */
          }
          else
          {
            gl_key_repeat = FALSE;          /* end of repeat */
            kbd_state = KBD_IDLE;
          }
        }
      }
      break;

    default:                                /* long repeat state */
      if (Kbd_key_event())
      { /* key pressed or released */
        gl_key_repeat = FALSE;              /* end of repeat */
        gl_kbd_tick = KBD_DEBOUNCE_INIT;    /* init debounce timer */
        kbd_state = KBD_DEBOUNCE;
      }
      else
      {
        if (gl_kbd_tick > KBD_REP_CONT_TEMPO)
        {
          gl_key = kbd_decode();            /* read key pressed */
          if (gl_key != NO_KEY)             /* if real key pressed */
          {
            if (kbd_state == KBD_REP_LONG - 1)
            {
              gl_key |= KBD_LREP_MASK;      /* mark as long repeated key */
            }
            else
            {
              gl_key |= KBD_REP_MASK;       /* mark as repeated key */
            }
            kbd_state++;                  /* for long repeat check */          
            gl_key_press = TRUE;            /* signal to other tasks */
            gl_kbd_tick = KBD_REP_CONT_INIT;/* continue repeat timer */
          }
          else
          {
            gl_key_repeat = FALSE;          /* end of repeat */
            kbd_state = KBD_IDLE;
          }
        }
      }
      break;
  }
}


/*F**************************************************************************
* NAME: kbd_set_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*   Simulate STOP key press
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   Called from mode task before switching to download state
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_set_stop (void)
{
  gl_key = KEY_STOP;
  gl_key_press = TRUE;
  if (kbd_state != KBD_LOCK)
    kbd_state = KBD_IDLE;
}


/*F**************************************************************************
* NAME: kbd_stop_repeat
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
*   Simulate STOP key press
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   Called from IHM task to stop 
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void kbd_stop_repeat (void)
{
  gl_key_repeat = FALSE;                    /* end of repeat */
  kbd_state = KBD_IDLE;
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费观看高清完整版| 日韩三级在线观看| 日韩影视精彩在线| 国产婷婷色一区二区三区在线| 波多野结衣视频一区| 免费高清在线一区| 亚洲综合在线视频| 国产午夜精品在线观看| 欧美精品三级在线观看| 91在线你懂得| 国产传媒欧美日韩成人| 奇米四色…亚洲| 亚洲一区二区三区四区在线观看 | 国产成人8x视频一区二区| 丝袜亚洲另类丝袜在线| 自拍偷拍亚洲综合| 久久久99免费| 欧美成人精品福利| 91精品国产欧美日韩| 欧美视频自拍偷拍| 99re8在线精品视频免费播放| 欧美日韩一区中文字幕| 日韩欧美国产综合| 欧美日韩一级片在线观看| 99久久99精品久久久久久 | 色综合婷婷久久| 国产黄色成人av| 九色综合狠狠综合久久| 丝袜美腿成人在线| 午夜伦欧美伦电影理论片| 亚洲另类春色校园小说| 中文字幕不卡在线| 中文字幕欧美日韩一区| 久久精品亚洲精品国产欧美kt∨| 精品日产卡一卡二卡麻豆| 69堂国产成人免费视频| 欧美日韩二区三区| 在线播放欧美女士性生活| 欧美日韩精品二区第二页| 在线免费av一区| 欧美色精品天天在线观看视频| 色噜噜狠狠成人中文综合| 91蜜桃传媒精品久久久一区二区| av网站免费线看精品| 成人aa视频在线观看| 成人av资源网站| 91视频在线看| 欧美在线|欧美| 欧美精品一卡两卡| 欧美一区二区女人| 精品国产制服丝袜高跟| 久久久久久99久久久精品网站| 国产亚洲精久久久久久| 国产精品网站在线观看| 成人欧美一区二区三区| 一区二区三区中文字幕在线观看| 一区二区三区在线高清| 天天色综合天天| 久久99久久99| 成人性色生活片| 91福利国产成人精品照片| 欧美三级午夜理伦三级中视频| 欧美日韩国产天堂| 精品日本一线二线三线不卡| 国产欧美一区二区在线观看| 国产精品伦一区二区三级视频| 亚洲免费av在线| 视频一区免费在线观看| 国产精品一区二区久久精品爱涩| 国产aⅴ综合色| 欧美性生交片4| 欧美mv和日韩mv国产网站| 国产精品美日韩| 五月综合激情婷婷六月色窝| 精品一区二区影视| 91网上在线视频| 欧美一区二区三区小说| 国产亚洲精品中文字幕| 亚洲国产视频网站| 国产精品亚洲一区二区三区妖精| 91美女福利视频| 日韩精品一区二区三区蜜臀| 国产精品色哟哟| 亚洲成人激情自拍| 国产激情精品久久久第一区二区 | 欧美精品一区二区三区很污很色的 | 亚洲天天做日日做天天谢日日欢| 亚洲一区二区精品久久av| 精品一区二区三区不卡| 91免费观看视频| 精品欧美一区二区在线观看| 亚洲美女淫视频| 激情都市一区二区| 欧美色欧美亚洲另类二区| 国产天堂亚洲国产碰碰| 日韩黄色一级片| av欧美精品.com| 精品国产露脸精彩对白| 性做久久久久久久久| 丁香婷婷综合色啪| 91精品国产综合久久蜜臀| 国产精品久久久久久户外露出| 男女男精品网站| 91视频观看视频| 国产亚洲精品7777| 日韩av不卡在线观看| 色妹子一区二区| 久久久久久亚洲综合| 日韩和欧美一区二区三区| 色欧美日韩亚洲| 欧美激情中文不卡| 精品一区二区三区蜜桃| 3atv在线一区二区三区| 夜夜精品浪潮av一区二区三区| 国产91精品一区二区| 日韩一区二区在线观看视频 | 狠狠久久亚洲欧美| 欧美精品第1页| 亚洲已满18点击进入久久| 成人aa视频在线观看| 国产视频视频一区| 国产一区二区三区| 日韩精品中文字幕在线一区| 日韩制服丝袜av| 欧美性感一类影片在线播放| 国产精品国产三级国产aⅴ入口| 国产成人精品亚洲日本在线桃色| 日韩欧美一二三四区| 免费在线看成人av| 欧美放荡的少妇| 视频一区二区欧美| 制服丝袜成人动漫| 日韩黄色片在线观看| 欧美丰满美乳xxx高潮www| 亚洲成av人**亚洲成av**| 欧美私模裸体表演在线观看| 亚洲国产一区视频| 欧美美女喷水视频| 婷婷六月综合网| 制服丝袜av成人在线看| 免费美女久久99| 日韩欧美亚洲另类制服综合在线| 老司机一区二区| 精品欧美一区二区久久| 激情欧美一区二区三区在线观看| 久久久久成人黄色影片| 国产成人av一区二区三区在线 | aa级大片欧美| 亚洲视频免费看| 色88888久久久久久影院按摩| 一区二区三区精品| 欧美精品xxxxbbbb| 久久精品国产一区二区三| 久久久综合精品| 波多野结衣91| 亚洲高清免费视频| 日韩视频一区二区三区| 国产成人免费视频网站高清观看视频 | 亚洲综合在线电影| 欧美精品一级二级三级| 黑人精品欧美一区二区蜜桃 | 久久久久国产精品麻豆ai换脸| 国产成人小视频| 一区二区三区高清在线| 69av一区二区三区| 国产一区二区剧情av在线| 国产精品国产三级国产三级人妇| 色综合久久久久久久久| 日韩高清在线电影| 欧美韩国一区二区| 色菇凉天天综合网| 美腿丝袜亚洲三区| 国产精品久久久久aaaa| 欧美日韩专区在线| 国产在线国偷精品产拍免费yy| 18欧美亚洲精品| 欧美一区二区日韩一区二区| 国产成人在线网站| 日韩国产成人精品| 国产精品久久久久一区 | 中文字幕在线不卡一区二区三区| 欧美午夜精品一区二区三区| 精品在线播放免费| 一区二区三区四区亚洲| 精品国产sm最大网站免费看| 色欧美片视频在线观看在线视频| 免费成人在线观看视频| 18成人在线视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品久久久久三级| 91超碰这里只有精品国产| 国产成人午夜精品影院观看视频| 香蕉乱码成人久久天堂爱免费| 久久人人97超碰com| 欧美日韩另类一区| 99久久精品一区二区| 久久99精品久久久| 亚洲午夜激情av| 国产精品久久久久久久蜜臀 | 欧美精品一区二区在线播放|