我是新手,遇到一些关于定时器的问题,希望高手帮忙

2019-07-16 02:44发布

我打算用1602写一个电子钟+秒表的程序,但不知道出了什么问题,时间走得很快,秒表启动不了,下面是部分关于定时器的程序,希望高手帮一下忙


char data hour,minute,second,sec;//时、分、秒、百分之一秒
uchar data shour,sminute,ssecond,ssec;//秒表时、分、秒、百分之一秒

void pro_timedate()//时间和日期处理程序
{
        second++;
        if(second==60)
        {
                second=0;
                minute++;
                if(minute==60)
                {
                        minute=0;
                        hour++;
                        if(hour==24)
                        {
                                hour=0;
                                day++;
                                if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
                                        if (day>31)
                                                {day=1;month++;} //大月31天
                                if (month==4||month==6||month==9||month==11)
                                        if (day>30)
                                                {day=1;month++;} //小月30天
                                if (month==2)
                                {        
                                        if((year%4==0&&year%100!=0)||year%400==0) //闰年的条件
                                        {
                                                if (day>29)
                                                        {day=1;month++;}//闰年2月为29天
                                        }
                                        else
                                        {
                                                if (day>28)
                                                        {day=1;month++;}//平年2月为28天
                                        }
                                }
                                if (month>12)
                                        {month=1;year++;}
                                if (year>99)
                                        year=0;
                        }
                }
        }
}
void init_timer()
{
        TMOD=0x11;
        IE=0x8f;
        TH0=0x0dc;
        TL0=0x00;
        TH1=0x0dc;
        TL1=0x00;
        TR0=1;
        TR1=0;
}
void timer0() interrupt 1    //Time0中断处理程序,秒的产生
{
        TH0=0xdc;     //Timer0置10ms 定时初值dc00H(2^16=65536D,dc00H=56320D)
        TL0=0x00;     //定时时间=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
        sec++;
        if(sec==100)    //1秒时间(100*10ms=1000ms=1s)
        {        
                sec=0;
                pro_timedate();    //调用时间和日期处理程序
        }
        update_disbuf();
        pro_display1();
}
void timer1() interrupt 3//Timer1中断处理程序,秒表
{
        TH1=0xdc;
        TL1=0x00;
        ssec++;
        if(ssec==100)
        {
                ssec=0;
                ssecond++;
                if(ssecond==60)
                {
                        ssecond=0;
                        sminute++;
                        if(sminute==60)
                        {
                                sminute=0;
                                shour++;
                        }
                }
        }
        update_disbuf();
        pro_display3();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。