qq_43965285
紧擦菊菊长
采纳率64.3%
2019-08-07 23:35 阅读 1.0k

单片机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++;
       }

    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    qq_44050118 小猪JB 2019-08-08 10:11

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

    点赞 评论 复制链接分享
  • zaq15csdn greatofdream 2019-08-08 10:10

    程序进了CLO()还能出来吗?看样子你的按键也不是写的中断,那进了CLO后应该没办法离开处理其它逻辑了。

    点赞 评论 复制链接分享
  • d1278 d1278 2019-08-08 13:03

    按钮消抖,
    while(1)
    {
    }
    死了。

    点赞 评论 复制链接分享

相关推荐