在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430 按鍵程序范例(附原理圖)

            MSP430 按鍵程序范例(附原理圖)

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

            void Init_Port(void)
            {
            //將P1口所有的管腳在初始化的時候設置為輸入方式
            P1DIR = 0;

            //將P1口所有的管腳設置為一般I/O口
            P1SEL = 0;

            // 將P1.4 P1.5 P1.6 P1.7設置為輸出方向
            P1DIR |= BIT4;
            P1DIR |= BIT5;
            P1DIR |= BIT6;
            P1DIR |= BIT7;

            本文引用地址:http://www.biyoush.com/article/201611/316574.htm

            //先輸出低電平
            P1OUT = 0x00;

            // 將中斷寄存器清零
            P1IE = 0;
            P1IES = 0;
            P1IFG = 0;
            //打開管腳的中斷功能
            //對應的管腳由高到低電平跳變使相應的標志置位
            P1IE |= BIT0;
            P1IES |= BIT0;
            P1IE |= BIT1;
            P1IES |= BIT1;
            P1IE |= BIT2;
            P1IES |= BIT2;
            P1IE |= BIT3;
            P1IES |= BIT3;
            _EINT();//打開中斷
            return;
            }
            void Delay(void)
            {
            int i;
            for(i = 100;i--;i > 0) ;//延時一點時間
            }
            int KeyProcess(void)
            {
            int nP10,nP11,nP12,nP13;
            int nRes = 0;
            //P1.4輸出低電平
            P1OUT &= ~(BIT4);
            nP10 = P1IN & BIT0;
            if (nP10 == 0) nRes = 13;
            nP11 = P1IN & BIT1;
            if (nP11 == 0) nRes = 14;
            nP12 = P1IN & BIT2;
            if (nP12 == 0) nRes = 15;
            nP13 = P1IN & BIT3;
            if (nP13 == 0) nRes = 16;
            //P1.5輸出低電平
            P1OUT &= ~(BIT4);
            nP10 = P1IN & BIT0;
            if (nP10 == 0) nRes = 9;
            nP11 = P1IN & BIT1;
            if (nP11 == 0) nRes = 10;
            nP12 = P1IN & BIT2;
            if (nP12 == 0) nRes = 11;
            nP13 = P1IN & BIT3;
            if (nP13 == 0) nRes = 12;
            //P1.6輸出低電平
            P1OUT &= ~(BIT4);
            nP10 = P1IN & BIT0;
            if (nP10 == 0) nRes = 5;
            nP11 = P1IN & BIT1;
            if (nP11 == 0) nRes = 6;
            nP12 = P1IN & BIT2;
            if (nP12 == 0) nRes = 7;
            nP13 = P1IN & BIT3;
            if (nP13 == 0) nRes = 8;
            //P1.7輸出低電平
            P1OUT &= ~(BIT4);
            nP10 = P1IN & BIT0;
            if (nP10 == 0) nRes = 1;
            nP11 = P1IN & BIT1;
            if (nP11 == 0) nRes = 2;
            nP12 = P1IN & BIT2;
            if (nP12 == 0) nRes = 3;
            nP13 = P1IN & BIT3;
            if (nP13 == 0) nRes = 4;

            P1OUT = 0x00;//恢復以前值。

            //讀取各個管腳的狀態(tài)
            nP10 = P1IN & BIT0;
            nP11 = P1IN & BIT1;
            nP12 = P1IN & BIT2;
            nP13 = P1IN & BIT3;
            for(;;)
            {
            if(nP10 == 1 && nP11 == 1 && nP12 == 1 && nP13 == 1)
            {
            //等待松開按鍵
            break;
            }
            }
            return nRes;
            }
            // 處理來自端口 1 的中斷
            interrupt [PORT1_VECTOR] void PORT_ISR(void)
            {
            Delay();
            KeyProcess();
            if(P1IFG & BIT0)
            {
            P1IFG &= ~(BIT0);// 清除中斷標志位
            }
            if(P1IFG & BIT1)
            {
            P1IFG &= ~(BIT1);// 清除中斷標志位
            }
            if(P1IFG & BIT2)
            {
            P1IFG &= ~(BIT2);// 清除中斷標志位
            }
            if(P1IFG & BIT3)
            {
            P1IFG &= ~(BIT3);// 清除中斷標志位
            }
            }
            void Init_CLK(void)
            {
            unsigned int i;
            BCSCTL1 = 0X00;//將寄存器的內容清零
            //XT2震蕩器開啟
            //LFTX1工作在低頻模式
            //ACLK的分頻因子為1

            do
            {
            IFG1 &= ~OFIFG; // 清除OSCFault標志
            for (i = 0x20; i > 0; i--);
            }
            while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1

            BCSCTL2 = 0X00;//將寄存器的內容清零
            BCSCTL2 += SELM1;//MCLK的時鐘源為TX2CLK,分頻因子為1
            BCSCTL2 += SELS;//SMCLK的時鐘源為TX2CLK,分頻因子為1
            }



            關鍵詞: MSP430按鍵程

            評論


            技術專區(qū)

            關閉