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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

單片機(jī)檢測(cè)按鍵短擊,連擊c程序

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

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

相關(guān)文章

主站蜘蛛池模板: 一级毛片免费视频观看 | av手机免费在线观看 | 中文字幕在线观看视频一区 | 国产精品一区二区久久精品爱微奶 | 农村真人裸体丰满少妇毛片 | 午夜性视频 | 在线视频一区二区三区 | 国产成人jvid在线播放 | 成人精品一区亚洲午夜久久久 | 日韩中文字幕2019 | 狠狠爱免费视频 | 蜜桃视频在线观看免费视频网站www | www久久国产 | 国产精品日日做人人爱 | 粉嫩一区二区三区国产精品 | 久草青青草 | 亚洲精品一区国语对白 | 国内精品视频一区二区三区 | 国产探花 | 亚洲精品久久久久久久久久吃药 | 久久久久国产精品一区 | 国产视频精品免费 | 91欧美 | 欧美中国少妇xxx性高请视频 | 国产精品美女久久久久久免费 | av二区三区 | 黄a大片| 日韩国产在线观看 | www.4虎影院 国产999精品久久久影片官网 | 成年女人免费v片 | 中文字幕日韩一区 | 精品一区二区三区在线观看国产 | 中文字幕视频在线观看 | 欧美精品一区二区在线观看 | 91一区| 综合精品 | 日韩网站在线观看 | 日韩av一区二区在线观看 | 手机在线观看 | 插插宗合网 | 欧美激情亚洲天堂 |