基于AT89C52实现按键调节计时时钟

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNDU5MjA2ODI=,size_20,color_FFFFFF,t_70,g_se,x_16

 

#include<reg52.h>
#include<intrins.h>

typedef unsigned char u2;
typedef unsigned int u1;                               
u2 position,tt,second,minute,hour;          
u2 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P2_0= P2^0; 
sbit P2_1= P2^1; 
sbit P2_2= P2^2;
sbit P2_3= P2^3; 
sbit s1=P3^5;                
sbit s2=P3^4;
sbit s3=P3^3;
sbit s4=P3^2;
sbit led0=P1^0;
sbit led2=P1^2;
sbit led4=P1^4;
sbit led6=P1^6;

//函数声明
void keyscan(); 
void Delay1000ms();    
void display(u2 hour,u2 minute);
void init();
void delay(u1 i);

//主函数
void main()
{
         init();                                    
         while(1)
         {
                 if(tt!=0)
       {               
         second++;
        if(second==60)
         {
          second=0;
                     minute++;
          if(minute==60)
            {      minute=0;                                                                                                                          
              hour++;                        
                            
              if(hour==24)
                                    hour=0;                                
            }
         }
       }  
                 keyscan();
                   display(hour,minute);
                 Delay1000ms();                     
         }
}

//显示函数
void display(u2 hour,u2 minute)
{           
        switch(position)
         {
         case 0:              
                   
                         
                 P2_0=0;
         P2_1=1; 
         P2_2=1; 
         P2_3=1;                      
                   P0=table[hour/10];                      
                   break;
         case 1:    

         P2_0=1;
         P2_1=0; 
         P2_2=1; 
         P2_3=1;                                       
                   P0=table[hour%10];
                                                      
                   break;
         case 2:    


                P2_0=1;
         P2_1=1; 
         P2_2=0; 
         P2_3=1;                      
                   P0=table[minute/10];
                                   

                   break;
         case 3:    

                 P2_0=1;
         P2_1=1; 
         P2_2=1; 
         P2_3=0;                      
                   P0=table[minute%10]; 

                   break;
         }
         position++;               
         if(position>3)
                   position=0;      
                 
}

 // 独立按键调时函数                                                                              

 void keyscan()
{
         if(s1==0)      
         {
                         led0=~led0;
                   TR0=0;
                   hour++;
                     
                            if(hour==24)
                                     hour=0;
                   delay(1);
                   TR0=1;
         }
         if(s2==0)                 
         {
                     led2=~led2;
                   TR0=0;
                   hour--;
                            if(hour<0)
                                     hour=23;
                   delay(1);
                   TR0=1;
         }
         if(s3==0)                  
         {
                     led4=~led4;
                   TR0=0;
                   minute++;
                            if(minute==60)
                                     minute=0;
                   delay(1);
                   TR0=1;
         }
         if(s4==0)                   
         {
                     led6=~led6;
                   TR0=0;
                   minute--;
                            if(minute<0)
                                     minute=59;
                   delay(1);
                   TR0=1;
         }
}

//初始化函数
void init()
{

         tt=0;
         position=0;               
         second=0; 
         minute=48;        
         hour=15;          
         P2_0=1; 
         P2_1=1; 
         P2_2=1; 
         P2_3=1;     
         s1=1;
         s2=1;
         s3=1;
           s4=1;
         TMOD=0X01;  
         TH0=0XFC;      
         TL0=0X18;
         EA=1;                
         ET0=1;              
         TR0=1; 
}

//延时函数

void delay(u1 i)
{
    while(i--);
}

//计时器t0中断函数
void t0() interrupt 1
{
        static u1 i;
         TH0=0XFC;      
         TL0=0X18;
           i++;
           tt++;
    
    if(i==1000)
    {
        i=0;        
        
  }
}

//精确定义1秒函数

void Delay1000ms()        
{
    u2 i, j, k;

    _nop_();
    i = 7;
    j = 154;
    k = 122;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}



 

 

 

 

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1_轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值