我设计了一个时钟,根据定时器的设置初值是1ms,1000次秒正常来说应该是加1,但是在开发板上显示时等了好长时间才加1,我不清楚这是为什么,请求大家帮助,代码如下:
#include
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
typedef unsigned int ui;
typedef unsigned char uc;
ui code shuju[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ui disp[6];
ui num,shi,fen,miao;
void delay(ui i)
{
while(i--);
}
void datapros()
{
disp[0]=shuju[miao%10];
disp[1]=shuju[miao/10];
disp[2]=shuju[fen%10];
disp[3]=shuju[fen/10];
disp[4]=shuju[shi%10];
disp[5]=shuju[shi/10];
}
void display()
{
ui i;
for(i=0;i<6;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;
}
P0=disp[i];
delay(100);
P0=0x00;
}
}
void init()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18; //1ms
EA=1;
TR0=1;
ET0=1;
}
void main()
{
init();
while(1)
{
datapros();
display();
}
}
void init0() interrupt 1
{
TH0=0xfc;
TL0=0x18;
num++;
if(num==1000)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
}