#include<reg52.h>
#include<intrins.h>
#define LED P0
#define WHICH P2
#define CON 50000
#define TH_0 ((65536-CON)/256)
#define TL_0 ((65536-CON)%256)
sbit K1 = P1^7;
sbit K2 = P1^6;
sbit K3 = P1^5;
sbit K4 = P1^4;
//sbit K5 = P2^3;
sbit K6 = P1^2;
sbit K7 = P1^1;
sbit K8 = P1^0;
sbit light = P3^7;
unsigned char code NUM[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char sec=0,min=0,hour=12,n=0;
unsigned char disp[8]={0x00,0x00,0X0A,0x00,0x00,0X0A,0X00,0x00};
unsigned char scan=0xfe,i=0;
//函数声明
void delay(unsigned char);
void sca();
void black(unsigned char);
//主函数
void main()
{
LED = 0X00;
P2 = 0X00;
WHICH = scan;
TH0 = TH_0;
TL0 = TL_0;
IE = 0X82;
TMOD = 0X01;
TR0 = 1;
disp[6]=hour%10;disp[7]=hour/10;
one: while(1)
{
sca();
if(K1 == 0){while(K1 == 0)sca();light = 0;TR0 = ~TR0;goto next;}
}
next: while(1)
{
if(K2 == 0){while(K2==0)black(6);hour++;}
if(K6 == 0){while(K6==0)black(6);hour--;}
if(K3 == 0){while(K3==0)black(3);min++;}
if(K7 == 0){while(K7==0)black(3);min--;}
if(K4 == 0){while(K4==0)black(0);sec++;}
if(K8 == 0){while(K8==0)black(0);sec--;}
if(sec==60)sec=0;
if(sec==-1)sec=59;
disp[0]=sec%10;disp[1]=sec/10;
if(min==60)min=0;
if(min==-1)min=59;
disp[3]=min%10;disp[4]=min/10;
if(hour==24)hour=0;
if(hour==-1)hour=23;
disp[6]=hour%10;disp[7]=hour/10;
sca();
if(K1 == 0){while(K1 == 0)sca();light = 1;TR0 = ~TR0;goto one;}
}
}
//主函数结束
//延时函数
void delay(unsigned char a)
{
unsigned char i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);
}
//扫描函数
void sca()
{
LED=0X00;
scan=_crol_(scan,1);
if(++i==8)i=0;
WHICH=scan;
LED=NUM[disp[i]];
delay(8);
}
//挑时间闪烁函数
void black(unsigned char n)
{
LED=0X00;
scan=_crol_(scan,1);
if(++i==8)i=0;
WHICH=scan;
LED=NUM[disp[i]];
if((i == n)||(i == (n+1))){LED = 0X00;}
delay(8);
}
//计时中断
void T0_0(void) interrupt 1
{
TH0 = TH_0;
TL0 = TL_0;
if((++n)==20)
{
n=0;sec++;
if(sec==60){sec=0;min++;}
disp[0]=sec%10;disp[1]=sec/10;
if(min==60){min=0;hour++;}
disp[3]=min%10;disp[4]=min/10;
if(hour==24){hour=0;}
disp[6]=hour%10;disp[7]=hour/10;
}
}
|