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

MSP430单片机按键中断程序

点击数:7860 次   录入时间:03-04 11:41:11   整理:http://www.55dianzi.com   MSP430单片机
    KeyPressed = 99;
    for (i = 0; i < 6; i++) 
    {                     
        //查表
        if (KeyTab[i] == KeyHex) 
        {             
            KeyPressed = i; 
        }
    }
    if (KeyPressed == 99) 
    {                  
        //没有找到值
        //设置标志
        Error_Flags |= noMatch;
    }
}

void SetupForRelease(void)
{
    //设置方向
    P1DIR |= 0x03;
    P1OUT |= 0x03;
    //键被按下
    Trans_Flags |= hELDDown;
}

void DetermineRelease(void)
{
    //设置输入下拉
    P1OUT &= ~0x03;
    P1DIR &= ~0x03; 
    if (P1IN & 0x03) 
    {
        SetupForRelease(); 
    } 
    else 
    {
        Trans_Flags &= ~heldDown;
    }
}

void Transmit(void)
{
    unsigned int i;
    
    //得到命令码
    Command = FuncTab[KeyPressed];
    //增加两个位的起始位
    Command = Command + 0x3000; 
    if (Trans_Flags & toggle) 
    {               
        // 切换位
        Command = Command + 0x0800;
    }
    
    //左移
    Command = Command << 2; 
    
    //CCR1 PWM参数
    TACCR1 = 7;
    //使能CCR0中断
    TACCTL0 = CCIE;
    for (i=0; i < 14; i++) 
    {        
        //判断是1还是0
        if (Command & 0x8000) 
        {
            //先发送780us的低
            OutputLow(780);                      
            //然后高,记数32个中断
            OutputHigh(32); 
        } 
        else 
        {
            //先高,记数35个中断
            OutputHigh(35);                      
            OutputLow(765);
        }
        //下一个位
        Command = Command << 1;
    }
    //停止并清除TA
    TACTL = TACLR;
}

unsigned int TestRetransmit(void)
{
    //P1是否有输入
    if (P1IFG == 0) 
    {
        //没有输入的情况下
        return RETRANSMIT;
    } 
    else 
    {    
        //有输入的情况下
        //是否有按键按下
        DetermineRelease();
        if (Trans_Flags & heldDown) 
        {          
            //有的情况下
            return RETRANSMIT;
        } 
        else 
        { 
            // 没有的情况下,返回主程序
            //清除CCTL0寄存器
            TACCTL0 = 0;
            //清除CCTL1寄存器
            TACCTL1 = 0;
            //清除切换位
            Trans_Flags &= ~toggle;
            return ENDTRANSMIT;
        }
    }
}

void DelayToNextTransmit(void)
{
    //SMCLK/8 清除TA
    TACTL = TASSEL1+TACLR+ID0+ID1; 
    //89ms的中断
    TACCR0 = 11125 - 1;
    //使能CCR0中断
    TACCTL0 = CCIE; 
    //TA开始UP模式
    TACTL |= MC0;
    //延时
    LPM0;

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


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