P4.4是一个开关按钮,当P4.4关的时候,关中断,另外三个中断按键是不起作用的。可是如果在P4.4关的时候按了P1.3,打开P4.4的时候显示的内容为SdPage(**2)>>SdPage(**3)>>SdPage(**4),不明白明明在P4.4关的时候关中断了,开P4.4的时候会显示SdPage(**4)的内容。如果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(**1);
aa = 1;
num = 0;
_DINT();
}
else
{
SdPage(**2);
aa = 0;
delayms(1000);
SdPage(**3);
_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(**3); break;
case 1 : SdPage(**4); break;
case 2 : SdPage(**5); break;
case 3 : SdPage(**6); break;
case 4 : SdPage(**7); break;
case 5 : SdPage(**8); break;
case 6 : SdPage(**9); break;
case 7 : SdPage(**10); break;
case 8 : SdPage(**11); break;
case 9 : SdPage(**12); break;
case 10 : SdPage(**13); break;
case 11 : SdPage(**14); break;
case 12 : SdPage(**15); break;
default : break;
}
} |