https://static.assets-stash.eet-china.com/album/old-resources/2009/5/14/d47553be-e4f3-4ba5-a34e-d675ae68ddb0.rar #include <msp430x14x.h>
unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};
unsigned char min;
unsigned char sec;
unsigned char hour;
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延时124*8+10=1002us
}
void delay1 (void)
{
unsigned int tmp;
for(tmp = 12000;tmp > 0;tmp--);
}
void LED_display( ) //显示
{
P5OUT=0x01; //51.0=0,选通第一位
P1OUT=table[hour / 10]; //显示分钟的十位
delay1ms();
P1OUT =0xff; //消隐
P5OUT=0x02; //51.0=0,选通第一位
P1OUT=table[hour %10]; //显示分钟的十位
delay1ms();
P1OUT =0xff;
P5OUT=0x04; //51.0=0,选通第一位
P1OUT=0xbf; //显示分钟的十位
delay1ms();
P1OUT =0xff; //消隐
P5OUT=0x08; //51.0=0,选通第一位
P1OUT=table[min /10]; //显示分钟的十位
delay1ms();
P1OUT =0xff;
P5OUT=0x10; //51.0=0,选通第一位
P1OUT=table[min %10]; //显示分钟的十位
delay1ms();
P1OUT =0xff;
P5OUT=0x20; //51.0=0,选通第一位
P1OUT=0xbf; //显示分钟的十位
delay1ms();
P1OUT =0xff;
P5OUT=0x40; //51.0=0,选通第一位
P1OUT=table[sec /10]; //显示分钟的十位
delay1ms();
P1OUT =0xff; //消隐
P5OUT=0x80; //51.0=0,选通第一位
P1OUT=table[sec % 10]; //显示分钟的十位
delay1ms();
P1OUT =0xff; //消隐
}
#pragma vector = WDT_VECTOR
__interrupt void watchdog_timer(void)
{
sec ++;
if (sec==60)
{
sec="0";
min++;
if (min==60)
{
min="0";
hour++;
if (hour==13)
hour="1";
}
}
}
#pragma vector="PORT2"_VECTOR
__interrupt void Port2 (void)
{
if ((P2IFG&BIT0)==BIT0)
{
delay1 ();
if ((P2IFG&BIT0)==BIT0)
{
while((P2IN&BIT0) ==BIT0 ) ; //等待按键放开
sec ++ ;
if (sec==60)
sec="0";
}
P2IFG&=~BIT0;
}
else if ((P2IFG&BIT1)==BIT1)
{
min ++ ;
if (min == 60)
min = 0;
P2IFG&=~BIT1;
}
else if ((P2IFG&BIT2)==BIT2)
{
delay1 ();
if ((P2IFG&BIT2)==BIT2)
{
while((P2IN&BIT2) ==BIT2 ) ; //等待按键放开
hour ++ ;
if (hour == 13)
hour = 1;
}
P2IFG&=~BIT2;
}
else if ((P2IFG&BIT3)==BIT3)
{
delay1 ();
if ((P2IFG&BIT3)==BIT3)
{
while((P2IN&BIT3) ==BIT3 ) ; //等待按键放开
sec = 0;
min = 0;
hour = 0;
}
P2IFG&=~BIT3;
}
}
void main ()
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR = 0xff;
P5DIR = 0xff;
P1OUT = 0xff;
P5OUT =0;
P2IES = 0x0f; // P1.0~P1.3选择下降沿中断
P2IE = 0x0f; // 打开中断使能
WDTCTL = WDT_ADLY_1000 ;
IE1 |= WDTIE;
_EINT();
while (1)
{
LED_display( );
}
}
文章评论(0条评论)
登录后参与讨论