单片机ds1302定时时钟

ds1302定时时钟在数码管上正常显示,但是无法使用独立按键对时间进行调整。

#include "reg52.h"
#include "ds1302.h"
#include "absacc.h"
sbit S5=P3^2;
sbit S4=P3^3;
unsigned char Write_Ds1302_adss[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Read_Ds1302_adss[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char SMGByte_NoDot[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char SMGByte[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char Time[7]={0x55,0x59,0x23,0x25,0x11,0x06,0x23};
void Write_Ds1302_data()
{
  unsigned char i;
    Write_Ds1302_Byte(0x8e,0x00);
    for(i=0;i<7;i++)
    {
      Write_Ds1302_Byte(Write_Ds1302_adss[i],Time[i]);
    }
    Write_Ds1302_Byte(0x8e,0x80);
}
void Read_Ds1302_data()
{
  unsigned char i;
    for(i=0;i<7;i++)
    {
      Time[i]=Read_Ds1302_Byte(Read_Ds1302_adss[i]);
    }
}
void SelectHC138(unsigned char n)
{
  switch(n)
    {
      case 4:
            P2=(P2&0x1f)|0x80;
        break;
        case 5:
            P2=(P2&0x1f)|0xa0;
        break;
        case 6:
            P2=(P2&0x1f)|0xc0;
        break;
        case 7:
            P2=(P2&0x1f)|0xe0;
        break;
    }
}
void delay(int xms)
{
    unsigned char i, j;

    while(xms--){
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
    }
}
void InitSmg(unsigned char pos,unsigned char dat)
{
    SelectHC138(7);
    P0=0xff;
  SelectHC138(6);
    P0=0x01<SelectHC138(7);
    P0=dat;
}

void Smg_ShowTime()
{
  InitSmg(0,SMGByte_NoDot[Time[2]/16]);
    delay(10);
    InitSmg(1,SMGByte_NoDot[Time[2]%16]);
    delay(10);
    InitSmg(2,0xbf);
    delay(10);
    InitSmg(3,SMGByte_NoDot[Time[1]/16]);
    delay(10);
    InitSmg(4,SMGByte_NoDot[Time[1]%16]);
    delay(10);
    InitSmg(5,0xbf);
    delay(10);
    InitSmg(6,SMGByte_NoDot[Time[0]/16]);
    delay(10);
    InitSmg(7,SMGByte_NoDot[Time[0]%16]);
    delay(10);
}
void Keycol()
{
  if(S5==0)
    {
      delay(100);
        if(S5==0)
        {
            if((Time[2]&0x0f)>9)
            Time[2]=Time[2]+1+6;
            else
                Time[2]=Time[2]++;
        }
    }
    else if(S4==0)
    {
      delay(100);
        if(S4==0)
        {
            if((Time[1]&0x0f)>9)
            Time[1]=Time[2]+1+6;
            else
                Time[1]++;
        }
    }  
      
}
void main()
{
    Write_Ds1302_data();
  while(1)
    {
      Read_Ds1302_data();
        Smg_ShowTime();
        Keycol();
    }
}


1.松手检测为什么没有?
2.按键与数码管显示的衔接有点问题