📄 clock.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 + -