#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);
}