打印

Edc190 & Ht1621(2)

[复制链接]
1471|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangjw258|  楼主 | 2013-10-4 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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  ******************************/         

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

8

帖子

0

粉丝