msp430 launchpad 按键控制led亮灭

来源:互联网 发布:图文直播系统源码 编辑:程序博客网 时间:2024/05/16 11:56

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; //中断标志位清零}
0 0
原创粉丝点击