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

单片机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条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料