⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51ds12887.c

📁 C51 ds12887时钟程序,运行环境为伟福仿真环境
💻 C
📖 第 1 页 / 共 2 页
字号:
                               }
                        }
                     if(temp1 == 10)
                        {
                            temp1 = 0 ;
                        }
                     *newaddr = temp1*10 + temp2 ;
                     blinkfun() ;

                }
             else                /* flag 为低位时,修改对应的时间低位*/
                {
                     temp2 = *newaddr%10 ;
                     temp1 = *newaddr/10 ;
                     if(newaddr!= 0x00) temp2++ ;
                     else
                        {
                           stop_calendar() ;
                           temp2++ ;
                         }
                     if(temp2 == 10) temp2 = 0 ;
                     *newaddr = temp1*10 + temp2 ;
                     blinkfun() ;
                }
           key2 = 0 ;
        }

   if(key4)                    /*实现“-”功能*/
         {
          if(flag%2 == 0)
              {
                temp2 = *newaddr%10 ;
                temp1 = *newaddr/10 ;
                if(temp1)
                  {
                     if(newaddr!=0x06)
                        {
                           if(newaddr!=0x00)
                              {
                                 temp1-- ;
                              }
                            else
                               {
                                  stop_calendar();
                                  temp1-- ;
                               }
                        }
                  }
                 else
                  {
                      temp1=9 ;
                  }
                *newaddr = temp1*10 + temp2 ;
                blinkfun() ;

              }
           else
              {
                temp2 = *newaddr%10 ;
                temp1 = *newaddr/10 ;
                 if(temp2)
                  {
                     if(newaddr!= 0x00) temp2-- ;
                     else
                       {
                          stop_calendar();
                          temp2-- ;
                       }
                  }
                 else
                  {
                      temp2 = 9 ;
                  }
                *newaddr = temp1*10 + temp2;
                blinkfun() ;
              }
         key4 = 0 ;

        }

  }
}

/*************************************************************/
             /* 定时器0中断,去抖动,判断键 */
/************************************************************/
 void timer0(void) interrupt 1
{

   TL0 = 0x4c ;
   TH0 = 0x00 ;
   TMOD = 0x01 ;
   P1 = 0x0f ;
   orignalNumber = P1&0x0f ;
   DelayT(200) ;
   nowNumber = P1&0x0f ;
   if(orignalNumber == nowNumber)
      {
         key = P1&0x0f ;
      }
   switch(key)
             {
           case 0x0e :             //修改键
          	       {
                          key1 = 1 ;
                          key = 0x0f ;
                          break ;
                       }
           case 0x0d :              //确定键
          	       {
                          key3 = 1 ;
                          key = 0x0f ;
                          break ;
                        }

           case 0x0b :             //加号键
          	      {
                          key2 = 1 ;
                          key = 0x0f ;
                          break ;
                       }
           case 0x07 :              //减号键
          	       {
                          key4 = 1 ;
                          key = 0x0f ;
                          break ;
			}

             }

   }
/**************************************************************/
              /* 定时器1中断 使得相应LED灯闪烁*/
/***************************************************************/

void timer1(void) interrupt 3
{
   TH1 = 0x00 ;
   TL1 = 0x00 ;
   TMOD = 0x10 ;
   cnt-- ;
   if(cnt==0&&tag1)
      {
         cnt = 40 ;
         blinkfun() ;

      }
   if(key3)
          {
             Start_calendar() ;
            

          }
   if(key2)
           {
             write_calendar(newaddr) ;
             tag1 = 0 ;
             
           }
   if(key4)
          {
              write_calendar(newaddr) ;
              tag1 = 0 ;
             
           }

}


/*********************************************************/
                       /*时间显示函数*/
/********************************************************/

void LEDdisplay(uchar display[])
 {
    uchar i ;
    for(i = 0;i< 7;i++)
          {
              if(i == 0)
                 {
                   SBUF = 0x16 ;
                   while(!TI)
                      {
                      }
	           TI = 0 ;
                   SBUF = 0x05  ;
                   while(!TI)
                      {
                      }
	           TI = 0 ;
                 }

            if(i!= 3)
              {

                SBUF = DispCode[display[i]/10] ;
                while(!TI)
                     {
                     }
	         TI = 0 ;
               }

              SBUF = DispCode[display[i]%10] ;
              while(!TI)
                 {
                 }
	      TI = 0 ;
         }

             DelayT(0xffff) ;
 }

/**************************************************************/
                    /*  主程序  */
/**************************************************************/

void main()

  {
       uchar display[7] ;
       TR0 = 1 ;
       ET0 = 1 ;
       EA = 1 ;
       ET1 = 1 ;
       TR1=1 ;
       chRegA = 0x0a ;   /*寄存器A的地址*/
       chRegB = 0x0b ;   /*寄存器B的地址*/
       chRegC = 0x0c ;   /*寄存器C的地址*/
       chRegD = 0x0d ;   /*寄存器D的地址*/
       SCON = 0 ;
       TI = 0 ;
       newaddr = 0x0a ;
       set_calendar() ;
       initatat() ;

     while(1)
     {

          read_calendar(display) ;
          LEDdisplay(display) ;
          if(flag == 13&&key1)
             {
                if((newaddr == 0x00)&&(flag%2!= 0))
                    {
                       newaddr = 0x0a ;
                    }
                flag = -1 ;
              }
          if(key1)
            {
               key1 = 0 ;
               flag++ ;
               tag1 = 1 ;
               if(flag%2==0)    /* 光标移动是偶数时才修改地址,
                                   因为对应的时间被分割为高低位*/
                  {
                      if((newaddr>0x06)&&(newaddr<=0x0a))
                          {
                             newaddr-- ;
                           }
                      else if((newaddr>0x00)&&(newaddr<=0x06))
                         {
                             newaddr = newaddr-2 ;
                          }
                      else
                         {
                           newaddr = 0x00 ;
                         }

                  }

             }

    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -