#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
char shi,fen,miao,shi0=-1,fen0,miao0=1, shi1,fen1,miao1,
numt0,numt1,numt2,num,num1,num2,num3,i=1,aa,nian,yue=1,ri=1;
char shi2=-1,shi3=-1,fen2,fen3,miao2=2,miao3=3,num4,num5,flag;
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delayms(uint xms) //延时
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(char shi,char fen,char miao) //显示子函数
{
char shi1,shi2,fen1,fen2,miao1,miao2;
shi1=shi%10;
shi2=shi/10;
fen1=fen%10;
fen2=fen/10;
miao1=miao%10;
miao2=miao/10;
dula=1;
P0=0x80;
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);
dula=1;
P0=0x80;
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
dula=1;
P0=table[miao1];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(1);
dula=1;
P0=table[miao2];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);
dula=1;
P0=table[fen1];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
dula=1;
P0=table[fen2];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
delayms(1);
dula=1;
P0=table[shi1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);
dula=1;
P0=table[shi2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);
}
void tiaoshi() //二十四小时制调时
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
num++;
while(!key1);
if(num==3)
num=0;
}
}
}
void tiaobiao()
{
if(num==0)
{
led1=0;led3=1;led2=1;
if(key2==0)
{
delayms(5);
if(key2==0)
shi++;
shi1++;
while(!key2);
if(shi==24)
shi=0;
if(shi1==13)
shi1=1;
}
if(key3==0)
{
delayms(5);
if(key3==0)
shi--;
shi1--;
while(!key3);
if(shi==-1)
shi=23;
if(shi1==0)
shi1=12;
}
}
if(num==1)
{
led2=0;led1=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
fen++;
fen1++;
while(!key2);
if(fen==60)
fen=0;
if(fen1==60)
fen1=0;
}
if(key3==0)
{
delayms(5);
if(key3==0)
fen--;
fen1--;
while(!key3);
if(fen==-1)
fen=59;
if(fen1==-1)
fen1=59;
}
}
if(num==2)
{
led3=0;led2=1;led1=1;
if(key2==0)
{
delayms(5);
if(key2==0)
miao++;
miao1++;
while(!key2);
if(miao==60)
miao=0;
if(miao1==60)
miao1=0;
}
if(key3==0)
{
delayms(5);
if(key3==0)
miao--;
miao1--;
while(!key3);
if(miao==-1)
miao=59;
if(miao1==-1)
miao1=59;
}
}
}
void moshi() //模式选择
{
if(key4==0)
{
delayms(5);
if(key4==0)
{
aa++;
if(aa==7)
aa=0;
while(!key4);
}
}
}
void naozhong() //闹钟设置
{
if(key1==0)
{
delayms(5);
if(key1==0)
num1++;
num4++;
num5++;
if(num1==2)
num1=0;
if(num4==2)
num4=0;
if(num5==2)
num5=0;
while(!key1);
}
}
void sznz()
{
if(num1==0)
{
led1=0;led2=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
shi0++;
if(shi0==24)
shi0=0;
while(!key2);
}
}
}
if(num1==1)
{
led2=0; led1=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
fen0++;
if(fen0==60)
fen0=0;
while(!key2);
}
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
flag++;
P1=0;
if(flag==2)
flag=0;
while(!key3);
}
}
}
void sznz1()
{
if(num4==0)
{
led1=0;led2=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
shi2++;
if(shi2==24)
shi2=0;
while(!key2);
}
}
}
if(num4==1)
{
led2=0; led1=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
fen2++;
if(fen2==60)
fen2=0;
while(!key2);
}
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
flag++;
P1=0;
if(flag==2)
flag=0;
while(!key3);
}
}
}
void sznz2()
{
if(num5==0)
{
led1=0;led2=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
shi3++;
if(shi3==24)
shi3=0;
while(!key2);
}
}
}
if(num1==1)
{
led2=0; led1=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
fen3++;
if(fen3==60)
fen3=0;
while(!key2);
}
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
flag++;
P1=0;
if(flag==2)
flag=0;
while(!key3);
}
}
}
void riqi() //调日期
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
num2++;
if(num2==3)
num2=0;
while(!key1);
}
}
}
void xgrq()
{
if(num2==0)
{
led1=0;led3=1;led2=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
nian++;
while(!key2);
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
nian--;
while(!key3);
}
}
}
if(num2==1)
{
led2=0;led1=1;led3=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
yue++;
if(yue==13)
yue=1;
while(!key2);
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
yue--;
if(yue==0)
yue=12;
while(!key3);
}
}
}
if(num2==2)
{
led3=0; led2=1;led1=1;
if(key2==0)
{
delayms(5);
if(key2==0)
{
ri++;
if(ri==32)
ri=1;
while(!key2);
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
ri--;
if(ri==0)
ri=31;
while(!key3);
}
}
}
}
void init()
{
TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void main()
{
init();
while(1)
{
moshi();
if(aa==0) //时钟24小时制
{
display(shi,fen,miao);
tiaobiao();
tiaoshi();
}
if(aa==1) //时钟12小时制
{
display(shi1,fen1,miao1);
tiaobiao();
tiaoshi();
}
if(aa==2) //日期
{
display(nian,yue,ri);
riqi();
xgrq();
}
if(aa==3) //闹钟 1
{
display(shi0,fen0,miao0);
naozhong();
sznz();
}
if(aa==4) //闹钟 2
{
display(shi2,fen2,miao2);
naozhong();
sznz1();
}
if(aa==5) //闹钟 3
{
display(shi3,fen3,miao3);
naozhong();
sznz2();
}
if(aa==6)
{
if(key1==0)
{
delayms(5);
if(key1==0)
{
TR1=~TR1;
beep=1;
P0=0xf7;
while(!key1);
}
}
if(key2==0)
{
delayms(5);
if(key2==0)
beep=1;
delayms(10000);
beep=0;
delayms(5000);
}
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
numt0++;
if(numt0==20)
{
numt0=0;
miao++; //二十四小时制
if(miao==60)
{
miao=0;fen++;
if(fen==60)
{
fen=0;shi++;
if(shi==24)
{
shi=0 ;
ri++;
if(
(ri==32&&yue==1)||(ri==30&&yue==2)||(ri==32&&yue==3)||(ri==31&&yue==4)||
(ri==32&&yue==5)||(ri==31&&yue==6)||(ri==32&&yue==7)||(ri==32&&yue==8)||
(ri==31&&yue==9)||(ri==32&&yue==10)||(ri==31&&yue==11)||(ri==32&&yue==12)
)
{
ri=1;
yue++;
}
if(yue==13)
{
yue=1;
nian++;
}
}
}
}
miao1++;
if(miao1==60) //十二小时制
{
miao1=0;
fen1++;
if(fen1==60)
{
fen1=0;
shi1++;
if(shi1==13)
{
i++;
if(i%2==0)
{
led8=0;
led7=1;
}
if(i%2!=0)
{
led8=1;
led7=0;
}
shi1=1;
}
}
}
}
}
void T1_time() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
numt1++;
if(flag==0)
{
if(numt1==20)
{
numt1=0;
if(
(shi0==shi&&fen0==fen&&miao<10)||
(shi2==shi&&fen2==fen&&miao<10)|| //闹钟响
(shi3==shi&&fen3==fen&&miao<10)
)
beep=0;
else
beep=1;
}
}
if(flag==1)
{ beep=1;
if(numt1==20)
{
numt1=0;
if(
(shi0==shi&&fen0==fen&&miao<12)||
(shi2==shi&&fen2==fen&&miao<12)|| //闹钟响
(shi3==shi&&fen3==fen&&miao<12)
)
beep=0;
}
}
}
|