您当前的位置:五五电子网电子知识单片机-工控设备MSP430单片机MSP430单片机按键中断程序 正文
MSP430单片机按键中断程序

MSP430单片机按键中断程序

点击数:7860 次   录入时间:03-04 11:41:11   整理:http://www.55dianzi.com   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 < 3; i++) 
    {                    
        P2OUT &= ~0x07;
        P1DIR |= 0x03; 
        P1OUT &= ~0x03;
        P1DIR &= ~0x03;
        P2OUT = RowMask;
        if (P1IN & 0x03) 
        {                      
            //是否有键按下
            KeyHex |= RowMask;
            //处理值
            KeyHex |= (P1IN & 0x03) << 4;
        }
        //下一行
        RowMask = RowMask << 1;
    }
    if (KeyHex == 0) 
    {                      
        //设置标志
        Error_Flags |= noKey;
    }
    P2OUT |= 0x07;
}

void KeyLookup(void)
{
    unsigned int i;
  
    //初始化值

[1] [2] [3]  下一页


本文关键字:单片机  程序  MSP430单片机单片机-工控设备 - MSP430单片机