szwsu 发表于 2012-2-21 01:11:44

定时器数码管电子钟程序,按键设置没有反应,哪位大虾帮忙看一下。

我写了一个定时器电子钟程序,调分,时按键没有反应,编译没有问题。哪位大虾帮我看一下是哪里出了问题。应该什么写。
/***************************************************************************
名称:用定时器定时做时钟
内容,自动从00-00-00开始,无按键功能
芯片型号:STC89C52RC
功能脚说明:P0为段选脚,P3为位选脚,所有引脚低电平有效.
程序员:玄溪
日期:2012.2.6
/***************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uintunsigned int

uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit K1=P1^0;                          //分+
sbit K2=P1^1;                          //分-
sbit K3=P1^2;                          //时+
sbit K4=P1^3;                          //时-

uchar time;                                   //定义中断时间次数
uchar second;                           //定义秒
uchar minute;                           //定义分
uchar hour;                                   //定义时
//===========延时函数============//
void delay()
{
        uchar j;
                for(j=0;j<200;j++);
}
//=========显示秒函数=======//
void displaysecond(uchar s)                       //带返回值
{
        P3=0xbf;
        P0=du;
        delay();
        P3=0x7f;
        P0=du;
        delay();
        P3=0xff;
        if(K2==0)
        {
                s++;
                if(s==60)
                {
                        s=0;
                }
        }
}
//========显示分函数=============//
void displayminute(uchar m)
{
        P3=0xf7;
        P0=du;
        delay();
        P3=0xef;
        P0=du;
        delay();
        P3=0xdf;
        P0=0xbf;
        delay();
        P3=0xff;
        if(!K1)
        {
                delay();
                if(!K1)
                {
                        TR0=0;
                        m++;
                        if(m==60)
                        m=0;
                }
        }
        if(!K2)
        {
                delay();
                if(!K2)
                {
                        TR0=0;
                        m--;
                        if(m==0)
                        m=59;
                }
        }
        TR0=1;
}
//========显示时函数==============//
void displayhour(uchar h)
{
        P3=0xfe;
        P0=du;
        delay();
        P3=0xfd;
        P0=du;
        delay();
        P3=0xfb;
        P0=0xbf;
        delay();
        P3=0xff;
        if(!K3)
        {
                delay();
                if(!K3)
                {
                        TR0=0;
                        h++;
                        if(h==24)
                        h=0;
                }
        }
        if(!K4)
        {
                TR0=0;
                delay();
                if(!K4)
                {
                        h--;
                        if(h==0)
                        h=23;
                }
        }
        TR0=1;
}

//=============主函数============//
void main(void)
{
        TMOD=0x01;
        EA=1;
        ET0=1;
        TH0=(65536-46083)/256;                          //赋初值
        TL0=(65536-46083)%256;       
        TR0=1;
        while(1)
        {
                displaysecond(second);
                delay();
                displayminute(minute);
                delay();
                displayhour(hour);
                delay();
        }
}
//=======定时器中断子函数=================//
void inter0()interrupt 1
{
        time++;
        if(time==20)
        {
                time=0;
                second++;
        }
        if(second==60)
        {
                second =0;
                minute++;
        }
        if(minute==60)
        {
                minute=0;
                hour++;
        }
        if(hour==24)
        {
                hour=0;
        }
        TH0=(65536-46083)/256;                          //赋初值
        TL0=(65536-46083)%256;       
}
页: [1]
查看完整版本: 定时器数码管电子钟程序,按键设置没有反应,哪位大虾帮忙看一下。