#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
uchar sceond0,minute0,hour0,sceond1,minute1,hour1,sceond2,minute2,hour2,
u,alarmflag,alarmflag1,key0,key1,key2,key3,option;
uchar t[3]={0,0,0};
uchar Tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示字符0-9
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
void timeshow(uchar hour,uchar minute,uchar sceond);
void functionchoice();
void lightfunction();
void alarmfunction();
void timecontrol();
timer0 (void) interrupt 1 using 1
{
u++;
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
}
void delay()
{
uchar p,q;
for(p=1000;p>0;p--)
for(q=10;q>10;q++);
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
option=0;
alarmflag1=0;
hour0=0,minute0=0,sceond0=0,hour1=0,minute1=0,sceond1=0,hour2=0,minute2=0;
while(1)
{
functionchoice();
lightfunction();
alarmfunction();
delay();
}
}
/*******时间显示功能*******/
void timeshow(uchar hour,uchar minute,uchar sceond)
{
uchar a1,a2,b1,b2,c1,c2;
a1=hour%10;
a2=hour/10;
b1=minute%10;
b2=minute/10;
c1=sceond%10;
c2=sceond/10;
P2=0x7f;
P0=Tab[c1];
delay();
P2=0xbf;
P0=Tab[c2];
delay();
P2=0xdf;
P0=0x40;
delay();
P2=0xef;
P0=Tab[b1];
delay();
P2=0xf7;
P0=Tab[b2];
delay();
P2=0xfb;
P0=0x40;
delay();
P2=0xfd;
P0=Tab[a1];
delay();
P2=0xfe;
P0=Tab[a2];
delay();
}
/*******自动计时功能*******/
void timecontrol()
{
if(u==20)
{
u=0;
sceond0++;
while(sceond0==60)
{
sceond0=0;
minute0++;
if(minute0==60)
{
minute0=0;
hour0++;
if(hour0==24)
hour0=0;
}
}
}
}
/*******时间调节功能*******/
void keycontrol(uchar hour,uchar minute,uchar sceond)
{
if(P1_0==0)
{
delay();
if(P1_0==0&&key1==1)
{
key1=0;
sceond++;
if(sceond==60)
sceond=0;
delay();
}
}
if(P1_0==1)
key1=1;
if(P1_1==0)
{
delay();
if(P1_1==0&&key2==1)
{
key2=0;
minute++;
if(minute==60)
minute=0;
delay();
}
}
if(P1_1==1)
key2=1;
if(P1_2==0)
{
delay();
if(P1_2==0&&key3==1)
{
key3=0;
hour++;
if(hour==24)
hour=0;
delay();
}
}
if(P1_2==1)
key3=1;
t[0]=sceond;
t[1]=minute;
t[2]=hour;
}
/*******功能选择*******/
void functionchoice()
{
if(P1_3==1)
key0=1;
if(P1_3==0&&key0==1)
{
key0=0;
option++;
if(option==3)
option=0;
}
if(option==0)
{
hour1=hour0,minute1=minute0,sceond1=sceond0;
TR0=1;
timecontrol();
timeshow(hour0,minute0,sceond0);
delay();
}
if(option==1)
{
hour0=hour1,minute0=minute1,sceond0=sceond1;
TR0=0;
keycontrol(hour1,minute1,sceond1);
hour1=t[2],minute1=t[1],sceond1=t[0];
timeshow(hour1,minute1,sceond1);
delay();
}
if(option==2)
{
TR0=0;
keycontrol(hour2,minute2,sceond2);
hour2=t[2],minute2=t[1],sceond2=t[0];
timeshow(hour2,minute2,sceond2);
delay();
}
}
/*******照明功能*******/
void lightfunction()
{
if(P1_5==0)
P3_1=0;
else
P3_1=1;
}
/*******闹钟功能*******/
void alarmfunction()
{
if(P1_4==0)
alarmflag1=1;
if(hour2==hour0&&minute2==minute0)
alarmflag=1;
else
{
alarmflag=0;
alarmflag1=0;
}
if(alarmflag==1&&alarmflag1==0)
P3_0=0;
else
P3_0=1;
}