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 编辑 ]
此帖出自
小平头技术问答
。。所以应该改成 while((P1IN & BIT3) == 0);
这个是51和MSP写法的区别吧。。
{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); //等待松开按键
}
}
}
修改的部分已经过验证,可以运行,求正解!!!
一周热门 更多>