[求助] launchpad 按键控制LED

279827164   2012-7-9 09:30 楼主
void main( void )
{

  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
    P1DIR |= BIT0 | BIT6;  //俩灯配置为输出
    P1DIR &= ~BIT3;     //键盘配置为输入
    P1OUT |= BIT0 | BIT6 ;  // 先点亮亮灯
    P1REN |= BIT3;         
    P1OUT |= BIT3;          //配置为上拉
   
    for(;;)
    {
        if((P1IN & BIT3) == 0)
        {
            delay_ms(10);   //消抖
            if((P1IN & BIT3) == 0)
            {
               P1OUT ^= BIT0 | BIT6;
            }
            while(~(P1IN & BIT3));  //等待松开按键
        }
    }
}
 

 

为什么老是卡在while这一步

[ 本帖最后由 279827164 于 2012-7-9 09:33 编辑 ]

回复评论 (7)

问题解决了。。

点赞  2012-7-9 09:54
P1IN的BIT3位是1,P1IN&BIT3是0x08,取反的话,得到的结果是0xf7,不是0,
。。所以应该改成 while((P1IN & BIT3) == 0);  
这个是51和MSP写法的区别吧。。
点赞  2012-7-9 09:55
 你那个P1REN 是什么寄存器?    求教  
点赞  2012-7-18 12:44

回复 4楼 曾小开 的帖子

那是上拉电阻,不设置的话按键不能用
点赞  2012-7-18 14:48
请问,按键不用时是不是处于高电平?
点赞  2012-7-25 16:38
void main()
{WDTCTL=WDTPW+WDTHOLD;
P1DIR|=0x41;                      //这里已经设置了只有P1.0和P1.6是输出,那么下边P1DIR&=~BIT3;是不是就可以不写了呢?????
P1OUT|=0xff;                       //在这里如果设置了为oxff,那么下边P1OUT|=BIT3;这句也可以不要的吧??!
//  P1DIR&=~BIT3;   
  P1REN|=BIT3;
// P1OUT|=BIT3;                 //这里的这句
  for(;;)
    {
        if((P1IN & BIT3) == 0)
        {
            delay_ms(10);   //消抖
            if((P1IN & BIT3) == 0)
            {
               P1OUT ^= BIT0 | BIT6;
            }
            while((P1IN & BIT3)==0);  //等待松开按键
        }
    }
}


修改的部分已经过验证,可以运行,求正解!!!
点赞  2012-7-26 22:03
我找 这个 很久了  谢谢lz
点赞  2012-7-31 17:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复