新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)驅(qū)動矩陣按鍵與獨立按鍵源代碼

        單片機(jī)驅(qū)動矩陣按鍵與獨立按鍵源代碼

        作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏

        void delay(uint xms)
        {
        uint i, j;
        for(i = xms; i > 0; i--)
        for(j = 125; j > 0; j--);
        }

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


        void keyscan()
        {
        if(key1 == 0)
        {
        delay(5);
        if(key1 == 0)
        {
        fm = 0;
        key = 0;
        while(!key1);
        delay(5);
        while(!key1);
        fm = 1;
        }
        }


        if(key2 == 0)
        {
        delay(5);
        if(key2 == 0)
        {
        fm = 0;
        key++;
        while(!key2);
        delay(5);
        while(!key2);
        fm = 1;
        }
        }


        if(key3 == 0)
        {
        delay(5);
        if(key3 == 0)
        {
        fm = 0;
        key--;
        while(!key3);
        delay(5);
        while(!key3);
        fm = 1;
        }
        }


        }
        void max_kanscan()
        {

        P3 = 0xfe;
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {
        delay(5);
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {//按鍵檢測
        temp = P3;
        fm = 0;
        switch(temp)
        {
        case 0xee: key = 1 * 1 *1;
        break;
        case 0xde: key = 2 * 2 *2;
        break;
        case 0xbe: key = 3 * 3 *3;
        break;
        case 0x7e: key = 4 * 4 *4;
        break;
        default:
        break;
        }
        //按鍵釋放
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        delay(5);
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        fm = 1;
        }
        }


        P3 = 0xfd;
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {
        delay(5);
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {//按鍵檢測
        temp = P3;
        fm = 0;
        switch(temp)
        {
        case 0xed: key = 5 * 5 *5;
        break;
        case 0xdd: key = 6 * 6 *6;
        break;
        case 0xbd: key = 7 * 7 *7;
        break;
        case 0x7d: key = 8 * 8 *8;
        break;
        default:
        break;
        }
        //按鍵釋放
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        delay(5);
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        fm = 1;
        }
        }


        P3 = 0xfb;
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {
        delay(5);
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {//按鍵檢測
        temp = P3;
        fm = 0;
        switch(temp)
        {
        case 0xeb: key = 9 * 9 *9;
        break;
        case 0xdb: key = 10 * 10 *10;
        break;
        case 0xbb: key = 11 * 11 *11;
        break;
        case 0x7b: key = 12 * 12 *12;
        break;
        default:
        break;
        }
        //按鍵釋放
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        delay(5);
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        fm = 1;
        }
        }


        P3 = 0xf7;
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {
        delay(5);
        temp = P3;
        temp &= 0xf0;
        if(temp != 0xf0)
        {//按鍵檢測
        temp = P3;
        fm = 0;
        switch(temp)
        {
        case 0xe7: key = 13 * 13 *13;
        break;
        case 0xd7: key = 14 * 14 *14;
        break;
        case 0xb7: key = 15 * 15 *15;
        break;
        case 0x77: key = 16 * 16 *16;
        break;
        default:
        break;
        }
        //按鍵釋放
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        delay(5);
        while(temp != 0xf0)
        {
        temp = P3;
        temp &= 0xf0;
        }
        fm = 1;
        }
        }

        }


        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 隆安县| 商河县| 峨山| 天门市| 湖口县| 黔南| 巨野县| 工布江达县| 江安县| 榆树市| 肇源县| 宣恩县| 萨迦县| 吉木萨尔县| 东丰县| 乌拉特后旗| 建平县| 托克托县| 航空| 宝鸡市| 仙游县| 广灵县| 和静县| 辰溪县| 大同市| 中山市| 巴林右旗| 礼泉县| 上栗县| 和田市| 阳西县| 天津市| 台南市| 恩施市| 蓝田县| 扶风县| 寿阳县| 陈巴尔虎旗| 泰安市| 南木林县| 永登县|