51(52)单片机 定时器实现数码管时钟

51(52)单片机 定时器实现数码管时钟,第1张

单片机小白,主页第一篇文章有共通代码详解。


独立按键一:按下数码管显示小时增加(>23变00)
独立按键二:按下数码管显示分钟增加(>59变00)
独立按键三:长按关闭时钟自增后,可使用按键一.二对数码管显示时间进行更改
独立按键四:按下时钟启动

运行效果:

代码:

#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int

	 sbit button1=P3^1;
	 sbit button2=P3^0;
	 sbit button3=P3^2;
	 sbit button4=P3^3;
	 sbit add_1=P2^2;
	 sbit add_2=P2^3;
	 sbit add_3=P2^4;

     u16 n=0;
     u8 x,y,z;
	 u8 code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  
	 
//DingshiQi YanShi
void delay_ds(u8 ms)
  {
    u8 T=0;
    TMOD=0x01;
    TH0=0xfb;
    TL0=0x80;
    TR0=1;
    while(T<ms)
    {
     if(TF0==1)
	   {
	    TF0=0;
	  	TH0=0xfb;
        TL0=0x80;
	    T++;
	   }
    }
    
  }//1.25*ms
	

//shuaxin
void shuaxin()
 { 
	 add_1=0;
     add_2=0;
     add_3=0;
	 P0=table[z%10];   
	 delay_ds(1);	
	 P0=0x00;    //01
			
	 add_1=1;
	 add_2=0;
	 add_3=0;
     P0=table[z/10%10];
     delay_ds(1);	
	 P0=0x00;    //02
	 
	 add_1=0;
	 add_2=1;
	 add_3=0;
	 P0=0x40;
     delay_ds(1);	
	 P0=0x00;    //03
	 
	 add_1=1;
	 add_2=1;
	 add_3=0;
	 P0=table[y%10];
     delay_ds(1);	
	 P0=0x00;    //04
	 
	 add_1=0;
     add_2=0;
     add_3=1;
	 P0=table[y/10%10];   
	 delay_ds(1);	
	 P0=0x00;    //05
			
	 add_1=1;
	 add_2=0;
	 add_3=1;
     P0=0x40;
     delay_ds(1);	
	 P0=0x00;    //06
	 
	 add_1=0;
	 add_2=1;
	 add_3=1;
	 P0=table[x%10];
     delay_ds(1);	
	 P0=0x00;    //07
	 
	 add_1=1;
	 add_2=1;
	 add_3=1;
	 P0=table[x/10%10];
     delay_ds(1);	
	 P0=0x00;    //08
 }	//11.25ms
	
 
//1 s
void Ding_shi()
  { 
	u8 T=0;
    TMOD=0x01;
    TH0=0xf7;
    TL0=0x00;    //2.5ms
	shuaxin(); 
    TR0=1;
    while(T<80)
    {
     if(TF0==1)
	   {
	      TF0=0;
		  TH0=0xf7;
          TL0=0x00;    //2.5
		  shuaxin();   //10          12.5ms*79=987.5ms
		  T++;
	   }
    }
  }

//
void Ding_shi01()
  { 
	u8 T=0;
    TMOD=0x01;
    TH0=0xf7;
    TL0=0x00;    //1.25ms
    TR0=1;
    while(T<20)
    {
     if(TF0==1)
	   {
	      TF0=0;
		  TH0=0xf7;
          TL0=0x00;    //1.25
		  shuaxin();   //20           12.5ms*79=987.5ms
		  T++;
	   }
    }
  }
	




void main()
{  
   u8 k,j;
   k=j=0;
   button1=0xff;
   button2=0xff; 
   button3=0xff;
   button4=0xff;

	
   while(1)
   {       
       
	  shuaxin(); 	
		 
     if(button1==0)
	    {
	     delay_ds(2);
	     if(button1==0)
	     {
	       while(!button1)
	        { 
                 x++;
                 
			     if(x>23)
			    	x=0;
			    	
				Ding_shi01();
	        }
	        
	     }
	     
	    }
			
			
	   if(button2==0)
	    {
	     delay_ds(2);
	     if(button2==0)
	     {
	       while(!button2)
          {
		
	            y++;
	            
			    if(y>59)
				  y=0;
				  
			    Ding_shi01();			
						
          }
	    
			 }
		 }
			
		
		if(button3==0)
	    {
	     delay_ds(3);
	     if(button3==0)
	     {
	       while(!button3)
           {
				shuaxin();
	        }
	      }	
	     }			                                                     
		
		           
		if(button4==0)
	    {
	     delay_ds(2);
	     if(button4==0)
	     {  
		   while(!button4)
		   {
	         while(1)
	         {
					 
					 z++;
					
					 if(z>59)
					 { y++;
					   z=0;}
					   if(y>59)
						 { x++;
						   y=0;}
						   if(x>23)
							   x=0;
							   
					 Ding_shi();
							 
					 if(button3==0)
	                   break;																					
	
			   }
			 }
       }
    } 
  }			
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/607532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)

保存