msp430 launchpad 按键控制led亮灭

demo1

实现功能:按一下按键,led2变换一下亮灭状态。

#include <msp430.h> 

//这个宏仅针对8MHz
#define delay_us(us) __delay_cycles(8*(us))
#define delay_ms(ms) __delay_cycles(8000*(ms))


int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    BCSCTL1 = CALBC1_8MHZ;     //设置 DCO 频率为8MHz
    DCOCTL = CALDCO_8MHZ;

    P1DIR |= BIT6; //设置P1.0口为输出

    P1REN |= BIT3;//启用P1.3内部上下拉电阻
    P1OUT |= BIT3;//将电阻设置为上拉
    P1DIR &= ~(BIT3); // P1.3设为输入
    P1IES |= BIT3;// P1.3设为下降沿中断
    P1IE  |= BIT3 ;// 允许P1.3中断

    P1IFG &= ~BIT3;        //中断标志位清零

    _EI NT(); //开总中断

    return 0;
}


/*中断服务程序*/
#pragma vector = PORT1_VECTOR
__interrupt void PORT_1(void) {
    delay_ms(1);//消抖
    if((P1IN & BIT3) == 0){
        P1OUT ^= BIT6;
    }  
    P1IFG &= ~BIT3; //中断标志位清零
}

demo2

实现功能:快速按按键两次,led2变换一下亮灭状态。

#include <msp430.h> 

//这个宏仅针对8MHz
#define delay_us(us) __delay_cycles(8*(us))
#define delay_ms(ms) __delay_cycles(8000*(ms))

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    BCSCTL1 = CALBC1_8MHZ;     //设置 DCO 频率为8MHz
    DCOCTL = CALDCO_8MHZ;

    P1DIR |= BIT6; //设置P1.0口为输出

    P1REN |= BIT3; //启用P1.3内部上下拉电阻
    P1OUT |= BIT3; //将电阻设置为上拉
    P1DIR &= ~(BIT3); // P1.3设为输入
    P1IES |= BIT3; // P1.3设为下降沿中断
    P1IE |= BIT3; // 允许P1.3中断

    P1IFG &= ~BIT3;        //中断标志位清零

    _EINT(); //开总中断

    return 0;
}

/*中断服务程序*/
#pragma vector = PORT1_VECTOR
__interrupt void PORT_1(void) {
    delay_ms(1); //消抖
    while ((P1IN & BIT3) == 0)
        ; //P1.3低
    int times = 0;
    while ((P1IN & BIT3)) { //P1.3高
        times++;
        delay_ms(1);
        if (times > 120) {//说明只按了一次按键。此值自己多试几下
            goto exit_interrupt;
        }
    }
    P1OUT ^= BIT6;
    exit_interrupt: P1IFG &= ~BIT3; //中断标志位清零
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值