if((P1IN&temp)==(!temp))

2019-07-15 15:57发布

#include <msp430g2553.h>
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  unsigned long int i;
  P2DIR = 0XfF;
  P2OUT = 0Xff;
  P1DIR = 0xf0;    // All pins but button to output
  P1OUT = 0xfF;
  P1IES = 0x0f;     // Button int on falling edge
  P1IFG = 0;
  P1IE = 0x0f;      // enable P1.0--P1_3 interrupt
  _EINT();          // 开总中断
  while(1)
  //_BIS_SR(LPM4_bits); // 进入低功耗模式4
  {
    i=500000;
    P2OUT ^=0X01;
    while(i--);
  }
}

#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void) // 键盘中断
{
  unsigned int i;
  unsigned char temp;
  temp = P1IFG;
  for(i=0;i<0x1fff;i++);         // 消抖
//if((P1IN&temp)==(!temp))
  //{
    switch(temp)
    {
      case 1: P2OUT ^=0X01;break; //P2.0状态改变,即LED1状态改变
      case 2: P2OUT ^=0X02;break; //P2.1状态改变,即LED2状态改变
      case 4: P2OUT ^=0X04;break; //P2.2状态改变,即LED3状态改变
      case 8: P2OUT ^=0X08;break; //P2.3状态改变,即LED4状态改变
    }
//}
  P1IFG = 0;      // 清除中断请求位
}

其中的  if((P1IN&temp)==(!temp))  去掉行吗,如果不能的话,为什么?谢谢大神

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。