原创 msp430数码管程序

2009-5-14 11:20 2257 6 5 分类: MCU/ 嵌入式

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( );
    }

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条