新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 矩陣鍵盤掃描程序

        矩陣鍵盤掃描程序

        作者: 時間:2016-11-11 來源:網絡 收藏

        #include
        #define uint unsigned int
        #define uchar unsigned char
        uchar temp,key=16;
        sbit duan=P2^6;
        sbit wei=P2^7;
        sbit led0=P1^0;
        sbit led1=P1^1;

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

        uchar code table[]=
        {0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0x00};
        void display(uchar);
        uchar scan_key();
        void delay(uchar);

        void main()
        {
        wei=1;
        P0=0x00;
        wei=0;//位全選通

        while(1)
        {
        display(scan_key());
        }
        }

        void display(uchar x)
        {

        duan=1;
        P0=table[x];
        duan=0;
        }

        uchar scan_key()
        {
        P3=0xfe; //檢測第一橫排
        temp=P3;
        while(temp!=0xfe)
        {
        delay(20);
        while(temp!=0xfe) //防抖檢測
        {
        switch(temp)
        {
        case 0xee:{key=0;led0=0;break;}
        case 0xde:{key=1;led1=0;break;}
        case 0xbe:{key=2;break;}
        case 0x7e:{key=3;break;}
        default:break;

        }
        while(temp!=0xfe) //松手檢測
        {
        temp=P3;
        }
        }

        }

        P3=0xfd; //檢測第二橫排
        temp=P3;
        while(temp!=0xfd)
        {
        delay(20);
        while(temp!=0xfd)
        {
        switch(temp)
        {
        case 0xed:{key=4;break;}
        case 0xdd:{key=5;break;}
        case 0xbd:{key=6;break;}
        case 0x7d:{key=7;break;}
        default:break;

        }
        while(temp!=0xfd)
        {
        temp=P3;
        }
        }

        }

        P3=0xfb; //檢測第三橫排
        temp=P3;
        while(temp!=0xfb)
        {
        delay(20);
        while(temp!=0xfb)
        {
        switch(temp)
        {
        case 0xeb:{key=8;break;}
        case 0xdb:{key=9;break;}
        case 0xbb:{key=10;break;}
        case 0x7b:{key=11;break;}
        default:break;

        }
        while(temp!=0xfb)
        {
        temp=P3;
        }
        }

        }

        P3=0xf7; //檢測第4橫排
        temp=P3;
        while(temp!=0xf7)
        {
        delay(20);
        while(temp!=0xf7)
        {
        switch(temp)
        {
        case 0xe7:{key=12;break;}
        case 0xd7:{key=13;break;}
        case 0xb7:{key=14;break;}
        case 0x77:{key=15;break;}
        default:break;

        }
        while(temp!=0xf7)
        {
        temp=P3;
        }
        }

        }


        return key;


        }

        void delay(uchar x)
        {
        uchar i,j;
        for(i=0;ifor(j=0;j<255;j++);
        }



        關鍵詞: 矩陣鍵盤掃描程

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 四子王旗| 府谷县| 独山县| 兰溪市| 浦东新区| 灵寿县| 梓潼县| 辽阳县| 沅江市| 翁源县| 岗巴县| 儋州市| 精河县| 邮箱| 同仁县| 印江| 甘洛县| 安乡县| 邵武市| 平原县| 信丰县| 本溪市| 华亭县| 故城县| 乌鲁木齐县| 鄂伦春自治旗| 平乡县| 大足县| 富蕴县| 云浮市| 健康| 平原县| 孝感市| 刚察县| 阜新| 侯马市| 荣成市| 银川市| 芮城县| 云和县| 彰武县|