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

📄 版本1.0.txt

📁 基于51单片机的数字钟程序
💻 TXT
字号:
#include<reg52.h>
void time0(void);
void time1(void);
void charge_buffer_1(void);
void charge_buffer_2(void);
void charge_buffer_3(void);
//void change(void);
void init_buffer_1(void);
void init_buffer_2(void);
void init_buffer_3(void);
//sbit P25=P2^5;
//void which_row_key_down();
void which_line_key_down();
void delay_10ms();
void delay_100ms();
unsigned char if_keydown();

unsigned char line,displace_1,displace_3;//,x
bit start_1,start_2,start_3,flag;

//unsigned char b;
//unsigned char cycle;
unsigned char timer,tim,lighting,a;

unsigned char buff,buffer_1[6],buffer_2[6],buffer_3[6];

    
unsigned char code tab_1[10]={0x3f,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0x07,0x7f,0x6f};
unsigned char code tab_2[7]={0X01,0X02,0X04,0x08,0X10,0X20,0x40};
//unsigned char code b[16]={0x3f,0x06,0x5b,0x4f,0x67,0x66,0x6d,0x7d,0x7f,0x07,0x7f,0x6f,0x39,0x5c,0x79,0x71};

//unsigned char r1; 
void main(void) 
{   //unsigned char i;
    init_buffer_1();
    init_buffer_2();
	init_buffer_3();
	buff=1;
    start_1=0;
	start_2=0;
	flag=1;
	displace_1=0;
    displace_3=0;
	lighting=250;
	
    TMOD=1;
	IE=0X8a;
    TCON=0X11;
    PT0=1;
	
	tim=7; 
	timer=15;
	TH0=0Xbd;
	TL0=0Xc0;
//	TH1=0Xf8;
//	TL1=0Xff;
	TR0=1;
	TR1=1;
    
    do{
         if(if_keydown())
			{	
				//which_row_key_down();
				which_line_key_down();
                
				
				//x=line*4+row;
				//P2=b[x];
			}
		  //if()
		  //{   
		      if(start_1&&buff==1)
			  {
			       if(line==2)
			       {    
			          displace_1++;
					  delay_100ms();
                      delay_100ms();
			       }
                   if(displace_1>2) displace_1=displace_1-3;
				   if(line==3)
				   {
				      switch(displace_1)
                      {
			             case 2:if(buffer_1[4]<3){buffer_1[5]=0;buffer_1[4]=0;}else{buffer_1[5]=0;buffer_1[4]=0;buffer_1[3]++;charge_buffer_1();}break;
			             case 1:buffer_1[3]++;charge_buffer_1();delay_100ms();break;
			             case 0:buffer_1[1]++;charge_buffer_1();delay_100ms();break;
                      }
			    	}
			  
			  }
              if(start_3&&buff==3)
			  {
			       if(line==2)
			       {    
			          displace_3++;
					  delay_100ms();
                      delay_100ms();
			       }
                   if(displace_3>2) displace_3=displace_3-3;
				   if(line==3)
				   {
				      switch(displace_3)
                      {
			             case 2:buffer_3[5]++;charge_buffer_3();delay_100ms();break;
			             case 1:buffer_3[3]++;charge_buffer_3();delay_100ms();break;
			             case 0:buffer_3[1]++;charge_buffer_3();delay_100ms();break;
                      }
			    	}
			  
			  }
			 // if(!buff)
			  //{
		          if(start_2)
			      {
		           delay_10ms();       //计数
			      }
			      else if(!start_2&&line==2)
			      {    
			           init_buffer_2();
			      }
			 // }
          //}
		  line=4;
    }while(1);
}
void time0(void) interrupt 1 using 0
{
    if(!timer)
	{
	    buffer_1[5]=buffer_1[5]+1;
        charge_buffer_1();
	    TH0=0Xbd;
	    TL0=0Xc0;
		timer=15;
	}
	else{timer--;}
	TR0=1;
	//TH0=0Xff;
	//TL0=0Xf1;
	
}
void time1(void) interrupt 3 using 0
{
   // if(tim) 
//	{   
	       a=7-tim;
	       P1=tab_2[a];
		   if(buff==1)
		   {
		      /* if(start_1)
			   {
			      if(lighting&&flag)
			      { //if(a==5)
			         if(a=1+2*displace)
	                 { P1=tab_2[6];
					   
				     }
			      }
                  lighting--;
                  if(!lighting)
				  {   lighting=250;
				      flag=!flag;
				  }
			   }*/
               P2=tab_1[buffer_1[a]];
		       
		   }
		   if(buff==2)
		   {
		       P2=tab_1[buffer_2[a]];
  		   }
           if(buff==3)
		   {
		       //charge_buffer_3();
               P2=tab_1[buffer_3[a]];
  		   }
		   tim--;
		   if(tim==0)
	       {
	           tim=7;	
	       }
//	}
//   while(--tim);
 
    
    TR1=1;
    TH1=0Xf0;
	TL1=0Xff;
	
}

unsigned char if_keydown()
{
    unsigned char i;
	P0=0xf0;
	//P0=0xf0;
	i=P0;
	if(i==0x70)
	{
		delay_10ms();
        delay_10ms();
		i=P0;
		if(i==0x70)
			{return 1;}
		else return 0;
	}
	return 0;
}

void which_line_key_down()
{
    unsigned char d;
	P0=0x0f;
 	d=P0;
	switch(d)
	{
			case 0x07:line=3;break;
			case 0x0b:line=2;break;
			case 0x0d:line=1;if(buff==1){start_1=!start_1;}if(buff==2){start_2=!start_2;}if(buff==3){start_3=!start_3;}delay_100ms();delay_100ms();break;
			case 0x0e:line=0,buff++;if(buff>3){buff=buff-3;}delay_100ms();delay_100ms();break;
	}
}



