新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 獨立按鍵的長按與短按

        獨立按鍵的長按與短按

        作者: 時間:2016-11-26 來源:網絡 收藏
        按鍵掃描函數,支持按鍵長按短按,長按與短按的區別可以放到10ms的定時里面,根據需要設置判斷次數

        本文引用地址:http://www.104case.com/article/201611/321949.htm

        //按鍵處理函數
        //返回按鍵值
        //mode:0,不支持連續按;1,支持連續按;
        //0,沒有任何按鍵按下
        //1,KEY0按下
        //2,KEY1按下
        //3,KEY2按下
        //4,KEY3按下 WK_UP
        //注意此函數有響應優先級,KEY0>KEY1>KEY2>KEY3!!
        u8 Key_Scan(u8 mode)
        {
        static u8 key_up=1;//按鍵按松開標志
        if(mode)key_up=1;//支持連按
        if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
        {
        delay_ms(10);//去抖動
        key_up=0;
        if(KEY0==0)return KEY_RIGHT;
        else if(KEY1==0)return KEY_DOWN;
        else if(KEY2==0)return KEY_LEFT;
        else if(KEY3==1)return KEY_UP;
        }else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;
        return 0;// 無按鍵按下
        }


        //0,沒有任何按鍵按下
        //1,長按
        //2,短按

        u8 Key_long_short(void)
        {
        static u8 oldkey,newkey;
        static u8 keylongnum;
        static u8 keylongflag;
        u8 key;

        newkey = Key_Scan(1);

        if(newkey!=0)
        {
        if(oldkey==newkey)
        {

        keylongnum++;
        if(keylongnum>100)
        {
        keylongnum=0;
        keylongflag=1;
        key = 1;
        }

        }

        }
        else
        {

        if((oldkey!=0)&&(keylongflag!=1))
        {
        key = 2;
        }
        else
        {
        key = 0;
        }
        keylongnum=0;
        keylongflag=0;
        }
        oldkey=newkey;
        return(key);
        }



        關鍵詞: 獨立按鍵長按短

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新绛县| 福建省| 博兴县| 雅江县| 阿拉尔市| 九龙坡区| 鸡西市| 民丰县| 普安县| 浦县| 姚安县| 镇安县| 化隆| 佛学| 喀喇沁旗| 安化县| 普格县| 云安县| 吴堡县| 聂拉木县| 贵定县| 镇坪县| 九龙县| 沈丘县| 呼伦贝尔市| 惠来县| 诸暨市| 陇西县| 新乡市| 临漳县| 皋兰县| 黑山县| 册亨县| 满洲里市| 汉中市| 辽阳市| 晋江市| 宾川县| 永宁县| 双鸭山市| 长汀县|