#include<reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
unsigned char LedChar[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
unsigned char LedBuff[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
unsigned char flag1s=0;
unsigned int cnt=0;
unsigned char i=0;
void main()
{ unsigned long sec=0xF;
ADDR3=1;
ENLED=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
TR0=1;
while(1)
{ if(flag1s==1)
{ flag1s=0;
if(sec>0)
{sec--;
}
else
{sec=0x00;
}
LedBuff[0]=LedChar[sec%10];
LedBuff[1]=LedChar[sec/10%10];
LedBuff[2]=LedChar[sec/100%10];
LedBuff[3]=LedChar[sec/1000%10];
LedBuff[4]=LedChar[sec/10000%10];
LedBuff[5]=LedChar[sec/100000%10];
}
}
}
void InterruptTimer0() interrupt 1
{ TH0=0xFC;
TL0=0x67;
cnt++;
if(cnt>=1000)
{ cnt=0;
flag1s=1;
}
P0=0xFF; //消隱//
switch (i)
{case 0:ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];break;
case 1:ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];break;
case 2:ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];break;
case 3:ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];break;
case 4:ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];break;
case 5:ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];break;
default:break;
}
}