機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MSP430 按鍵程序范例(附原理圖)
MSP430 按鍵程序范例(附原理圖)
 更新時(shí)間:2008-7-27 15:59:31  點(diǎn)擊數(shù):4
【字體: 字體顏色

#i nclude <msp430x14x.h>
void Init_Port(void)
{
    //將P1口所有的管腳在初始化的時(shí)候設(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)的標(biāo)志置位
    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) ;//延時(shí)一點(diǎn)時(shí)間
}
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ù)以前值。

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

 

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

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

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

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