紧擦菊菊长 2019-08-07 23:35 采纳率: 100%
浏览 1156
已采纳

单片机MSP430怎么通过按键点灯啊

我想不按键的时候LED2灯(对应P1.6引脚)亮,LED1灯(对应P1.0引脚)灭。
按下按键后两灯互换状态并延迟30s左右,再复位。

程序已经写好了,但不知道哪里出了点问题,不能实现我这个功能,帮忙看一下,谢谢!

#include <msp430g2553.h>

void main(void)
{
    WDTCTL=WDTPW+WDTHOLD;
    P1OUT &= ~BIT0;                     //设置p1.0输出置地
    P1OUT |= BIT6;                     //设置p1.6输出置高
    P1OUT &= ~BIT0;                     //设置p1.0输出置地
    P1DIR |= BIT6;                      //设置p1.6为输入
    P1DIR &= ~BIT3;                     //设置p1.3为输入
    P1REN |= BIT3;                      //使能内部电阻
    P1OUT|=BIT3;                        //电阻上拉
    int CLO();

RE_2: while(1)
{
    switch(P1IN & BIT3)
    {
    case 0:
        {
            P1OUT |= BIT0;              //p1.0开灯
            P1OUT &= ~BIT6;            //p1.6关灯
            CLO();
            P1OUT &= ~BIT0;              //p1.0关灯
            P1OUT |= BIT6;            //p1.6开灯
            break;
        }
    case 1:break;
    }
    goto RE_2;
}

}

int CLO()                     //延迟30s
{
    int i=1;
    while(1)
    {
    while(i<60)               //12 *5s=60s
       {
              __delay_cycles(500000);   //5s
              i++;
       }

    }
}
  • 写回答

4条回答 默认 最新

  • 小猪JB 2019-08-08 10:11
    关注

    建议先写个初始化函数,然后按键按下设置一个标志位,通过判断标志位来控制引脚,不过看你好像没有加消抖...最好加个消抖吧! 而且你CLO()里面有一个死循环,跳不出去的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?