430单片机 定时99秒

强化工业   2010-6-4 13:55 楼主
#include  
typedef unsigned char uchar;
typedef unsigned int  uint;
uchar NUM_LED[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90};
uint tt,shi,fen,i,miao=0;
void delay(void)
{

  for(i=0;i<20;i++);
}
void main(void)
{
    WDTCTL = WDTHOLD + WDTPW ;
    TACTL=TASSEL_2+ID_3+MC_1;    //SMCLK(8KHZ). 8分频。 UP to CCR0   1Us
    CCTL0=CCIE;                  /* Capture/compare interrupt enable */
    CCR0=5000;
    P4DIR|=0XFF;
    P5DIR|=0X0F;
    _BIS_SR(LPM3_bits+GIE);

}
// 看门狗中断服务子程序
#pragma vector= TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
  tt++;
  if(tt==20)
  {
    tt=0;
    P1OUT ^= 0x01;            // P1.0取反
  
    miao++;
    if(miao==99)
      {
        miao=0;;  
      
      }
   
   
   }
  
    P5OUT|=BIT0;
    P4OUT=NUM_LED[miao/10];
    delay();
    P5OUT|=BIT1;
    P4OUT=NUM_LED[miao%10];
    delay();
    LPM3_EXIT;
   
}
为什么我这个只会显示个位:比如是:00-11-22···99再到00-11···的显示,没起到00-01··99如此循环的99秒定时器,大家帮个忙给看看

回复评论 (4)

P5OUT|=BIT0;  使能十位上的数码管。
再P5OUT|=BIT1; 这时,十位,个位上的数码管,都是使能状态。而你的P4口上送的是个位上的数据。所以才显示00 11 22 等等。
点赞  2010-6-4 17:33
如果不改硬件,你需要利用视觉暂留的原理,进行扫描显示了。
点赞  2010-6-4 17:35

4楼 low 

引用: 引用 2 楼 ymhsss 的回复:
如果不改硬件,你需要利用视觉暂留的原理,进行扫描显示了。

视觉暂留?
什么意思
点赞  2010-6-4 20:46
视觉暂留,就是同一时刻只显示一个,但由于时间很短,看上去好像是同时显示
点赞  2010-6-4 21:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复