新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機之矩陣鍵盤

        單片機之矩陣鍵盤

        作者: 時間:2012-09-05 來源:網絡 收藏

        下面是一個stc89c52下的程序,P0口接,顯示在P2口.

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

        #includereg52.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit key1=P3^2;
        sbit key2=P3^3;
        uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定義八個燈的工作狀態。
        uchar code wep[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
        void yanshi(uint t)
        {
        while(--t);
        }


        void main()
        {

        uchar han,lei,key;
        while(1)
        {
        P0=0xf0; //初始化為開關狀態。11110000
        han=P0; //han變量讀取P0口的值。第一次掃描
        han=han0xf0; //對han變量與0xf0與.
        //如果結果等于P0口初值(0xf0)說明沒有鍵被按下.
        //如果結果不等于P0(0xf0)口初值,說明有鍵按下.
        if(han!=0xf0)
        yanshi(125*5); //延時消抖.
        if(han!=0xf0) //語句執行到這里說明真的有鍵按下.
        { //例如按下S1鍵.則P0=1110 0000
        lei=P00xf0; //lei讀取P0口的值.
        lei=lei|0x0f; //lei=11101111
        P0=lei; //P0=11101111
        han=P0; //han=11101110 第二次掃描鍵盤,
        //因為這里按鍵S1還是閉合的狀態。
        han=han0x0f; //han=00001110
        lei=lei0xf0; //lei=11100000
        key=han+lei;
        }
        switch(key)
        {
        case 0xee: P2=tab[0]; break;
        case 0xde: P2=tab[1]; break;
        case 0xbe: P2=tab[2]; break;
        case 0x7e: P2=tab[3]; break;
        case 0xed: P2=tab[4]; break;
        case 0xdd: P2=tab[5]; break;
        case 0xbd: P2=tab[6]; break;
        case 0x7d: P2=tab[7]; break;
        case 0xeb: P2=tab[8]; break;
        case 0xdb: P2=tab[9]; break;
        case 0xbb: P2=tab[10]; break;
        case 0x7b: P2=tab[11]; break;
        case 0xe7: P2=tab[12]; break;
        case 0xd7: P2=tab[13]; break;
        case 0xb7: P2=tab[14]; break;
        case 0x77: P2=tab[15]; break;
        }
        }

        }

        DIY機械鍵盤相關社區:機械鍵盤DIY




        關鍵詞: 鍵盤 矩陣 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乌什县| 永州市| 夏河县| 福州市| 永登县| 镇平县| 麻江县| 沭阳县| 德庆县| 大埔县| 积石山| 杂多县| 天镇县| 邢台市| 石河子市| 阳泉市| 望都县| 行唐县| 和政县| 彰化县| 定结县| 梁山县| 松原市| 怀柔区| 汕头市| 鹤岗市| 榆林市| 高邮市| 砚山县| 交城县| 贺州市| 定兴县| 永春县| 察雅县| 古交市| 射阳县| 徐州市| 襄樊市| 沙坪坝区| 峨眉山市| 包头市|