#include "MSP430G2553.h"
#include "SEG.h"
unsigned char Duan_M[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
unsigned char Wei_M[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char Temp[8];
void GPIO_Init();//io初始化
void WDT_Init();//看门狗用作定时器初始化
void Display_Seg(unsigned char First_Bit,unsigned char Num );//动态显示数码管
void WDT_On();//时间到处理函数
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
GPIO_Init();//io初始化
WDT_Init();//看门狗用作定时器初始化
_EINT();//开总中断
LPM3;//低功耗模式3
//WDT_On();
return 0;
}
/*初始化看门狗定时器函数*/
void WDT_Init()
{
WDTCTL = WDT_ADLY_250;//ACLK,定时1s
IE1 |=WDTIE;//开中断时能
}
/*io初始化*/
void GPIO_Init()
{
P1DIR = 0XFF;//p1八引脚设置为输出
P1OUT = 0;//初始化为0
P2DIR |= BIT0+BIT1;//P2.1,P2.0分别用于位、段所存
P2OUT &= ~BIT0;
P2OUT &= ~BIT1;
}
/*中断函数*/
#pragma vector = WDT_VECTOR
__interrupt void WDT_ISR()
{
WDT_On();
}
/*动态显示数码管*/
void Display_Seg(unsigned char First_Bit,unsigned char Num)
{
unsigned char i;
for(i=0;i<8;i++)
{
P1OUT = Wei_M[i+First_Bit];//表示显示第i+First_Bit个数码管;
Wei_On;
Wei_Off;
P1OUT = Temp;//显示数字
Duan_On;
Duan_Off;
}
}
/*动态扫描数码管,实现999累加和累减*/
void WDT_On()
{
static int numA=999,numB=0;
//static int numB=0;
numB++;
if(numB>=1000)
numB=0;
numA--;
if(numA<0)
numA=999;
if(numA<100)
Temp[0]=0;
else
Temp[0]=Duan_M[numA/100];
if(numA<10)
Temp[1]=0;
else
Temp[1]=Duan_M[(numA%100)/10];
Temp[2]=Duan_M[(numA%100)%10];
Temp[3]=0;
Temp[4]=0;
if(numB<100)
Temp[5]=0;
else
Temp[5]=Duan_M[numB/100];
if(numB<10)
Temp[6]=0;
else
Temp[6]=Duan_M[(numB%100)/10];
Temp[7]=Duan_M[(numB%100)%10];
Display_Seg(0,8);
}
为什么不工作 |