关于430用C编写一个中断的程序不知道哪里有问题,大神帮忙看一下

2019-07-15 16:21发布

#include <msp430x14x.h>
#include "config.h"
void key_process_0(void);
void key_process_1(void);
void key_process_2(void);
void key_process_3(void);
void key_check(void);
uint key_value=0x00;

void main()
{
   WDT_Init();                        
   Clock_Init();                       
   Port_init();
   delay_ms(100);
   key_value=0x00;
   _EINT();
   LPM3;
   while(1){
   P1IE &=~0x0f;
   P1IFG &=~0x0f;
   key_check();
   if(key_value==0x01)
   {
      key_process_0();
   }
   if(key_value==0x02)
   {
      key_process_1();
   }
   if(key_value==0x03)
   {
      key_process_2();
   }
   if(key_value==0x04)
   {
      key_process_3();
   }
   key_value=0x00;
   P1IE |=0x0f;
   P1IFG &=~0x0f;
   LPM3;
   }
}
void key_check(void)
{
  delay_ms(100);
  if(0xff!=P1IN|0xf0)   
  {
    while(0xff!=P1IN|0xf0);
  }
  else
  {
    key_value=0x00;
  }
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT_1(void)
{
  switch(P1IFG&0x0f)
  {
    case 0x01:key_value=0x01;
    break;
    case 0x02:key_value=0x02;
    break;
    case 0x04:key_value=0x03;
    break;
    case 0x08:key_value=0x04;
    break;
  default:P1IFG=0x00;
  break;
  }
  P1IFG &=~0x0f;
  LPM3_EXIT;
}
void key_process_0(void)
{
  P6OUT &=~BIT0;
  delay_ms(1000);
  P6OUT |=BIT0;
  delay_ms(1000);
  P6OUT &=~BIT0;
  delay_ms(1000);
  P6OUT |=BIT0;
}
void key_process_1(void)
{
  P6OUT &=~BIT1;
  delay_ms(1000);
  P6OUT |=BIT1;
  delay_ms(1000);
  P6OUT &=~BIT1;
  delay_ms(1000);
  P6OUT |=BIT1;
}

void key_process_2(void)
{
  P6OUT &=~BIT2;
  delay_ms(1000);
  P6OUT |=BIT2;
  delay_ms(1000);
  P6OUT &=~BIT2;
  delay_ms(1000);
  P6OUT |=BIT2;
}

void key_process_3(void)
{
  P6OUT &=~BIT3;
  delay_ms(1000);
  P6OUT |=BIT3;
  delay_ms(1000);
  P6OUT &=~BIT3;
  delay_ms(1000);
  P6OUT |=BIT3;
}
希望对应的按键按下时对应LED亮起,无按键时进入低功耗模式,出现中断再唤醒

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