jinger0311 发表于 2013-11-15 10:40:40

MSP430独立按键中断的问题

本帖最后由 jinger0311 于 2013-11-15 10:45 编辑

P4.4是一个开关按钮,当P4.4关的时候,关中断,另外三个中断按键是不起作用的。可是如果在P4.4关的时候按了其中一个中断按钮P1.3,打开P4.4的时候显示的内容为SdPage(Logo2)>>SdPage(Logo3)>>SdPage(Logo4),但是这个SdPage(Logo4)里面的内容是应该在开中断之后按下其中一个中断按钮才可以显示的,不明白明明在P4.4关的时候关中断了,开P4.4(中断)但是还没有按下任何中断按钮的时候会显示SdPage(Logo4)的内容。如果P4.4关的时候没有按其他中断键,就没有问题。下面是我的程序,请各位大神帮忙:


#include <MSP430x14x.h>
#include <intrinsics.h>
#include <cry242a.h>

uchar num=0;
uchar aa;
void main(void)
{
   WDTCTL=WDTPW+WDTHOLD;
   Clock_Init();
   contrl();
   light();
   dataport();
   delayms(10);         // wait for LCD module power on reset
   LCD_init();
   delayms(1);
   P1DIR &= ~BIT4;   //P1.4为输入
   P1IE|= 0x0f;      //低四位中断允许
   P1IES |= 0x0f;      //选择下降沿
   P1IFG &= 0x00;      //中断标志清零
   while(1)
   {
   if ((P1IN&BIT4)==BIT4)
   {
       SdPage(Logo1);
       aa= 1;
       num = 0;
       _DINT();
   }
   else
   {      
       SdPage(Logo2);
       aa= 0;            
       delayms(1000);
       SdPage(Logo3);
       _EINT();
       num = 0;
   }
   while((P1IN&BIT4)==aa);
   }
   
}
   

#pragma vector = PORT1_VECTOR
__interrupt void KEY (void)
{
   if ((P1IFG&BIT3)==BIT3)
   {
   if (num<12)
   {
       num++;
   }   
   P1IFG &= ~BIT3;
   }
   else if ((P1IFG&BIT2)==BIT2)
   {
   if (num>0)
   {
       num--;
   }
   P1IFG &= ~BIT2;
   }
   else if ((P1IFG&BIT1)==BIT1)
   {
   num = 0;
   P1IFG &= ~BIT1;
   }
   switch (num)
   {
   case 0 : SdPage(Logo3); break;
   case 1 : SdPage(Logo4); break;
   case 2 : SdPage(Logo5); break;
   case 3 : SdPage(Logo6); break;
   case 4 : SdPage(Logo7); break;
   case 5 : SdPage(Logo8); break;
   case 6 : SdPage(Logo9); break;
   case 7 : SdPage(Logo10); break;
   case 8 : SdPage(Logo11); break;
   case 9 : SdPage(Logo12); break;
   case 10 : SdPage(Logo13); break;
   case 11 : SdPage(Logo14); break;
   case 12 : SdPage(Logo15); break;
   default : break;
   }
}

34071417 发表于 2013-11-18 11:47:48

光的时候,清其他位的中断标志位
页: [1]
查看完整版本: MSP430独立按键中断的问题