#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秒定时器,大家帮个忙给看看
P5OUT|=BIT0; 使能十位上的数码管。
再P5OUT|=BIT1; 这时,十位,个位上的数码管,都是使能状态。而你的P4口上送的是个位上的数据。所以才显示00 11 22 等等。
如果不改硬件,你需要利用视觉暂留的原理,进行扫描显示了。
视觉暂留,就是同一时刻只显示一个,但由于时间很短,看上去好像是同时显示