機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MSP430 按鍵程序范例
MSP430 按鍵程序范例
 更新時間:2010-1-28 11:22:03  點擊數(shù):0
【字體: 字體顏色

#i nclude <msp430x14x.h>
void Init_Port(void)
{
    //將P1口所有的管腳在初始化的時候設(shè)置為輸入方式
    P1DIR = 0;
 
    //將P1口所有的管腳設(shè)置為一般I/O口
    P1SEL = 0;
   
    // 將P1.4 P1.5 P1.6 P1.7設(shè)置為輸出方向
    P1DIR |= BIT4;
    P1DIR |= BIT5;
 P1DIR |= BIT6;
    P1DIR |= BIT7;

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

 // 將中斷寄存器清零
    P1IE = 0;
    P1IES = 0;
    P1IFG = 0;
    //打開管腳的中斷功能
 //對應(yīng)的管腳由高到低電平跳變使相應(yīng)的標志置位
    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;//恢復(fù)以前值。

 //讀取各個管腳的狀態(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;   //將寄存器的內(nèi)容清零
     //XT2震蕩器開啟
     //LFTX1工作在低頻模式
     //ACLK的分頻因子為1
    
    do
    {
 IFG1 &= ~OFIFG;                       // 清除OSCFault標志
 for (i = 0x20; i > 0; i--);               
    }
    while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1  
    
    BCSCTL2 = 0X00;   //將寄存器的內(nèi)容清零
    BCSCTL2 += SELM1;  //MCLK的時鐘源為TX2CLK,分頻因子為1
    BCSCTL2 += SELS;  //SMCLK的時鐘源為TX2CLK,分頻因子為1
}


 


 
 

 

  • 上一篇: 支持鍵盤雙擊事件的C程序設(shè)計
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1