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

📄 shizhong.c

📁 基于AT89C51单片机实现的电子时钟
💻 C
字号:
#include <reg52.h>
#define  uchar unsigned char
#define  uint  unsigned int
uint getemp=0,shitemp=0 ;
unsigned long int   temp0=0,temp1=0;
uchar code duan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned long int  time=41235;
uchar con=0 ,AA=0 ;


sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;

/////*****使用函数************///////
void delay( uint t) ;
void clear ( void ) ;
void disp(void ) ;
void key( void ) ;
////**************************//////
/*延时t*/
void delay(uint t)
{
  uint i,j;
  for (i=0;i<t;i++)
    for (j=0;j<120;j++)
	  ;
}
///*定时器初始化函数*///
void clear ( void )
{
TMOD=0x01;
EA=1;//开总中断
ET0=1;//开定时器T0中断

TH0 =(65535-50000)/256 ;
TL0 =(65535-50000)%256 ;//对定时器T0赋初值
TR0=1 ;//启动定时器T0开始计时
 }
/*主函数*/
main()
{
 clear();
 while (1)
 {
  key() ;
  disp();
 }   
}



/*键扫描*/
void key( void )
{
  if (AA== 4)
   {
    AA=0;
    ET0=1;
   }

 if(key1==0)
  delay(10);
 if(key1==0)
   {
     while (key1==0)   ;  // key 1  进入
     ET0=0;
     AA++ ;
    }
 if(key2==0)
   delay(10);
 if(key2==0)
   {
    while (key2==0)   ;   // key 2  进入
     if(AA==1) time =time + 1 ;
     if(AA==2) time =time +60 ;
     if(AA==3) time =time +3600;
    }
 if(key3==0)
   delay (10) ;
 if (key3==0)
   {
    while (key3==0)    ;   // key 3 进入
     if(AA==1) time =time - 1   ;
     if(AA==2) time =time - 60  ;
     if(AA==3) time =time - 3600;
    }

 } 

/*显示 */
void disp(void )
{
  {temp0= time%60;
   getemp= temp0%10;
   shitemp= temp0/10;
   P0=duan[getemp];
   P2=wei[7];
   delay(1);
   P2=0x00;
   P0=duan[shitemp];
   P2=wei[6];
   delay(1);
   P2=0x00;
   }           //秒

   P0=0xbf;
   P2=wei[5];
   delay(1);
   P2=0x00;
                //-
   {temp0=(time-time%60 )/60;
   temp0= temp0%60;
   getemp= temp0%10;
   shitemp= temp0/10;
   P0=duan[getemp];
   P2=wei[4];
   delay(1);
   P2=0x00;
   P0=duan[shitemp];
   P2=wei[3];
   delay(1);
   P2=0x00;
   }            // 分

   P0=0xbf;
   P2=wei[2];
   delay(1);
   P2=0x00;     //  -

   {temp0= time/3600 ;
   getemp= temp0%10;
   shitemp= temp0/10;
   P0=duan[getemp];
   P2=wei[1];
   delay(1);
   P2=0x00;
   P0=duan[shitemp];
   P2=wei[0];
   delay(1);
   P2=0x00;
   }          // 时

} 

//*50ms定时器中断*//
void time0 ( void ) interrupt  1 using  1
{EA=0;
 TH0= (65535-50000)/256 ;
 TL0= (65535-50000)%256 ;
 con++;
 while ( con==5 ) 
 {
   con=0;
  if(time<86400)
   time ++ ;
  else
   time =0 ;
  }  

 EA=1;
}

⌨️ 快捷键说明

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