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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? key.c

?? FREESCALE 16位單片機片MC9S12DG128的鍵盤驅動程序,鍵盤緩沖區大小可設,支持按鍵的快加快減操作
?? C
?? 第 1 頁 / 共 2 頁
字號:
    while (KeyHit()) {                           /* While there are keys in the buffer...              */
        KeyGetKey();                            /* ... extract the next key from the buffer           */
    }
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                  GET HOW LONG KEY HAS BEEN PRESSED
*
* Description : This function returns the amount of time the key has been pressed.
* Arguments   : none
* Returns     : key down time in 'milliseconds'
*********************************************************************************************************
*/

INT32U  KeyGetKeyDownTime (void)
{
    INT16U tmr;

    tmr = KeyDownTmr;
    return (tmr * KEY_SCAN_TASK_DLY);
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                        SEE IF ANY KEY IN BUFFER
*
* Description : This function checks to see if a key was pressed
* Arguments   : none
* Returns     : TRUE   if a key has been pressed
*               FALSE  if no key pressed
*********************************************************************************************************
*/

BOOLEAN  KeyHit (void)
{
    BOOLEAN hit;

    hit = (BOOLEAN)(KeyNRead > 0) ? TRUE : FALSE;
    return (hit);
}

/*
*********************************************************************************************************
*                                       KEYBOARD INITIALIZATION
*
* Description: Keyboard initialization function.  KeyInit() must be called before calling any other of
*              the user accessible functions.
* Arguments  : none
* Returns    : none
*********************************************************************************************************
*/

void  KeyInit (void)
{
    KeyScanState = KEY_STATE_UP;                 /* Keyboard should not have a key pressed             */
    KeyNRead     = 0;                            /* Clear the number of keys read                      */
    KeyDownTmr   = 0;
    KeyBufInIx   = 0;                            /* Key codes inserted at  the beginning of the buffer */
    KeyBufOutIx  = 0;                            /* Key codes removed from the beginning of the buffer */
    DDRP = 0x02;      	
   	DDRJ = 0x00;       

}





/*$PAGE*/
/*
*********************************************************************************************************
*                                           SEE IF KEY PRESSED
*
* Description : This function checks to see if a key is pressed
* Arguments   : none
* Returns     : TRUE   if a key is     pressed
*               FALSE  if a key is not pressed
* Note        : (1 << KEY_MAX_COLS) - 1   is used as a mask to isolate the column inputs (i.e. mask off
*                                         the SHIFT keys).
*********************************************************************************************************
*/

static  BOOLEAN  KeyIsKeyDown (void)
{ 
   
    INT8U temp1,temp2;
     temp1 = PTIJ&0xC0;
     temp2 = PTIP&0xBC;
    if (temp1 == 0) 
    {
       
      if(temp2 == 0x04) 
      {
        KeyDownTmr++;
        return (TRUE);   
      } 
      else if (temp2 == 0x08) 
      {
        KeyDownTmr++;
        return (TRUE);  
      }
      else if (temp2 == 0x10) 
      {
        KeyDownTmr++;
        return (TRUE);  
      }
      else if(temp2 == 0x20) 
      {
        KeyDownTmr++;
        return (TRUE);  
      }
      else if(temp2 == 0x80) 
      {
        KeyDownTmr++;
        return (TRUE);  
      } 
      else 
      {
        return (FALSE);   
      }
        
    } 
    else if(temp2 == 0)
    {
      if(temp1 == 0x40) 
      {
        KeyDownTmr++;                                      /* Update key down counter                  */
        return (TRUE);  
      }else if(temp1 == 0x80) 
      {
        KeyDownTmr++;                                      /* Update key down counter                  */
        return (TRUE);   
      } else 
      {
         return (FALSE);   
      }
         
    }

    
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                         KEYBOARD SCANNING TASK
*
* Description : This function contains the body of the keyboard scanning task.  The task should be
*               assigned a low priority.  The scanning period is determined by KEY_SCAN_TASK_DLY.
* Arguments   : 'data'   is a pointer to data passed to task when task is created (NOT USED).
* Returns     : KeyScanTask() never returns.
* Notes       : - An auto repeat of the key pressed will be executed after the key has been pressed for
*                 more than KEY_RPT_START_DLY scan times.  Once the auto repeat has started, the key will
*                 be repeated every KEY_RPT_DLY scan times as long as the key is pressed.  For example,
*                 if the scanning of the keyboard occurs every 50 mS and KEY_RPT_START_DLY is set to 40
*                 and KEY_RPT_DLY is set to 2, then the auto repeat function will engage after 2 seconds
*                 and will repeat every 100 mS (10 times per second).
*********************************************************************************************************
*/

/*$PAGE*/
static  void  KeyScanTask (void *data)
{
    INT8U code;

			 data = data;  
        switch (KeyScanState) {
            case KEY_STATE_UP:                             /* See if need to look for a key pressed    */
                 if (KeyIsKeyDown()) {                     /* See if key is pressed                    */
                     KeyScanState = KEY_STATE_DEBOUNCE;    /* Next call we will have debounced the key */
                     KeyDownTmr   = 0;                     /* Reset key down timer                     */
                 }
                 break;

            case KEY_STATE_DEBOUNCE:                       /* Key pressed, get scan code and buffer    */
                 if (KeyIsKeyDown()) {                     /* See if key is pressed                    */
                     code              = KeyDecode();      /* Determine the key scan code              */
                     KeyBufIn(code);                       /* Input scan code in buffer                */
                     KeyRptStartDlyCtr = KEY_RPT_START_DLY;/* Start delay to auto-repeat function      */
                     KeyScanState      = KEY_STATE_RPT_START_DLY;
                 } else {
                     KeyScanState      = KEY_STATE_UP;     /* Key was not pressed after all!           */
                 }
                 break;

            case KEY_STATE_RPT_START_DLY:
                 if (KeyIsKeyDown()) {                     /* See if key is still pressed              */
                     if (KeyRptStartDlyCtr > 0) {          /* See if we need to delay before auto rpt  */
                         KeyRptStartDlyCtr--;              /* Yes, decrement counter to start of rpt   */
                         if (KeyRptStartDlyCtr == 0) {     /* If delay to auto repeat is completed ... */
                             code         = KeyDecode();   /* Determine the key scan code              */
                             KeyBufIn(code);               /* Input scan code in buffer                */
                             KeyRptDlyCtr = KEY_RPT_DLY;   /* Load delay before next repeat            */
                             KeyScanState = KEY_STATE_RPT_DLY;
                         }
                     }
                 } else {
                     KeyScanState = KEY_STATE_DEBOUNCE;    /* Key was not pressed after all            */
                 }
                 break;

            case KEY_STATE_RPT_DLY:
                 if (KeyIsKeyDown()) {                     /* See if key is still pressed              */
                     if (KeyRptDlyCtr > 0) {               /* See if we need to wait before repeat key */
                         KeyRptDlyCtr--;                   /* Yes, dec. wait time to next key repeat   */
                         if (KeyRptDlyCtr == 0) {          /* See if it's time to repeat key           */
                             code         = KeyDecode();   /* Determine the key scan code              */
                             KeyBufIn(code);               /* Input scan code in buffer                */
                             KeyRptDlyCtr = KEY_RPT_DLY;   /* Reload delay counter before auto repeat  */
                         }
                     }
                 } else {
                     KeyScanState = KEY_STATE_DEBOUNCE;    /* Key was not pressed after all            */
                 }
                 break;
        }

 //復位鍵盤掃描定時器      
 TmrReset (KEYSCAN_TIMER);
 //重新啟動鍵盤掃描定時器
 TmrStart (KEYSCAN_TIMER);
}



void KeyScanTimerInit(void)
{
	//配置鍵盤掃描定時器                    
    TmrCfgFnct(KEYSCAN_TIMER, KeyScanTask, NULL);      //config the function.
    //設定鍵盤掃描時間為50ms
	TmrSetT(KEYSCAN_TIMER, 1);	
    //啟動鍵盤掃描計時器
    TmrStart (KEYSCAN_TIMER);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费久久| 韩国精品主播一区二区在线观看| 午夜精品久久久久久久久久久| 国内偷窥港台综合视频在线播放| 99精品视频一区| 欧美电影免费观看高清完整版在| 一区二区三区四区不卡在线| 风间由美一区二区三区在线观看| 3d动漫精品啪啪一区二区竹菊| 最近中文字幕一区二区三区| 精品亚洲porn| 欧美一区二区在线免费播放| 亚洲一区二区在线免费观看视频| 成人午夜免费视频| 久久蜜臀中文字幕| 美女视频一区在线观看| 欧美日韩精品专区| 一区二区三区在线观看国产 | 国产色产综合色产在线视频| 视频一区二区不卡| 欧美性xxxxx极品少妇| 亚洲欧美日韩在线不卡| av中文字幕在线不卡| 日本一区二区三区免费乱视频| 麻豆成人久久精品二区三区小说| 欧美日韩一卡二卡三卡| 一区二区欧美精品| 欧美羞羞免费网站| 性久久久久久久| 在线播放91灌醉迷j高跟美女 | 欧美日精品一区视频| 一区二区在线观看av| 日本久久一区二区三区| 一区二区三区不卡视频在线观看 | 国产成人h网站| 国产欧美一区二区精品婷婷 | 欧美日韩国产小视频在线观看| 亚洲精品视频在线| 在线观看成人免费视频| 午夜精品久久久久影视| 欧美一区2区视频在线观看| 日韩电影在线看| 欧美成人a在线| 国产一区二区三区四区五区美女 | 欧美变态口味重另类| 国产一区在线观看视频| 国产亚洲精品bt天堂精选| 丰满少妇久久久久久久| 中文字幕日韩av资源站| 欧美在线免费播放| 久久精品国产99国产| 国产精品无遮挡| 一本色道久久综合精品竹菊| 亚洲 欧美综合在线网络| 日韩免费高清电影| 成人精品视频一区二区三区尤物| 国产精品久久久久久久久动漫 | 久久国产精品露脸对白| 国产无人区一区二区三区| 91国产丝袜在线播放| 日韩二区三区在线观看| 国产精品丝袜一区| 欧美日韩国产高清一区| 国产精品一区在线| 一区二区三区在线观看视频| 精品少妇一区二区三区在线播放 | 国产精品99久久不卡二区| 亚洲精品欧美二区三区中文字幕| 日韩情涩欧美日韩视频| jiyouzz国产精品久久| 日韩av一区二区在线影视| 国产色一区二区| 欧美一区二区三区视频免费播放 | 国模大尺度一区二区三区| 亚洲精品中文字幕乱码三区| 欧美成人精精品一区二区频| 色哟哟欧美精品| 国产黄色成人av| 日本免费新一区视频| 亚洲视频一区二区在线观看| 26uuu亚洲| 欧美精品三级在线观看| 成人av在线资源网站| 久久99精品久久久久久动态图| 一区二区三区在线免费观看| 国产女人aaa级久久久级| 欧美一区二区久久| 欧美性猛片aaaaaaa做受| 成人一道本在线| 国产一区二区三区免费观看| 日日噜噜夜夜狠狠视频欧美人 | 久久综合国产精品| 欧美色网一区二区| 91亚洲精品久久久蜜桃网站| 国产伦理精品不卡| 久久国产日韩欧美精品| 亚洲一区av在线| 亚洲女同ⅹxx女同tv| 中文字幕+乱码+中文字幕一区| 欧美疯狂性受xxxxx喷水图片| 色综合一个色综合| 99久久夜色精品国产网站| 国产suv精品一区二区三区| 久久99精品一区二区三区三区| 日日骚欧美日韩| 日本在线观看不卡视频| 婷婷久久综合九色综合绿巨人| 一区二区在线免费观看| 亚洲视频一二三| 亚洲一区中文日韩| 一二三区精品视频| 亚洲午夜在线电影| 亚洲国产综合91精品麻豆| 亚洲综合999| 亚洲成人免费在线| 日韩中文字幕亚洲一区二区va在线| 玖玖九九国产精品| 日本女人一区二区三区| 久久99热国产| 国产成人免费视| thepron国产精品| 色欧美日韩亚洲| 欧美日韩视频在线观看一区二区三区 | 国产精品福利一区二区| 亚洲免费观看高清完整版在线观看 | 综合av第一页| 亚洲午夜精品久久久久久久久| 亚洲成人免费观看| 毛片不卡一区二区| 国产高清精品久久久久| 成人app软件下载大全免费| 91九色02白丝porn| 日韩一区二区视频在线观看| 精品久久久网站| 中文字幕一区二区三区在线不卡 | 欧美日韩一区二区三区高清| 欧美区视频在线观看| 精品久久国产字幕高潮| 国产精品网站在线播放| 亚洲一区二三区| 另类欧美日韩国产在线| 国产精品77777| 欧美最新大片在线看| 欧美变态tickling挠脚心| 国产精品国产自产拍高清av王其| 亚洲综合男人的天堂| 精品一区二区三区免费观看| www.成人在线| 欧美一区二区精美| 亚洲码国产岛国毛片在线| 蜜桃视频一区二区三区在线观看| 国产成人精品三级| 欧美日高清视频| 国产精品免费视频一区| 免费成人美女在线观看| 成人免费黄色在线| 91精品国产色综合久久不卡蜜臀| 国产精品午夜在线观看| 日本不卡在线视频| aaa亚洲精品| 久久久蜜臀国产一区二区| 亚洲第一成人在线| 成人国产电影网| 欧美一级淫片007| 伊人开心综合网| 国产91清纯白嫩初高中在线观看| 欧美久久久久中文字幕| 综合激情成人伊人| 粉嫩av亚洲一区二区图片| 欧美一级生活片| 午夜欧美视频在线观看| 99re成人在线| 亚洲国产精品国自产拍av| 美女视频一区二区三区| 欧美精品xxxxbbbb| 亚洲一本大道在线| 色噜噜久久综合| 综合久久综合久久| 成人免费观看av| 国产色婷婷亚洲99精品小说| 久久成人18免费观看| 91精品国产一区二区三区| 国产精品一区二区三区网站| 欧美色手机在线观看| 一区二区三区中文在线观看| 99精品视频一区| 国产精品不卡一区二区三区| 国产黑丝在线一区二区三区| 亚洲精品在线观看视频| 麻豆成人久久精品二区三区红| 欧美日本国产视频| 亚洲永久免费av| 欧美一级片在线| 在线精品视频免费观看| 亚洲精品亚洲人成人网在线播放| 国产日韩影视精品| 91麻豆精品91久久久久久清纯 | 日韩欧美色综合网站| 午夜激情一区二区三区| 欧美视频中文一区二区三区在线观看|