大家好,定时器定时1ms,然后累积到1000次,秒数加一,构成一个动态数码管显示的秒表,我没有使用到中断。但是,下载到学习板上,间隔的时间远大于1s,这是为什么呢?
#include
typedef unsigned char u8;
typedef unsigned int u16;
#define GPIO_LED P0
sbit LSA = P2^4;
sbit LSB = P2^5;
sbit LSC = P2^6;
u8 code smgduan[16]=
{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
u8 LEDduan[8]=
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
void delay(u8 i)
{
while(i--);
}
void display()
{
u8 i = 0;
for(i=0; i<8; i++)
{
switch(i)
{
case(0): LSA = 0; LSB = 0; LSC = 0; break;
case(1): LSA = 1; LSB = 0; LSC = 0; break;
case(2): LSA = 0; LSB = 1; LSC = 0; break;
case(3): LSA = 1; LSB = 1; LSC = 0; break;
case(4): LSA = 0; LSB = 0; LSC = 1; break;
case(5): LSA = 1; LSB = 0; LSC = 1; break;
case(6): LSA = 0; LSB = 1; LSC = 1; break;
case(7): LSA = 1; LSB = 1; LSC = 1; break;
}
GPIO_LED = LEDduan[i];
delay(100);
GPIO_LED = 0x00;
}
}
void main()
{
u16 cnt = 0;
u16 num = 0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x18;//定时器定时1ms
TR0 = 1;
while(1)
{
if(TF0 == 1)
{
TH0 = 0xFC;
TL0 = 0x18;
TF0 = 0;
cnt++;
if(cnt == 1000)
{
cnt = 0;
num++;
}
}
LEDduan[0] = smgduan[num/10000000%10];
LEDduan[1] = smgduan[num/1000000%10];
LEDduan[2] = smgduan[num/100000%10];
LEDduan[3] = smgduan[num/10000%10];
LEDduan[4] = smgduan[num/1000%10];
LEDduan[5] = smgduan[num/100%10];
LEDduan[6] = smgduan[num/10%10];
LEDduan[7] = smgduan[num/1%10];
display();
}
}