久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機檢測按鍵短擊,連擊c程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月07日   【字體:
/****************************************************************************/
//文 件 名:key.c
//功    能:短擊\連擊
//調用方法:unsigned char keyValue = ReadKey();
//說    明:該程序不適用于陣列鍵盤.
//        該程序不需要使用定時器.
// 調用處要加入switch語句來判斷相應按鍵按下并執行相應動作.
// 如需要在按鍵松開后執行動作,則調用函數需要定義一個bit標志位,在default語句里判斷標志位狀態.
// KEY_WOBBLE_TIME 指程序程序執行次數.實際應用中要根據程序的長短來調整成合適的數值.
//                   
//備    注:程序思路是當按鍵被按下時開始計算程序的執行次數,如小于KEY_WOBBLE_TIME,則認為按鍵沒有被按下.
// 引用自http://www.rupeng.com/forum/thread-12239-1-1.html,略做更改. 
// KEIL編譯時會提示WARNING C291: not every exit path returns a value.不影響使用.
// 如有朋友發現問題所在請聯系我.                  
/****************************************************************************/
#include <reg52.h>
#define KEY_IO P1             //按鍵所連的IO口
#define NO_KEY_VALUE 0xf      //當按鍵沒有被按下時IO口的值
#define KEY_WOBBLE_TIME 150   //去抖動時間(待定)
#define KEY_OVER_TIME 500     //等待進入連擊時間(待定),該常數要比正常 
                                   //按鍵時間要長,防止非目的性進入連擊模式
#define KEY_QUICK_TIME 200   //等待按鍵抬起的連擊時間(待定)
typedef unsigned char uchar;
typedef unsigned int uint;

uchar  ReadKey(){                            //判斷哪個鍵被按下
     static uchar lastKey = NO_KEY_VALUE ;
    static uint  keyCount = 0;
    static uint  keyOverTime = KEY_OVER_TIME;
    uchar  keyTemp = NO_KEY_VALUE ;
    keyTemp = KEY_IO & NO_KEY_VALUE ;        //讀取鍵值
     if(keyTemp == NO_KEY_VALUE ){           //無按鍵按下時
         keyCount = 0;
        keyOverTime = KEY_OVER_TIME;
        return NO_KEY_VALUE ;
     }else{                                 //有按鍵按下時
          if(keyTemp==lastKey){
            if(++keyCount == KEY_WOBBLE_TIME){ //不是第1次按下判斷抖動是否結束
                   return keyTemp;               //去抖結束,返回鍵值
              }else{
                if(keyCount>keyOverTime){
                    keyCount = 0;
                    keyOverTime = KEY_QUICK_TIME;
                }
                return NO_KEY_VALUE ;
            }
         }else{         //是第1次按下則保存鍵值,下次執行此函數時與讀到的鍵值作比較
               lastKey = keyTemp ;    //保存第1次讀到的鍵值
               keyCount = 0;          //延時計數器清零
               keyOverTime = KEY_OVER_TIME ;
             return NO_KEY_VALUE ;
         }
    }
}
///////////////////////////////////////////////////////////////////////////////////
以上程序例子我用三個按鍵連在P1^0,P1^1,P1^2,使用中根據實際需要更改
KEY_IO P1 , NO_KEY_VALUE ,KEY_WOBBLE_TIME , KEY_OVER_TIME 500,
#define KEY_QUICK_TIME 200 .
如只需要判斷單擊,把判斷連擊的代碼刪除即可.
拋磚引玉^^
關閉窗口

相關文章

主站蜘蛛池模板: 欧美电影在线观看网站 | 超碰伊人久久 | 欧美日韩一区精品 | 欧美一二三 | 91精品国产91综合久久蜜臀 | 国产色网 | 超碰91在线 | 国产一区二区三区四区区 | 亚洲精品久久久久中文字幕欢迎你 | 日韩三级电影在线看 | 色久在线 | 中文字幕av网 | 91精品国产91久久久久久密臀 | 国产一区在线视频 | 亚洲一区免费视频 | 日韩视频在线播放 | 久久不射电影网 | 日韩高清成人 | 日本在线视频一区二区 | 羞羞视频在线网站观看 | 一级a性色生活片久久毛片 一级特黄a大片 | 国产1区 | 求个av网址| a级黄色毛片免费播放视频 国产精品视频在线观看 | 中国毛片免费 | 久久亚洲国产 | 99re在线| 91极品欧美视频 | 在线看片国产精品 | 98久久| 蜜桃av鲁一鲁一鲁一鲁 | 国产丝袜人妖cd露出 | 国产黄色一级电影 | 日韩国产在线 | 欧美日韩不卡 | 九九亚洲 | 成人精品免费视频 | 久草新在线 | 久久看看 | 国产乱码精品一区二区三区中文 | 97av |