#include "msp430f149.h"
volatile int SpeedSign=5,flag=0;
#define a 0x01 // AAAA
#define b 0x02 // F B
#define c 0x04 // F B
#define d 0x08 // GGGG
#define e 0x10 // E C
#define f 0x20 // E C
#define g 0x40 // DDDD
#define h 0x80
const char LightOpen[8]={a,b,c,d,e,f,g,h};
const char LCD_tab[]={
a + b + c + d + e + f, // Displays "0"
b + c, // Displays "1"
a + b + d + e + g, // Displays "2"
a + b + c + d + g, // Displays "3"
b + c + f + g, // Displays "4"
a + c + d + f +g, // Displays "5"
a + c + d + e + f + g, // Displays "6"
a + b + c, // Displays "7"
a + b + c + d + e + f + g, // Displays "8"
a + b + c + d + f + g, // Displays "9"
};
void InitSystem()
{
P2DIR&=~(BIT1+BIT0);
P2IES|=(BIT1+BIT0);
P2IE|=BIT1;
P2IE|=BIT0;
_EINT();
}
#pragma vector=PORT2_VECTOR
__interrupt void P2_ISR(void)
{
int i;
P2DIR|=BIT3;
P2OUT|=BIT3;
if(P2IFG&BIT1) P2OUT&=~BIT3;
for(i=0;i<1500;i++){};
if(P2IN&(BIT1+BIT0)==0x03)
{
P2IFG=0;
return;
}
if(P2IFG&BIT0)
{
if(SpeedSign<9)
{
SpeedSign++;
flag=1;
}
}
if(P2IFG&BIT1)
{
if(SpeedSign>0)
{
SpeedSign--;
flag=1;
}
}
P2IFG=0;
return;
}
void main( void )
{
InitSystem();
long int i;
int BasicSpeed=2000,j=0,SignLight=5;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
P1DIR|=0xff;
P1OUT|=0xff;
P2DIR|=BIT2;
P2OUT|=BIT2;
P4DIR|=0xff;
P4OUT|=0xff;
while(1)
{
P4OUT=~LCD_tab[SpeedSign];
if(SignLight==0)
{
P2OUT|=BIT2;
flag=0;
SignLight=2;
}
if(flag==1)
{
P2OUT&=~BIT2;
SignLight--;
}
for(i=0;i<(BasicSpeed*SpeedSign);i++);
P1OUT&=~LightOpen[j];
j++;
if(j==9)
{
P1OUT|=0xff;
j=0;
}
}
}
刚学430单片机,练习中断编了这个程序,下载之后发现只有P2.0的中断有效P2.1的中断无效。把P2.1换成P2.7口也无效。里面的SignLight和接数码管的P4口和P2.3是监控中断程序是否执行,SpeedSign的数值,P2IFG&BIT1的数值的。发现P2.1的中断有效,但中断程序不执行。求助大神门!!! |