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

📄 clock.c

📁 用keil C编写绝对原创 内有proteus的仿真文件。可以实现时间的重设闹钟的设置
💻 C
字号:
#include <AT89X51.h>
#include <intrins.h>
unsigned char second,mininute,hour;
unsigned char s_second,s_mininute,s_hour;
unsigned char t_second,t_mininute,t_hour;
unsigned char a_second,a_mininute,a_hour;
unsigned char setw = 0;
unsigned char count_num=0;
unsigned char show_count=0;

bit rset_flag=0;
bit  aset_flag=0;
bit  atime =0;

unsigned char dis_dc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char dis[8]={0,0,15,0,0,15,0,0};


unsigned char get_key();
unsigned char  key_is();

void   key_deal(unsigned char k);

void show();

void main()
{
   unsigned char t_key;
  second =0; mininute = 0; hour=0;
   P1  =0x00;
  TMOD = 0x01;
  TL0  = 0xb0;
  TH0  = 0x3c;
  TR0  =1;
  ET0  =1;
  EA   =1;

  while(1)
    {

       t_key = get_key();
       key_deal(t_key);
       if(aset_flag==1&&rset_flag==0)
         {
          if(a_second==second&&a_mininute==mininute&&a_hour==hour)
          atime =1; 
          }
    if(atime ==1)
     P3_0=1;
    else
     P3_0=0;
    
       show();
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void delay1()
{
  unsigned char i,j;
  for(i=0;i<0x02;i++)
  for(j=0;j<0xff;j++)
  ; 
}
void show()
{   




    unsigned char shreg = 0x70;
    unsigned char shi;

  

    if(rset_flag==1)
       {
          dis[0]=t_second%10;
          dis[1]=t_second/10;
          dis[3]=t_mininute%10;
          dis[4]=t_mininute/10;
          dis[6]=t_hour%10;
          dis[7]=t_hour/10;
 
        }
   else
        {
          dis[0]=second%10;
          dis[1]=second/10;
          dis[3]=mininute%10;
          dis[4]=mininute/10;
          dis[6]=hour%10;
          dis[7]=hour/10;
 	    }
		       if(rset_flag==1)
             {
                if(show_count<30)
                  {
                switch(setw)
                      {
                        case 0:
                              dis[0]=0x0a;
                              dis[1]=0x0a;
                         break;
                        case 1:
                              dis[3]=0x0a;
                              dis[4]=0x0a;
                         break;
                        case 2:
                              dis[6]=0x0a;
                              dis[7]=0x0a;
                         break;
                      }  


           }
           if(show_count>=60)
           show_count =0;
           else 
           show_count++;
        }

     if(atime==1)
	  {
	    unsigned char i;
	   if(show_count<30)
		for(i=0;i<8;i++)
		dis[i]=0x0a;
		if(show_count>60)
		 show_count=0;
		 else
		 show_count++;
	  }



     for (shi=0;shi<8;shi++)
     {
      P2 = shreg + dis[shi];
      delay1();
    	shreg-=0x10;
     }
 
 


  return;
      



}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void t0 (void)interrupt 1 using 0
       { 
          TL0  = 0xb0;
          TH0  = 0x3c;
         if(count_num==19)
         {
          count_num = 0;
          second++;
          if(second>59)
             {
               second =0;
               mininute++;
                 if(mininute>59)
                      {
                      mininute = 0;
                         hour++;
                        if(hour>23)
                             hour =0;
                        }
               }

          } 
         else 
        count_num++; 

        }



////////////////////////////////////////////////////////////////////////////////////////////////////////////////

unsigned char get_key()
{
  unsigned char tm_key;

 if(tm_key=key_is())
 {
  while(key_is())
  show();
  return tm_key ;
 
 }
 return 0;
 


  
}


void delay10()
{
 unsigned char i,j;
 for(i=0;i<0x0a;i++)
 for(j=0;j<0xff;j++)
 ;
  

}
unsigned char key_is()
{
  unsigned char tem_key,tem_key0; 
  tem_key = P1;
  tem_key &= 0x1f;
  switch (tem_key)
  { 
   case 0x01:
   case 0x02:
   case	0x04:
   case	0x08:
   case 0x10:
    delay10();
    tem_key0 = P1;
    tem_key &= 0x1f;
	if(tem_key==tem_key0)
	return tem_key;
    else 
	return 0;
	default:
	return 0;
 }

}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void key_deal( unsigned char k)
{
 
   switch(k)
  {  


 
    case  0x01:
    if(rset_flag==0)
     {
      t_second   = second;
      t_mininute = mininute;
      t_hour     = hour;
      rset_flag=1;    
     }
     else if (rset_flag==1)
     {
           if(aset_flag ==0)
              {
               second = t_second;
               mininute= t_mininute;
               hour   =  t_hour;  
          
               }
            else if(aset_flag ==1)
             {
               a_second = t_second;
               a_mininute= t_mininute;
               a_hour   =  t_hour;  
                  
             }
            rset_flag = 0; 
      }
     break;
    case 0x02:
              setw++;
              if(setw>3)
              setw =0;

				  break;
 
	case 0x04:
    switch(setw)
        {
           case 0:  
              t_second++;
              if(t_second>59)
              t_second = 0;
              break;
                
            
           
           case 1:
                 t_mininute++;
                 if(t_mininute>59)
                 t_mininute = 0;
                 break;       

            case 2:
                      t_hour++;
                      if(t_hour>23)
                      t_hour =0;
           break;
           default:
           break;                         

            
       }
      break;
 

    case 0x08:
            switch(setw)
        {
           case 0:  
              t_second--;
              if(t_second==255)
              t_second = 59;
              break;
                
            
           
           case 1:
                 t_mininute--;
                 if(t_mininute==255)
                 t_mininute =59;
                 break;       

            case 2:
                      t_hour--;
                      if(t_hour==255)
                      t_hour =23;
           break;
           default:
           break;                         

            
       }
     break;
 
   

	case 0x10:
	         if(aset_flag==0)
              aset_flag=1;
             else
               {
                    aset_flag =0;
                    if(atime==1)
                     atime =0;
         
               }
					break;

    default:
       break;
  
 }



}



////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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