刚学习单片机 看不懂下面的程序
#include<msp430g2553.h>
#define LEDWEI P2OUT
#define LEDDUAN P1OUT
unsigned long int save;
void South_Green_On()
{P2OUT&=~BIT2;}
void South_Green_Off()
{P2OUT|=BIT2;}
void South_Red_On()
{P2OUT&=~BIT3;}
void South_Red_Off()
{P2OUT|=BIT3;}
void South_Left_On()
{P2OUT&=~BIT4;}
void South_Left_Off()
{P2OUT|=BIT4;}
void West_Green_On()
{P2OUT&=~BIT5;}
void West_Green_Off()
{P2OUT|=BIT5;}
void West_Red_On()
{P2OUT&=~BIT6;}
void West_Red_Off()
{P2OUT|=BIT6;}
void West_Left_On()
{P2OUT&=~BIT7;}
void West_Left_Off()
{P2OUT|=BIT7;}
unsigned char LED[]={0xC0,0xF9,0xA4,0XB0,0X99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e};
unsigned char timer[4];
unsigned char t1=15,kongzhi=1;
void disp_led();
void delay(long n)
{
unsigned int i;
unsigned int j;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
_NOP();
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
CCTL0=CCIE;
TACTL=TASSEL_2+ID_3+MC_1+TACLR;
TACCR0=65000;
P1DIR&=~BIT7;//P1.7输入
P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;
P2DIR=0xff;
P1OUT|=BIT7;
P1REN|=BIT7;//使能上拉电阻
P1IE=BIT7;//P1.7口使能中断
P1IES|=BIT7;//P1.7下降沿触发
P1IFG=0;//清P1中断标志位
P2IE=0X00;
P2SEL&=~(BIT6+BIT7);
P2SEL2&=~(BIT6+BIT7);
_EINT();
South_Green_Off();
South_Left_Off();
South_Red_Off();
West_Green_Off();
West_Left_Off();
West_Red_Off();
delay(100);
South_Green_On();
South_Red_Off();
South_Left_Off();
West_Red_On();
West_Green_Off();
West_Left_Off();
while(1)
{
disp_led();
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
t1--;
timer[3]=t1/10;
timer[2]=t1%10;
if(t1==0)
{
t1=15;
if(kongzhi==4)
kongzhi=1;
else
kongzhi++;
if(kongzhi==1)
{
South_Green_On();
South_Red_Off();
South_Left_Off();
West_Red_On();
West_Green_Off();
West_Left_Off();
}
else if(kongzhi==2)
{ South_Left_On();
South_Green_Off();
South_Red_On();
West_Red_On();
West_Green_Off();
West_Left_Off();
}
else if(kongzhi==3)
{
West_Green_On();
West_Red_Off();
West_Left_Off();
South_Red_On();
South_Green_Off();
South_Left_Off();
}
else if(kongzhi==4)
{
West_Left_On();
West_Green_Off();
West_Red_On();
South_Red_On();
South_Green_Of();
South_Left_Off();
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR(void)
{
if(P1IFG&BIT7)
{
delay(10);
if(!(P1IN&BIT7))
{
while(!(P1IN&BIT7));
save=P2OUT;
West_Green_Off();
West_Red_On();
West_Left_Off();
South_Red_On();
South_Green_Off();
South_Left_Off();
delay(10000);
P2OUT=save;
}
P1IFG=0;
return;
}
}
void disp_led(void)
{
LEDWEI&=~BIT0;
LEDWEI|=BIT1;
LEDDUAN=LED[timer[3]];
delay(10);
LEDWEI&=~BIT1;
LEDWEI|=BIT0;
LEDDUAN=LED[timer[2]];
delay(10);
}
|