新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 2個I/O 口檢測6個按鍵

        2個I/O 口檢測6個按鍵

        作者: 時間:2016-11-25 來源:網絡 收藏
        今天看到了用2個I/O口來檢測6個按鍵的方法,確實很霸道,特傳上來和大家一起分享。
        原理圖如下:


        分析:
        首先:IO1,IO2輸出高電平
        S1按下,IO2為低電平
        S2按下,IO1為低電平
        S3按下,IO1,IO2為0.7V(1N4148導通電壓),還是低電平。
        現在開始判別其他幾個按鍵了:
        1、IO1輸出低電平,讀IO2電平
        如果IO2為低電平,此時應該是S4或者S6按下(S6按下時,IO2為0.7V,依舊是低電平)。
        此時IO1輸出高電平,IO2輸出低電平,讀IO1電平
        當S4按下時,IO1為低電平。剩余的就只能是S6了。
        2、IO1輸出高電平,IO2輸出低電平
        讀IO1,S5按下時,IO1為低電平。若IO1依舊為高電平,則是S6按下了。

        按鍵掃描程序:
        unsignedcharscan_key(void)
        {
        unsignedcharkeyval=0;//無鍵,有鍵1~6

        KEY_IO1=1;//釋放總線
        KEY_IO2=1;//釋放總線

        if(!KEY_IO1&&!KEY_IO2)
        keyval=3;//S3
        elseif(!KEY_IO1)
        keyval=2;//S2
        elseif(!KEY_IO2)
        keyval=1;//S1
        else
        {
        //開始掃描,也要考慮小毛賊的問題~~~
        KEY_IO1=0;//掃描
        if(!KEY_IO2)
        {
        //這時不能立即判定S4/S6
        KEY_IO1=1;//釋放總線
        KEY_IO2=0;//反向掃描
        if(!KEY_IO1)
        keyval=4;//S4~~~
        else
        keyval=6;//S6
        }
        else
        {
        //只能是S5了
        KEY_IO1=1;//釋放總線
        KEY_IO2=0;//反向掃描

        if(!KEY_IO1)
        keyval=5;//S5
        //elsekeyval=6;//S6//上面已判出了S6,這句是廢話
        }
        KEY_IO1=1;//釋放總線//已經釋放~~~
        KEY_IO2=1;//釋放總線
        }
        returnkeyval;//返回鍵值0-無鍵,1~6-S1~S6鍵
        }

        程序流程圖:

        由于演示圖片是動態的,此處無法進行演示。



        關鍵詞: IO口檢測按

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 六枝特区| 六安市| 南通市| 三江| 咸丰县| 贡山| 定安县| 玛沁县| 高尔夫| 大洼县| 应城市| 北碚区| 徐闻县| 平阴县| 鄱阳县| 涿州市| 托克逊县| 文安县| 玉溪市| 六安市| 米脂县| 定远县| 开鲁县| 沙河市| 衡阳市| 元朗区| 湘潭市| 宁强县| 平遥县| 应城市| 普定县| 刚察县| 通化市| 安乡县| 忻城县| 海南省| 常德市| 罗山县| 靖安县| 浦东新区| 泰兴市|