新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430單片機矩陣鍵盤測試程序

        MSP430單片機矩陣鍵盤測試程序

        作者: 時間:2016-11-13 來源:網絡 收藏
        #include <msp430x14x.h>

        unsigned char keybuff[10];
        unsigned char keypoint=0;

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

        void delay(int v)
        {
        while(v!=0)v--;
        }

        unsigned char key(void)
        {
        unsigned char x=0xff;
        P1DIR=0X0F;
        P1OUT=0X01; //掃描第一行
        if((P1IN&0X70)==0X10)
        x=0;
        else
        if((P1IN&0X70)==0X20)
        x=1;
        else
        if((P1IN&0X70)==0x40)
        x=2;
        else
        {
        P1OUT=0X2; //掃描第二行
        if((P1IN&0X70)==0X10)
        x=3;
        else
        if((P1IN&0X70)==0X20)
        x=4;
        else
        if((P1IN&0X70)==0x40)
        x=5;
        else
        {
        P1OUT=0X4; //掃描第三行
        if((P1IN&0X70)==0X10)
        x=6;
        else
        if((P1IN&0X70)==0X20)
        x=7;
        else
        if((P1IN&0X70)==0x40)
        x=8;
        else
        {P1OUT=8; //掃描第四行
        if((P1IN&0X70)==0X10)
        x=9;
        else
        if((P1IN&0X70)==0X20)
        x=10;
        else
        if((P1IN&0X70)==0x40)
        x=11;
        }
        }
        }
        return(x);
        }


        unsigned char keyj(void)
        {unsigned char x;
        P1DIR=0x0f;
        P1OUT=0x0f; //鍵盤硬件:P10--P13為行線,最上面一根為P10
        x=(P1IN&0X70); // P14--P16為列線,最左邊一根為P14,列線下拉
        return(x); // 無按鍵,返回 0?; 有按鍵返回 非0
        }


        interrupt[PORT1_VECTOR] void port1key(void)
        {
        if(keyj()!=0X00)
        {
        delay(300) ; //消抖動
        if(keyj()!=0X0)
        {
        keybuff[keypoint]=key(); //按鍵見鍵值保存到隊列
        keypoint++; //
        if(keypoint==10)
        keypoint=0;
        }
        }
        P1OUT=0X0F;
        P1IFG=0X0; //清除中斷標志
        }

        void main(void)
        {
        WDTCTL = WDTPW + WDTHOLD; /* // Stop WDT */
        P1DIR=0XF;
        P1OUT=0XF;
        P1IES=0X0;
        P1IE=0X70; //列線上升沿允許P1中斷
        _EINT(); /*/ Enable interrupts */

        while(1)
        {

        LPM0;
        _NOP();

        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 忻州市| 全南县| 万全县| 东莞市| 平湖市| 乌兰浩特市| 宿松县| 宜良县| 房产| 延津县| 白河县| 温泉县| 凤城市| 五大连池市| 南阳市| 扶沟县| 福建省| 新竹县| 平武县| 永顺县| 乌海市| 吉木萨尔县| 崇明县| 贵阳市| 绍兴市| 汉中市| 会同县| 昭苏县| 五常市| 南部县| 曲周县| 庆云县| 洛南县| 清苑县| 闸北区| 奉贤区| 黄石市| 津市市| 梁河县| 台中县| 澜沧|