標(biāo)題: 利用單片機(jī)AD轉(zhuǎn)換做按鍵掃描,識(shí)別按鍵單鍵,雙鍵長(zhǎng)按短按。(兩個(gè)按鍵同時(shí)按下) [打印本頁(yè)]

作者: 742624689    時(shí)間: 2019-5-29 15:25
標(biāo)題: 利用單片機(jī)AD轉(zhuǎn)換做按鍵掃描,識(shí)別按鍵單鍵,雙鍵長(zhǎng)按短按。(兩個(gè)按鍵同時(shí)按下)
用一個(gè)IO口就可以識(shí)別多個(gè)按鍵,這里以兩個(gè)按鍵為例。
1.可以識(shí)別S1和S2單擊
2.識(shí)別S1和S2同時(shí)按下
3.S1和S2同時(shí)長(zhǎng)按
電路圖:
P2外接串聯(lián)led燈,用來調(diào)試按鍵效果


按鍵程序代碼如下:
void keyscan()
{
        if(AD_value>100)                //如果有任意按下
        {
                if(key1&&!key_lock)
                {
                        pre_kvalue=1;                //保存鍵值
                }
                else if(key2&&!key_lock)
                {
                        pre_kvalue=2;                //保存鍵值
                }
                if(key12&&pre_kvalue!=4)                                //雙鍵按下。完成長(zhǎng)按操作視為判斷結(jié)束
                {
                        key_lock=1;                        //當(dāng)按下雙鍵時(shí),不再判斷單鍵是否按下
                        pre_kvalue=3;                //保存雙鍵按下鍵值
                        if(key_count>150)                //長(zhǎng)按1.5秒
                        {
                                pre_kvalue=4;                        //保存雙鍵長(zhǎng)按鍵值
                                key_count=0;                //長(zhǎng)按計(jì)數(shù)清零
                        }
                }
        }
        else if(AD_value<100)                //等待全部按鍵彈起,執(zhí)行相關(guān)按鍵指令
        {
                mode_choice();                        //執(zhí)行對(duì)應(yīng)按鍵的指令
                key_lock=0;                                        //雙鍵標(biāo)志位清零
                key_count=0;                                //長(zhǎng)按計(jì)數(shù)清零

        }
}

完整程序代碼和電路圖已經(jīng)打包好。大家一起學(xué)習(xí)交流

全部資料51hei下載地址:
AD按鍵掃描.zip (221.62 KB, 下載次數(shù): 109)

作者: hz532    時(shí)間: 2019-11-27 09:21
好好學(xué)習(xí)

作者: a461624201    時(shí)間: 2021-12-4 03:05
試試看,AD電壓采集需要的IO少.




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1