void KeyScan() 
{ 
 int8 temp; 
 if(KEY1==0)       /* 功能键 */ 
 { 
  DelayMS(8); 
  if(KEY1==0) 
  { 
   while(!KEY1); 
   if(adj==0)     /* 第一次按下功能键 */ 
    strcpy(setTimebuf,getTimebuf); 
   adj++; 
   Ht1621WrAllData(0,Ht1621Tab,16);  /* 清除1621寄存器数据,即清屏 */ 
   switch(adj) 
   { 
    case 1:     /* year */ 
     dis[0]=2; 
     dis[1]=0; 
     dis[2]=setTimebuf[6]/16; 
     dis[3]=setTimebuf[6]%16; 
     Display(); 
     break; 
    case 2:     /* Month */ 
     dis[0]=0; 
     dis[1]=0; 
     dis[2]=setTimebuf[4]/16; 
     dis[3]=setTimebuf[4]%16; 
     Display(); 
     break; 
    case 3:     /* Day */ 
     switch(setTimebuf[4]) 
     { 
      case 0x04: 
      case 0x06: 
      case 0x09: 
      case 0x11: 
       if(setTimebuf[3]==0x31) 
        setTimebuf[3]=0x30; 
       break; 
      case 0x02: 
       if(BCDtoDEC(setTimebuf[6])%4==0) /* 再判断是否闰年(2000~2099) */ 
       { 
        if((setTimebuf[3]==0x30)||(setTimebuf[3]==0x31)) 
         setTimebuf[3]=0x29; 
       } 
       else 
       { 
        if((setTimebuf[3]==0x29)||(setTimebuf[3]==0x30)||(setTimebuf[3]==0x31)) 
         setTimebuf[3]=0x28; 
       } 
       break; 
     } 
     dis[0]=0; 
     dis[1]=0; 
     dis[2]=setTimebuf[3]/16; 
     dis[3]=setTimebuf[3]%16; 
     Display(); 
     break; 
    case 4:     /* Week */ 
     dis[0]=0; 
     dis[1]=0; 
     dis[2]=0; 
     dis[3]=setTimebuf[5]%16; 
     Display(); 
     break; 
    case 5: 
     dis[0]=0; 
     dis[1]=0; 
     dis[2]=setTimebuf[2]/16; 
     dis[3]=setTimebuf[2]%16; 
     Display(); 
     break; 
    case 6: 
     dis[0]=0; 
     dis[1]=0; 
     dis[2]=setTimebuf[1]/16; 
     dis[3]=setTimebuf[1]%16; 
     Display(); 
     break; 
    case 7: 
     adj=0; 
     setTimebuf[0]=0; 
     SetTime(setTimebuf); 
     break; 
   } 
  } 
 } 
 if(adj!=0) 
 { 
  if(KEY2==0) 
  { 
   DelayMS(8); 
   if(KEY2==0) 
   { 
    while(!KEY2); 
    switch(adj) 
    { 
     case 1:    /* Year inc */ 
      temp=BCDtoDEC(setTimebuf[6]); 
      temp++; 
      if(temp==100) 
       temp=0; 
      setTimebuf[6]=DECtoBCD(temp); 
  
      dis[0]=2; 
      dis[1]=0; 
      dis[2]=setTimebuf[6]/16; 
      dis[3]=setTimebuf[6]%16; 
      Display(); 
      break; 
     case 2:    /* Month inc */ 
      temp=BCDtoDEC(setTimebuf[4]); 
      temp++; 
      if(temp==13) 
       temp=1; 
         setTimebuf[4]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[4]/16; 
      dis[3]=setTimebuf[4]%16; 
      Display(); 
      break; 
     case 3:    /* Day inc */ 
      temp=BCDtoDEC(setTimebuf[3]); 
      temp++; 
      switch(setTimebuf[4])  /* 判断月 */ 
      { 
       case 0x01: 
       case 0x03: 
       case 0x05: 
       case 0x07: 
       case 0x08: 
       case 0x10: 
       case 0x12: 
        if(temp==32) 
         temp=1; 
        break; 
       case 0x04: 
       case 0x06: 
       case 0x09: 
       case 0x11: 
        if(temp==31) 
         temp=1; 
        break; 
       case 0x02: 
        if(BCDtoDEC(setTimebuf[6])%4==0) /* 再判断是否闰年(2000~2099) */ 
        { 
         if(temp==30) 
          temp=1; 
        } 
        else 
        { 
         if(temp==29) 
          temp=1; 
        } 
        break; 
      } 
         setTimebuf[3]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[3]/16; 
      dis[3]=setTimebuf[3]%16; 
      Display(); 
      break; 
     case 4:    /* Week inc */    
      temp=BCDtoDEC(setTimebuf[5]); 
      temp++; 
      if(temp==8) 
       temp=1; 
         setTimebuf[5]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=0; 
      dis[3]=setTimebuf[5]%16; 
      Display(); 
      break; 
     case 5:    /* Hour inc */ 
      temp=BCDtoDEC(setTimebuf[2]); 
      temp++; 
      if(temp==24) 
       temp=0; 
         setTimebuf[2]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[2]/16; 
      dis[3]=setTimebuf[2]%16; 
      Display(); 
      break; 
     case 6:    /* Minute inc */ 
      temp=BCDtoDEC(setTimebuf[1]); 
      temp++; 
      if(temp==60) 
       temp=0; 
         setTimebuf[1]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[1]/16; 
      dis[3]=setTimebuf[1]%16; 
      Display(); 
      break; 
    } 
   } 
  } 
  if(KEY3==0) 
  { 
   DelayMS(8); 
   if(KEY3==0) 
   { 
    while(!KEY3); 
    switch(adj) 
    { 
     case 1:    /* Year dec */ 
      temp=BCDtoDEC(setTimebuf[6]); 
      temp--; 
      if(temp==-1) 
       temp=99; 
      setTimebuf[6]=DECtoBCD(temp); 
  
      dis[0]=2; 
      dis[1]=0; 
      dis[2]=setTimebuf[6]/16; 
      dis[3]=setTimebuf[6]%16; 
      Display(); 
      break; 
     case 2:    /* Month dec */ 
      temp=BCDtoDEC(setTimebuf[4]); 
      temp--; 
      if(temp==0) 
       temp=12; 
         setTimebuf[4]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[4]/16; 
      dis[3]=setTimebuf[4]%16; 
      Display(); 
      break; 
     case 3:    /* Day dec */ 
      temp=BCDtoDEC(setTimebuf[3]); 
      temp--; 
      switch(setTimebuf[4])  /* 判断月 */ 
      { 
       case 0x01: 
       case 0x03: 
       case 0x05: 
       case 0x07: 
       case 0x08: 
       case 0x10: 
       case 0x12: 
        if(temp==0) 
         temp=31; 
        break; 
       case 0x04: 
       case 0x06: 
       case 0x09: 
       case 0x11: 
        if(temp==0) 
         temp=30; 
        break; 
       case 0x02: 
        if(BCDtoDEC(setTimebuf[6])%4==0) /* 再判断是否闰年(2000~2099) */ 
        { 
         if(temp==0) 
          temp=29; 
        } 
        else 
        { 
         if(temp==0) 
          temp=28; 
        } 
        break; 
      } 
         setTimebuf[3]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[3]/16; 
      dis[3]=setTimebuf[3]%16; 
      Display(); 
      break; 
     case 4:    /* Week dec */ 
      temp=BCDtoDEC(setTimebuf[5]); 
      temp--; 
      if(temp==0) 
       temp=7; 
         setTimebuf[5]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=0; 
      dis[3]=setTimebuf[5]%16; 
      Display(); 
      break; 
     case 5:    /* Hour dec */ 
      temp=BCDtoDEC(setTimebuf[2]); 
      temp--; 
      if(temp==-1) 
       temp=23; 
         setTimebuf[2]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[2]/16; 
      dis[3]=setTimebuf[2]%16; 
      Display(); 
      break; 
     case 6:    /* Minute dec */ 
      temp=BCDtoDEC(setTimebuf[1]); 
      temp--; 
      if(temp==-1) 
       temp=59; 
         setTimebuf[1]=DECtoBCD(temp); 
      dis[0]=0; 
      dis[1]=0; 
      dis[2]=setTimebuf[1]/16; 
      dis[3]=setTimebuf[1]%16; 
      Display(); 
      break; 
    } 
   } 
  } 
 } 
 if(adj==0) 
 { 
  if(KEY4==0) 
  { 
   DelayMS(8); 
   if(KEY4==0) 
   { 
    while(!KEY4); 
    ExtraDisplay(); 
   } 
  } 
 } 
} 
/****************** MAIN ***********************/ 
void main() 
{ 
 uint8 i=0; 
 adj=0; 
 Ht1621_Init();      /*初始化LCD*/ 
 initLM75A();      /*初始化LM75A*/ 
 Init1302();       /*初始化DS1302*/ 
 while(1) 
 { 
  if(adj==0) 
  { 
   GetTime(getTimebuf); 
   NormalDisplay(); 
   i++; 
   if(i%8==0) 
   { 
    colon=~colon; 
    Ht1621WrOneData(0x17,colon^0x08); 
   } 
   DelayMS(50); 
  } 
  KeyScan(); 
 } 
} 
/****************************  Over  ******************************/          
 
 |   
     
  
 |