新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何實現矩陣鍵盤自由靈活控制數碼管顯示數字

        如何實現矩陣鍵盤自由靈活控制數碼管顯示數字

        作者: 時間:2016-11-18 來源:網絡 收藏
        矩陣鍵盤 能實現 多個按鍵 連接少量I/O口, 矩陣鍵盤,按下一個鍵 即可 使 數碼管顯示相應數字
        #include
        unsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x10};
        unsigned char t=0;
        unsigned char i=0;
        void Delay(unsigned char i)
        {
        unsigned char j;
        for(; i>0; i--)
        for(j=110; j>0; j--);
        }
        void DisplayLED(unsigned char n)
        {
        P0=table[n];
        }
        void Keycan() //判斷 矩陣鍵盤是否被按下
        {
        unsigned char tmp, key;
        P2=0xfe; //第四列
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        Delay(10); //
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        tmp=P2;
        switch(tmp)
        {
        case 0xee: TR0=1; // 啟動定時器T0
        break;
        case 0xde: key=8; //
        break;
        case 0xbe: key=4; /
        break;
        }
        while(tmp!=0xf0)
        {
        tmp=P2;
        tmp=tmp&0xf0;
        }
        if(tmp!=0xee)
        {
        DisplayLED(key);
        }
        }
        }
        P2=0xfd; //第三列
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        Delay(10); //
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        tmp=P2;
        switch(tmp)
        {
        case 0xed: TR0=0, key=i; // 停止定時器T0
        break;
        case 0xdd: key=7; //
        break;
        case 0xbd: key=3; //
        break;
        }
        while(tmp!=0xf0)
        {
        tmp=P2;
        tmp=tmp&0xf0;
        }
        DisplayLED(key);
        }
        }
        P2=0xfb; //第二列
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        Delay(10); //
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        tmp=P2;
        switch(tmp)
        {
        case 0xeb: key=0 ; //
        break;
        case 0xdb: key=6; //
        break;
        case 0xbb: key=2; //
        break;
        }
        while(tmp!=0xf0)
        {
        tmp=P2;
        tmp=tmp&0xf0;
        }
        DisplayLED(key);
        }
        }
        P2=0xf7; //第一列
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        Delay(10); //
        tmp=P2;
        tmp=tmp&0xf0;
        if(tmp!=0xf0)
        {
        tmp=P2;
        switch(tmp)
        {
        case 0xe7: key=9 ; //
        break;
        case 0xd7: key=5; /
        break;
        case 0xb7: key=1; //
        break;
        }
        while(tmp!=0xf0)
        {
        tmp=P2;
        tmp=tmp&0xf0;
        }
        DisplayLED(key);
        }
        }
        }
        void main()
        {
        TMOD=0x01;
        EA=1;
        ET0=1;
        TR0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        while(1)
        {
        Keycan();
        if(t==20)
        {
        t=0;
        P0=table[i];
        Delay(1000);
        i++;
        if(i==10)
        {
        i=0;
        }
        }
        }
        }
        void TimerLED() interrupt 1 using 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岳普湖县| 贵州省| 东乡族自治县| 定安县| 井研县| 营口市| 成安县| 那曲县| 泗阳县| 平江县| 伽师县| 南通市| 衢州市| 平邑县| 洪湖市| 华蓥市| 云安县| 涟水县| 铁岭市| 南和县| 彰化市| 乃东县| 桂林市| 藁城市| 琼中| 丹江口市| 安吉县| 石家庄市| 大厂| 登封市| 潼关县| 平潭县| 内江市| 嘉定区| 都安| 扎鲁特旗| 塘沽区| 宁河县| 建平县| 泗洪县| 滕州市|