新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430單片機 矩陣鍵盤與數碼管實驗

        MSP430單片機 矩陣鍵盤與數碼管實驗

        作者: 時間:2016-11-22 來源:網絡 收藏
        #include "msp430x44x.h"

        #define ROW P2OUT //矩陣鍵盤的行宏定義
        #define COL P2IN //矩陣鍵盤的列宏定義
        #define DPYOUT P3OUT //數碼管輸出口宏定義
        unsigned char keyval; //鍵值

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

        //共“陽”極數碼管的碼表
        unsigned char LED7CA[] ={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,
        ~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71,0xff};


        unsigned char keyscan()
        {
        int i=0;
        unsigned char key=0;
        ROW = 0x8f; //先置三行輸出低電平
        if((COL & 0x0f)!= 0x0f) //是否有按鍵
        {
        do i++;
        while(i<3000); //消抖動延時
        ROW = 0xbf; //掃描第一行
        if((COL & 0x0f)== 0x0f)
        { ROW = 0xdf; //掃描第二行
        if((COL & 0x0f)== 0x0f)
        { ROW = 0xef; //掃描第三行
        if((COL & 0x0f)== 0x0f)
        key = 15;
        else key = ~((ROW & 0XF0)|(COL & 0X0F));
        }
        else key = ~((ROW & 0XF0)|(COL & 0X0F));
        }
        else key = ~((ROW & 0XF0)|(COL & 0X0F));
        if(key != 15)
        switch(key) //獲取有效地鍵值
        { case 0x48: key=0; break;
        case 0x44: key=1; break;
        case 0x42: key=2; break;
        case 0x41: key=3; break;
        case 0x28: key=4; break;
        case 0x24: key=5; break;
        case 0x22: key=6; break;
        case 0x21: key=7; break;
        case 0x18: key=8; break;
        case 0x14: key=9; break;
        case 0x12: key=10;break;
        case 0x11: key=11;break;
        default: key=15;
        }
        }
        else key = 15;
        keyval=key;
        return key;
        }


        void main( void )
        {
        // Stop watchdog timer to prevent time out reset
        WDTCTL = WDTPW + WDTHOLD;
        P3DIR |= 0xff;
        P3OUT = 0xff; //共陽極數碼管輸出口初始化
        P2DIR |= BIT4 +BIT5+BIT6; //先配置矩陣鍵盤的行(輸出)
        //P2.6 第一行,P2.5 第二行,P2.4 第三行
        //P2.3 第一列,P2.2 第二列,P2.1 第三列,P2.0 第四列
        keyval=16;
        while(1)
        { keyscan();
        if(keyval != 15 && keyval<17)
        DPYOUT = LED7CA[keyval];//數碼管顯示鍵值
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 盐源县| 凤山市| 阿巴嘎旗| 东乌珠穆沁旗| 东城区| 青州市| 武功县| 宽甸| 自贡市| 射阳县| 鹤山市| 绥宁县| 凤翔县| 察雅县| 龙井市| 沿河| 牙克石市| 三台县| 纳雍县| 福海县| 乌兰县| 东乌珠穆沁旗| 海口市| 仁怀市| 乐平市| 土默特右旗| 特克斯县| 聂拉木县| 商水县| 稷山县| 张掖市| 江北区| 光泽县| 高邑县| 惠水县| 邮箱| 焉耆| 大渡口区| 福安市| 柳州市| 成安县|