用定时器和计数器写的数码管10秒的秒表为什么不会亮?求解
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
sbit P3_5=P3^5;
sbit du=P2^6;
sbit we=P2^7;
unsigned char i=0;
unsigned code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void init_Timer(void)
{
TMOD |=0x61;
TH0=0x3c;
TL0=0xb0;
TH1=0xf6;
TL1=0xf6;
EA=1;
ET0=1;ET1=1;
TR0=1;TR1=1;//定时器0计数器1初始化
}
void display(unsigned char num)
{
du=1;
P0=table[num];
du=0;
we=1;
P0=0xfe;
we=0;
}
void main()
{
init_Timer();
while(1)
{
if(i>9) i=0;
display(i);
}
}
void Timer0_isr(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
P3_5=!P3_5;
}
void Timer1_isr(void) interrupt 3
{
i++;
}
sbit P3_5=P3^5;
sbit du=P2^6;
sbit we=P2^7;
unsigned char i=0;
unsigned code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void init_Timer(void)
{
TMOD |=0x61;
TH0=0x3c;
TL0=0xb0;
TH1=0xf6;
TL1=0xf6;
EA=1;
ET0=1;ET1=1;
TR0=1;TR1=1;//定时器0计数器1初始化
}
void display(unsigned char num)
{
du=1;
P0=table[num];
du=0;
we=1;
P0=0xfe;
we=0;
}
void main()
{
init_Timer();
while(1)
{
if(i>9) i=0;
display(i);
}
}
void Timer0_isr(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
P3_5=!P3_5;
}
void Timer1_isr(void) interrupt 3
{
i++;
}
是不是需要延时函数?
不是,这个是用中断的
“当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。”T1工作在计数方式下,但是没有外部脉冲,所以 i 也就不会变化。
可以把 i++ 放到T0的中断服务程序里,感觉T1用不上。
即使T1没有外部计数脉冲触发,i有初值,数码管还是会亮的,现在小编是不是连数码管都不会点亮呢,最好能附上硬件图纸,便于分析你的程序。
因为要定时1秒单靠T0是不够的要用T1对T0计数再触发中断就可以达到1S的定时,而且问题已经找到了i应该先在delay函数里调用然后再main函数调用delay函数就有用,不是mian函数里调用delay函数然后delay函数调用i,至于为什么会这样还有些疑惑
