#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
sbit k1= P3^0 ;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uchar code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x40, //"-"
0x00, //熄灭
};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void main()
{
uchar a;
uchar sec,min,hour;
uint year=2016;
uint mou=12;
uint day=9;
uint Yqian,Ybai,Yshi,Yge,Mshi,Mge,Dshi,Dge;
uint shi1,ge1,shi2,ge2,shi3,ge3;
TR0 = 1;
TMOD = 0x01;
TH0 = (65535-5000)/0xff;
TL0 = (65535-5000)%0xff;//0x4bfc 定时50ms
while(1)
{
if(TF0 == 1)
{
TH0 = (65535-5000)/0xff;
TL0 = (65535-5000)%0xff;
TF0 = 0;
a++;
}
if(a == 40)
{
sec++;
a = 0;
}
if(sec==60)
{
min++;
sec=0;
}
if(min==60)
{
hour++;
min=0;
}
if(hour==60)
{
hour=0;
hour++;
}
if(hour==24)
{
day++;
hour=0;
}
if(day==31)
{
mou++;
day=0;
}
if(mou==13)
{
year++;
mou=0;
}
shi1=hour%10;
ge1=hour/10;
shi2=min%10;
ge2=min/10;
shi3=sec%10;
ge3=sec/10;
P0 = 0xff;
we = 1;
P0 = 0xbf;
we = 0;
du = 1;
P0 = leddata[ge3];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0x7f;
we = 0;
du = 1;
P0 = leddata[shi3];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xdf;
we = 0;
du = 1;
P0 = leddata[10];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xfb;
we = 0;
du = 1;
P0 = leddata[10];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xef;
we = 0;
du = 1;
P0 = leddata[shi2];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xf7;
we = 0;
du = 1;
P0 = leddata[ge2];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xfd;
we = 0;
du = 1;
P0 = leddata[shi1];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xfe;
we = 0;
du = 1;
P0 = leddata[ge1];
du = 0;
delay(3);
if(k1==0)
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
while(!k1) //按键时显示日期
{
Yqian=year/1000;
Ybai=year%1000/100;
Yshi=year%1000%100/10;
Yge=year%10;
Mshi=mou/10;
Mge=mou%10;
Dshi=day/10;
Dge=day%10;
P0 = 0xff;
we = 1;
P0 = 0xfe;
we = 0;
du = 1;
P0 = leddata[Yqian];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xfd;
we = 0;
du = 1;
P0 = leddata[Ybai];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xfb;
we = 0;
du = 1;
P0 = leddata[Yshi];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xf7;
we = 0;
du = 1;
P0 = leddata[Yge];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xef;
we = 0;
du = 1;
P0 = leddata[Mshi];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xdf;
we = 0;
du = 1;
P0 = leddata[Mge];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0xbf;
we = 0;
du = 1;
P0 = leddata[Dshi];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0x7f;
we = 0;
du = 1;
P0 = leddata[Dge];
du = 0;
delay(3);
}
}
while(!k1);
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
while(!k2)
{
uchar i;
uchar sec2,Sshi,Sge;
Sshi=sec2/10;
Sge=sec2%10;
TR0 = 1;
TMOD = 0x01;
TH0 = (65535-5000)/0xff;
TL0 = (65535-5000)%0xff;//0x4bfc 定时50ms
if(TF0 == 1)
{
TH0 = (65535-5000)/0xff;
TL0 = (65535-5000)%0xff;
TF0 = 0;
i++;
}
if(i== 160)
{
sec2++;
i = 0;
}
if(sec2==60)
{
sec2=0;
}
P0 = 0xff;
we = 1;
P0 = 0xbf;
we = 0;
du = 1;
P0 = leddata[Sshi];
du = 0;
delay(3); //
P0 = 0xff;
we = 1;
P0 = 0x7f;
we = 0;
du = 1;
P0 = leddata[Sge];
du = 0;
delay(3); //
}
while(!k2) ;
}
}
if(k3==0)
{
delay(1000);
if(k3==0)
{
while(!k3)
{ TR0=0;
sec--;
while(!k3);}
}while(!k3);
}
if(k4==0)
{
delay(1000);
if(k4==0)
{
TR0=1;
}
}
}
}
|