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

📄 clock.c

📁 该项目在Keil下工作和在PROTEUS测试成功。时钟是用微控制器和3個 2x7段LED 。
💻 C
字号:
#include <REG51.h>
#define SECOND_1 0;
#define SECOND_2 1;
#define MINUTE_1 2;
#define MINUTE_2 3;
#define HOUR_1 4;
#define HOUR_2 5;
unsigned char code displayCode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
unsigned long data cnt;
unsigned long data redisplay;
unsigned int data second;
unsigned int data minute;
unsigned int data hour;
unsigned int data type;
unsigned int data displayData;
sbit e0 = P3^2;
sbit add=P1^0;
sbit second_1=P2^0;
sbit second_2=P2^1;
sbit minute_1=P2^2;
sbit minute_2=P2^3;
sbit hour_1=P2^4;
sbit hour_2=P2^5;
void displayWhenChange(bit data changeType);
void display();
void delay_E(long data time);
void timing();
void delay(long data time);
void main(){
	TH0=56;
	TL0=56;
	TMOD=TMOD|0x02;
	TMOD=TMOD&0xF2;
	PX0=1;
	PT0=0;
	EX0=1;
	EA=1;
	ET0=1;
	TR0=1;
	cnt=0;
	second_1=1;
	second_2=1;
	minute_1=1;
	minute_2=1;
	hour_1=1;
	hour_2=1;
	second=59;
	minute=10;
	redisplay=0;
	hour=9;
	type=SECOND_1;
	displayData=second;
	while(1){
	
	}	
}
void ex0() interrupt 0 using 1{
	int data changeFlag=0;
	EA=0;
	delay_E(2000);	
	while(1){
	    
		delay(100);		
		if(e0==0){		
			
			changeFlag=changeFlag+1;
			
			delay_E(2000);
		}
		if(changeFlag==0)displayWhenChange(0);
		else if(changeFlag==1)displayWhenChange(1);
		else break;		
	   	
		if(add==0){
			
			switch(changeFlag){
				case 0:
					minute=(minute+1)%60;
					break;
				case 1:
					hour=(++hour)%24;
					break;
			}
		
		delay_E(2000);
		}
	}
	delay_E(2000);
	EA=1;
}
void t0() interrupt 1 using 2{
	 if(1){
	 display();
	 
	 }
	 
	 timing();
	
}

void display(){
	switch(type){
		case 0:	
			hour_2=1;		
			P0=displayCode[displayData%10];
			second_1=0;
			type=SECOND_2;				
			break;
		case 1:			
			second_1=1;
			P0=displayCode[displayData/10];
			second_2=0;
			type=MINUTE_1;
			displayData=minute;	
			break;
		case 2:
			second_2=1;
			P0=displayCode[displayData%10];
			minute_1=0;
			type=MINUTE_2;		
			break;
		case 3:
			minute_1=1;
			P0=displayCode[displayData/10];
			minute_2=0;
			type=HOUR_1;
			displayData=hour;
			break;
		case 4:
			minute_2=1;
			P0=displayCode[displayData%10];
			hour_1=0;
			type=HOUR_2;
			break;
		case 5:
			hour_1=1;
			P0=displayCode[displayData/10];
			hour_2=0;
			type=SECOND_1;
			displayData=second;
			break;
		default:
			break;			
	}
}
void timing(){
	if((cnt++)==4999){
		if(second==59){
			if(minute==59){
				hour=(++hour)%24;
				minute=0;
			}
			else minute++;
			second=0;
		}
		else second++;
		cnt=0;
	}	
}
void displayWhenChange(bit data changeType){
	 bit data flag=0;
	 if((redisplay++)>=30){
	 	flag=1;
	 }

	if (changeType==0){
			switch(type){
			case 0:	
				hour_2=1;		
				P0=displayCode[displayData%10];
				second_1=0;
				type=SECOND_2;				
				break;
			case 1:			
				second_1=1;
				P0=displayCode[displayData/10];
				second_2=0;
				type=MINUTE_1;
				displayData=minute;	
				break;
			case 2:
				second_2=1;
				if(flag){				
					P0=displayCode[displayData%10];
					minute_1=0;
					flag=0;			
					type=MINUTE_2;
					redisplay=0;
				}
				else {
					type=HOUR_1;
					displayData=hour;
				}
				
				break;
			case 3:
				minute_1=1;
				P0=displayCode[displayData/10];
				minute_2=0;
				type=HOUR_1;
				displayData=hour;
				break;
			case 4:
				minute_2=1;
				P0=displayCode[displayData%10];
				hour_1=0;
				type=HOUR_2;
				break;
			case 5:
				hour_1=1;
				P0=displayCode[displayData/10];
				hour_2=0;
				type=SECOND_1;
				displayData=second;
				break;
			default:
				break;			
		}
		}
		if(changeType==1){
			switch(type){
		case 0:	
			hour_2=1;		
			P0=displayCode[displayData%10];
			second_1=0;
			type=SECOND_2;				
			break;
		case 1:			
			second_1=1;
			P0=displayCode[displayData/10];
			second_2=0;
			type=MINUTE_1;
			displayData=minute;	
			break;
		case 2:
			second_2=1;
			P0=displayCode[displayData%10];
			minute_1=0;
			type=MINUTE_2;		
			break;
		case 3:
			minute_1=1;
			P0=displayCode[displayData/10];
			minute_2=0;
			type=HOUR_1;
			displayData=hour;
			break;
		case 4:
			minute_2=1;
			if(flag){
			P0=displayCode[displayData%10];
			hour_1=0;
			type=HOUR_2;
			redisplay=0;
			}
			else{
				type=SECOND_1;
				displayData=second;
			}
			break;
		case 5:
			hour_1=1;
			P0=displayCode[displayData/10];
			hour_2=0;
			type=SECOND_1;
			displayData=second;
			break;
		default:
			break;			
	}
				
		}		
}

void delay(long data time){
	long data i=0;
	for(;i<time;i++);	
}
void delay_E(long data time){
	long data i=0;
	for(;i<time;i++)display();
}

⌨️ 快捷键说明

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