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 ******************************/
|