#include<reg51.h> //定义声明
#define uchar unsigned char
#define uint unsigned int
#define HANG P0
#define HANG2 P2
sbit keystop=P1^0;
sbit keySec=P1^1;
sbit keyMin=P1^2;
sbit keyHour=P1^3;
uchar code hang[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code hang2[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar sec=21;
uchar min=21;
uchar hour=21;
//延时
void delay(uint num)
{
uint i,j;
for(i=num;i>0;i--) //
for(j=120;j>0;j--);
}
//按键
void anjian()
{
if(!keystop)
{
delay(10);
if(!keystop)
{TR0=~TR0; while(!keystop); } //TR0=1定时器开关
}
if(!keySec)
{
delay(10);
if(!keySec)
{sec++; while(!keySec); }
if(sec==60)
{sec=0;}
}
if(!keyMin)
{
delay(10);
if(!keyMin)
{min++; while(!keyMin); }
if(min==60)
{min=0;}
}
if(!keyHour)
{
delay(10);
if(!keyHour)
{hour++; while(!keyHour); }
if(hour==24)
{hour=0;}
}
}
//主函数
void main()
{
TMOD=0X02; //定时器工作方式2
TH0=(65536-45872)/256; //赋初值
TL0=(65536-45872)%256;
ET0=1; //开启中断
EA=1;
TR0=1; //定时器开始
while(1)
{
HANG=hang[7]; //第一行第七个秒的个数
HANG2=hang2[sec%10];
delay(1);
HANG=hang[6]; //秒的十位
HANG2=hang2[sec/10]; //取整
delay(1);
HANG=hang[5]; //分号
HANG2=hang2[10];
delay(1);
HANG=hang[4]; //分的个位
HANG2=hang2[min%10];
delay(1);
HANG=hang[3];
HANG2=hang2[min/10];
delay(1);
HANG=hang[2];
HANG2=hang2[10];
delay(1);
HANG=hang[1];
HANG2=hang2[hour%10];
delay(1);
HANG=hang[0];
HANG2=hang2[hour/10];
delay(1);
anjian();
}
}
//中断
void timer0() interrupt 1 //声明是中断
{ int a=0;
TH0=(65536-45872)/256; //计算一遍0.05重置初值
TL0=(65536-45872)%256;
a++;
if(a==20) //计算20次=1秒
{
a=0;
sec++;
}
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
|