📄 time.txt
字号:
#include <REG51.H>
//#include <AT89X51.H>
#define uint unsigned
#define TIMER0_COUNT 0xEE18
#define TRUE 1
#define FALSE 0
#define TIMES 25
#define DISPLAY 0
#define SET 1
sbit P3_0 = P3^4;
sbit P3_1 = P3^5;
sbit P1_7 = P1^7;
const seven_seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
const scan[4]={0x0E,0x0D,0x0B,0x07};
typedef struct{
char hour;
char minute;
char second;
}time;
unsigned char timer0_tick,i=0,keyA=0,keyB=0,mode=0;
time now;
static void timer0_isr(void) interrupt 1 using 1
{
TR0=0;
TL0=(TIMER0_COUNT&0x00FF);
TH0=(TIMER0_COUNT>>8);
TR0=1;
if(keyA!=0){
keyA--;
if(keyA==0&&P3_0==0){
mode++;
if(mode==2) mode=0;
}
}else if(P3_0==0) keyA=TIMES;
if(keyB!=0){
keyB--;
if(keyB==0&&P3_1==0){
now.minute++;
if(now.minute==60){now.hour++;
now.minute=0;
if(now.hour==24) now.hour=0;
}
}
}else if(P3_1==0) keyB=TIMES;
timer0_tick++;
if(timer0_tick==200){
timer0_tick=0;
now.second++;
if(now.second==60){now.minute++;
now.second=0;
if(now.minute==60){
now.hour++;
now.minute=0;
if(now.hour==24) now.hour=0;
}
}
}
switch (mode){
case DISPLAY:
switch(i){
case 0: P1=seven_seg[now.minute%10];
P1_7=(now.second%2);
break;
case 1: P1=seven_seg[now.minute/10];
break;
case 2: P1=seven_seg[now.hour%10];
P1_7=0;
break;
case 3: P1=seven_seg[now.hour/10];
break;
} break;
case SET:
switch(i){
case 0: if(now.second%2)P1=seven_seg[now.minute%10];
else P1=0xFF;
break;
case 1: if(now.second%2)P1=seven_seg[now.minute/10];
else P1=0xFF;
break;
case 2: if(now.second%2)P1=seven_seg[now.hour%10];
else P1=0xFF;
break;
case 3: if(now.second%2) P1=seven_seg[now.hour/10];
else P1=0xFF;
break;
}
break;
}
P0=scan[i];
i++;
if(i==4) i=0;
}
static void timer0_initialize(void)
{
EA=0;
timer0_tick=0;
TR0=0;
TMOD &=0xf0;
TMOD |=0x01;
TL0=(TIMER0_COUNT & 0x00FF);
TH0=(TIMER0_COUNT >>8);
PT0=0;
ET0=1;
TR0=1;
EA=1;
}
void main (void)
{
timer0_initialize();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -