51单片机定时器T1中断使数码管计数0—F,每秒加1,想要将if()函数写到main()函数中,如何实现。

51单片机定时器T1中断使数码管计数0—F,每秒加1,想要将if()函数写到main()函数中,如何实现。该程序下载到单片机中只显示8

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 n=0;
static u16 i;

void Timer1Init()
{
TMOD|=0x10;
TH1=0xFC;
TL1=0x18;
ET1=1;
EA=1;
TR1=1;
}

void main()
{
while(1)
{
LSA=0;
LSB=0;
LSC=0;
Timer1Init();
if(i==1000)
{
TR1=0;
i=0;
P0=smgduan[n++];
if(n==16) n=0;
}
}
}

void Timer1() interrupt 3
{
TH1=0xFC;
TL1=0x18;
i++;

/*
if(i==1000)
{
i=0;
P0=smgduan[n++];
if(n==16) n=0;
}
*/

}

把初始化程序 Timer1Init(); 放在while(1) 的上面,你现在这样,每次循环都初始化了,就永远也不计数了 。另外,开机是显示8,是因为,开机P0口全为1,要过1秒后开始从0开始显示,可以在while(1)上面加一行 P0=0x3f; 这样,开机就显示0了。另外,这种定时1秒,定时器最好定时长点,如50ms ,你现在是定时1ms ,这中断频率太高了,如果有其它程序就会影响主程序的执行。
还有,if 语句下面的
if(i==1000)
{
//TR1=0;//要这行,就计数一遍就停了,要不停地计数就要删掉
i=0;
P0=smgduan[n++];
if(n==16) n=0;

}
温馨提示:答案为网友推荐,仅供参考