• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430 按鍵程序 (含電路圖及源代碼)

    MSP430 按鍵程序 (含電路圖及源代碼)

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

    #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;

    //先輸出低電平
    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;//恢復以前值。

    //讀取各個管腳的狀態
    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 按鍵程序

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 旬邑县| 封开县| 石首市| 临潭县| 江门市| 同德县| 葫芦岛市| 西峡县| 平阳县| 桂林市| 庆城县| 石嘴山市| 安多县| 三亚市| 柘城县| 甘泉县| 云南省| 壶关县| 龙海市| 日喀则市| 榆树市| 苏尼特右旗| 石河子市| 五莲县| 齐齐哈尔市| 临城县| 从江县| 麟游县| 舞阳县| 苏尼特右旗| 宝清县| 剑阁县| 湖州市| 易门县| 兴安盟| 渑池县| 乡宁县| 屏东市| 甘谷县| 东方市| 红安县|