void charge_buffer_1(void)
{
    //if(buff){
    if(buffer_1[5]==10)
	{
	    buffer_1[5]=0;
		buffer_1[4]=buffer_1[4]+1;
	}
    if(buffer_1[4]==6)
	{
	    buffer_1[4]=0;
		if(!start_1)buffer_1[3]=buffer_1[3]+1;
	}
    if(buffer_1[3]==10)
	{
	    buffer_1[3]=0;
		buffer_1[2]=buffer_1[2]+1;
	}
    if(buffer_1[2]==6)
	{
	    buffer_1[2]=0;
		if(!start_1)buffer_1[1]=buffer_1[1]+1;
	}
    if(buffer_1[1]==10&&buffer_1[0]!=2)
	{
	    buffer_1[1]=0;
		buffer_1[0]=buffer_1[0]+1;
	}
    if(buffer_1[1]==4&&buffer_1[0]==2)
	{
	    buffer_1[1]=0;
		buffer_1[0]=0;
        if(!start_1)buffer_3[5]=buffer_3[5]+1;
	}//}
}	//if(!buff){

void charge_buffer_2(void)
{ 
    if(buffer_2[5]==10)
	{
	    buffer_2[5]=0;
		buffer_2[4]=buffer_2[4]+1;
	}
    if(buffer_2[4]==10)
	{
	    buffer_2[4]=0;
		buffer_2[3]=buffer_2[3]+1;
	}
    if(buffer_2[3]==10)
	{
	    buffer_2[3]=0;
		buffer_2[2]=buffer_2[2]+1;
	}
    if(buffer_2[2]==6)
	{
	    buffer_2[2]=0;
		buffer_2[1]=buffer_2[1]+1;
	}
    if(buffer_2[1]==10)
	{
	    buffer_2[1]=0;
		buffer_2[0]=buffer_2[0]+1;
	}
    if(buffer_2[1]==6)
	{
	    //buffer_2[1]=0;
		buffer_2[0]=0;
	}//}

}

void charge_buffer_3(void)
{
    unsigned char i=0,j=0,m,n;
	//unsigned char ;
	if(!((buffer_3[0]*10+buffer_3[1])%4)) {i=1;}         
	//else {i=0;}
    //m=buffer_3[2]*10+buffer_3[3];
	if(buffer_3[2]==0)
	{
	    if(buffer_3[3]==1||buffer_3[3]==3||buffer_3[3]==5||buffer_3[3]==7||buffer_3[3]==8)
	    {j=1;}
	}
	if(buffer_3[2]==1)
	{
	    if(buffer_3[3]==0||buffer_3[3]==2)
		{j=1;}
	}
	n=j+1;
	m=8+i+1;
    if((buffer_3[2]==0)&&(buffer_3[3]==2))
	{
        if(buffer_3[5]==10&&buffer_3[4]!=2)
	    {
	        buffer_3[5]=0;
		    buffer_3[4]=buffer_3[4]+1;
	    }
        if((buffer_3[4]>=2)&&(buffer_3[5]==m))
	    {
	        buffer_3[5]=1;
		    buffer_3[4]=0;
            if(!start_3)
		   buffer_3[3]=buffer_3[3]+1;
		}
	}
	else 
	{
	    if(buffer_3[5]==10&&buffer_3[4]!=3)
	    {
	        buffer_3[5]=0;
		    buffer_3[4]++;
	    }
        if((buffer_3[4]>=3)&&(buffer_3[5]==n))
	    {
	        buffer_3[5]=1;
		    buffer_3[4]=0;
            if(!start_3)
		   buffer_3[3]=buffer_3[3]+1;
		}
	}
    if(buffer_3[3]==10&&buffer_3[2]!=1)
	{
	     buffer_3[3]=0;
		 buffer_3[2]++;
	}
    if((buffer_3[2]>=1)&&(buffer_3[3]==3))
	{
	     buffer_3[3]=1;
		 buffer_3[2]=0;
         if(!start_3)
		buffer_3[1]=buffer_3[1]+1;
	}
    if(buffer_3[1]==10)
	{
	     buffer_3[1]=0;
		 buffer_3[0]++;
	}
    if(buffer_3[0]==10)
	{
	     buffer_3[0]=0;
	}
}


void delay_10ms()
{
    unsigned char i,j;
	for(i=0;i<119;i++)
	for(j=0;j<20;j++)
	;
	if(start_2)
	{
	    buffer_2[5]++;
		charge_buffer_2();
	}
}

void delay_100ms()
{
    unsigned char i,j;
	for(i=0;i<119;i++)
	for(j=0;j<200;j++)
	;
	/*if(start)
	{
	    buffer_2[5]++;
		charge();
	}*/
}



void init_buffer_1()
{
    buffer_1[0]=0;
    buffer_1[1]=0;
    buffer_1[2]=0;
    buffer_1[3]=0;
    buffer_1[4]=0;
    buffer_1[5]=0;
}

void init_buffer_2()
{
    buffer_2[0]=0;
    buffer_2[1]=0;
    buffer_2[2]=0;
    buffer_2[3]=0;
    buffer_2[4]=0;
    buffer_2[5]=0;
}

void init_buffer_3()
{
    buffer_3[0]=0;
    buffer_3[1]=6;
    buffer_3[2]=0;
    buffer_3[3]=9;
    buffer_3[4]=0;
    buffer_3[5]=7;
}

⌨️ 快捷键说明

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