51单片机之数字钟

#include "reg52.h"
#include<stdio.h> 
sbit PA = P2^0;
sbit PB = P2^1;
sbit PC = P2^2;
sbit Button0 = P3^3;   
sbit Button1 = P2^3;
sbit Button2 = P2^4;
sbit Button3 = P2^5;
sbit Button4 = P2^6; 
char digital[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
bit flag = 0;
char count = 0;
char count_adjust=-1;
char num[4]={0};
char clk[8]={0};
int a = -4760; 
void delay(long int i){	
    while(i){		
	i--;	
    }
}
void Display(char i,char num){	
    switch(i)	{		
        case(0):PA=1;PB=1;PC=1;break;		
        case(1):PA=0;PB=1;PC=1;break;		
        case(2):PA=1;PB=0;PC=1;break;		
        case(3):PA=0;PB=0;PC=1;break;		
        case(4):PA=1;PB=1;PC=0;break;		
        case(5):PA=0;PB=1;PC=0;break;		
        case(6):PA=1;PB=0;PC=0;break;		
        case(7):PA=0;PB=0;PC=0;break;	
   }
   P0 = digital[num];	
   delay(100);
   P0 = 0x00;
}
void dis_clock(char i0,char i1,char i2,char i3,char i4,char i5,char i6,char i7){		
    Display(0,i0);		
    Display(1,i1);		
    Display(2,i2);		
    Display(3,i3);		
    Display(4,i4);		
    Display(5,i5);		
    Display(6,i6);		
    Display(7,i7);
}
void clock(void) interrupt 3
{
    TL1 = a%256;
    TH1 = a/256;
    count++;
    if(count==2){
    	flag = 1;
    	count = 0;
    	num[0]++;
   	if(num[0]==100){
   	    num[0]=0;
   	    num[1]++;
   	    if(num[1]==60){
    		num[1]=0;
    	        num[2]++;
    	        if(num[2]==60){
     		    num[2]=0;
     		    num[3]++;
     		    if(num[3]==24){
      			num[3]=0;
     		    }
     		}
   	    }
  	}
     clk[0] = num[0]%10;
     clk[1] = num[0]/10;
     clk[2] = num[1]%10;
     clk[3] = num[1]/10;
     clk[4] = num[2]%10;
     clk[5] = num[2]/10;
     clk[6] = num[3]%10;
     clk[7] = num[3]/10; 
    } 
}
void adjust(void) interrupt 2
{
    char i = 30;
    bit flag_ad = 1;
    while(flag_ad){
    dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
    if(!Button0){
        count_adjust = (count_adjust+1)%3;
        while(i--){
            dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
        }
        i = 30;
    }
    if(!Button1){
        flag_ad = 0;
        while(i--){
            dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
        }
        i =30;
    }
    if(count_adjust!=-1){
        if(!Button2){
        switch(count_adjust){
        //调整秒
              case 0:
                  if(clk[2]!=9) {clk[2]++; num[1]++;}
                  else if(clk[3]!=5){ clk[2]=0;clk[3]++;num[1]++;}
                  else {clk[2]=0;clk[3]=0;num[1]=0;}
                  break;
        //调整分
              case 1:
                  if(clk[4]!=9) {clk[4]++; num[2]++;}
                  else if(clk[5]!=5){ clk[4]=0;clk[5]++;num[2]++;}
                  else {clk[4]=0;clk[5]=0;num[2]=0;}
                  break;
        //调整时
              case 2:
                  if(clk[6]!=3){ clk[6]++;num[3]++; }
                  else if(clk[7]!=2){ clk[6]=0;clk[7]++;num[3]++;}
                  else {clk[6]=0;clk[7]=0;num[3]=0;}
                  break;
        }
    dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
    while(i--){
        dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
    }
    i = 30;
   }
   if(!Button3){
       switch(count_adjust){
       //调整秒
            case 0:
                if(clk[2]!=0) {clk[2]--;num[1]--;}
                else if(clk[3]!=0){ clk[2]=9;clk[3]--;num[1]--;}
                else {clk[2]=9;clk[3]=5;num[1]=59;}
                break;
      //调整分
            case 1:
                if(clk[4]!=0) {clk[4]--;num[2]--;}
                else if(clk[5]!=0){ clk[4]=9;clk[5]--;num[2]--;}
                else {clk[4]=9;clk[5]=5;num[2]=59;}
                break;
      //调整时
            case 2:
                if(clk[6]!=0){ clk[6]--;  num[3]--;}
                else if(clk[7]!=0){ clk[6]=9;clk[7]--;num[3]--;}
                else {clk[6]=2;clk[7]=3;num[3]=23;}
                break;
        }
    dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
    while(i--){
        dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
    }
    i = 30;
   }
  }
  if(!Button4){ 
       dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]); 
       flag_ad = 0; count_adjust = -1;
       while(i--){
           dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
       }
       i = 30;
  } 
 }       
}
void main(){
   PX1 = 1;
   EX1 = 1;
   TR1 = 1;
   EA = 1;
   ET1 = 1;
   TMOD = 0x10;
   TL1 = a%256;
   TH1 = a/256;
   while(1){
       dis_clock(clk[0],clk[1],clk[2],clk[3],clk[4],clk[5],clk[6],clk[7]);
   }
}



  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小陈的芯片学习之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值