微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用定时器和计数器写的数码管10秒的秒表为什么不会亮?求解

用定时器和计数器写的数码管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++;
}

是不是需要延时函数?

不是,这个是用中断的

“当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。”T1工作在计数方式下,但是没有外部脉冲,所以 i 也就不会变化。

可以把 i++ 放到T0的中断服务程序里,感觉T1用不上。

即使T1没有外部计数脉冲触发,i有初值,数码管还是会亮的,现在小编是不是连数码管都不会点亮呢,最好能附上硬件图纸,便于分析你的程序。

因为要定时1秒单靠T0是不够的要用T1对T0计数再触发中断就可以达到1S的定时,而且问题已经找到了i应该先在delay函数里调用然后再main函数调用delay函数就有用,不是mian函数里调用delay函数然后delay函数调用i,至于为什么会这样还有些疑惑

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top