MSP430单片机按键中断程序

描述

#include "IRRemote.h" 


void main(void) 

    //初始化 
    Initialize();                            

//死循环 
    while(1) 
    { 
        unsigned int transmit; 
        //初始化变量 
        transmit = ENDTRANSMIT; 
        //等待按键按下 
        SetForPress(); 
        //进入LPM4模式 
        LPM4; 
         
        Debounce();  
        //扫描键盘 
        KeySCAN();  
        //键盘处理 
        KeyLookup();  
        if (Error_Flags == 0)  
        {                  
            //有键按下的情况 
            SetupForRelease(); 
            do  
            {  
                //传输数据(RC5码) 
                Transmit(); 
                 
                transmit = TestRetransmit(); 
                //延时 
                DelayToNextTransmit();  
            } while (transmit == RETRANSMIT); 
        } 
    } 


void Initialize(void) 

    //停止看门狗 
    WDTCTL = WDTPW+WDTHOLD; 
    //P2口为输出 
    P2DIR = 0xFF; 
    //P2.3为TA1功能管脚 
    P2SEL = 0x08; 
    //清除P2口的输出 
    P2OUT = 0; 
    //设置DCO频率为1MHz 
    DCOCTL = CALDCO_1MHZ; 
    BCSCTL1 = CALBC1_1MHZ; 
    //使能中断 
    _EINT();  


void SetForPress(void) 

    //P1.0和P1.1为输入 
    P1DIR = 0xFC; 
    //清除P1口的输出,下拉 
    P1OUT = 0; 
    //使能P1.0和P1.1的电阻 
    P1REN |= 0x03;  
    //使能键盘 
    P2OUT |= 0x07;  
    //低到高中断方式 
    P1IES &= ~0x03; 
    //清除中断标志 
    P1IFG = 0; 
    //使能中断 
    P1IE |= 0x03; 
    //清除错误标志 
    Error_Flags = 0; 
    //清除传输标志 
    Trans_Flags = 0; 


void Debounce(void) 

    //SMCLK/8,清除TA 
    TACTL = TASSEL1+TACLR+ID0+ID1; 
    //使能CCR0中断 
    TACCTL0 = CCIE;  
    //设置延时的值 
    TACCR0 = 5000 - 1;  
    //开始UP模式 
    TACTL |= MC0; 
    //进入LPM0模式 
    LPM0; 
    //停止并清除TA 
    TACTL = TACLR; 
    //清除CCTL0寄存器 
    TACCTL0 = 0; 


void KeyScan(void) 

    unsigned int i; 
     
    //初始化行 
    RowMask = 0x01; 
    KeyHex = 0; 
    //清除行的值 
    P1OUT &= ~0x03;  
     
    for (i=0; i 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分