msp430实现按键一次加一,这里实现的是按一次顺序灯亮

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011123091/article/details/52792388

使用msp430f5529a,,seed公司开发的开发板。如果你的也是直接下载程序即可。只贴程序。

#include <msp430.h>
int sum=0,num=0;
void main(void)
{

  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
  P1DIR=0XFF;
  P1OUT=0X00;
  P2OUT|=BIT2;
  P2REN|=BIT2;
  P2IES|=BIT2;
  P2IE|=BIT2;
  P2IFG=0X00;
  P8DIR|=BIT1;
  __enable_interrupt();//开总中断
  while(1){
      num=sum%5;
      switch(num){
      case 0:P1OUT=BIT1;break;
      case 1:P1OUT=BIT2;break;
      case 2:P1OUT=BIT3;break;
      case 3:P1OUT=BIT4;break;
      case 4:P1OUT=BIT5;break;
      }

  }

}
#pragma vector=PORT2_VECTOR
  __interrupt void PORT2_ISR(void){
     volatile unsigned long int i;//volatile关键字是必须使用的,如果不加会被编译器优化而不能执行
           if((P2IN&0xff)!=0xff){
               for(i=10000;i>0;i--);//如果i太大会显得不灵敏,自己可以调节一下
               if((P2IN&0xff)!=0xff){//if再次判断
                   if(P2IFG&BIT2){//如果是按键按下则sum++,并软件清楚中断标志
                            sum++;
                            P2IFG=0X00;
                        }
               }
              while(!(P2IN&BIT2));//等待被按下的过程
               for(i=12000;i>0;i--);//松开按键去抖动
           }
  }

猜你喜欢

转载自blog.csdn.net/u011123091/article/details/52792388