typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint8 a[6];
uint16 counter = 0;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
timer1_init()
{
TMOD |= 0x10; //或等于 位操作
TMOD &= 0xdf; //与等于 TMOD = 0x10 定时器T1
TH1 = 0xFC;
TL1 = 0x67;
TR1 = 1;
}
int_init()
{
EA = 1; //打开中断
ET1 = 1; //定时器1中断
}
display_led()
{
static uint8 j = 0;
switch(j)
{
case 0:
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 0;
j++;
P0 = number[a[0]];
break;
case 1:
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 0;
j++;
P0 = number[a[1]];
break;
case 2:
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 0;
j++;
P0 = number[a[2]];
break;
case 3:
ADDR0 = 1;
ADDR1 = 1;
ADDR2 = 0;
j++;
P0 = number[a[3]];
break;
case 4:
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 1;
j++;
P0 = number[a[4]];
break;
case 5:
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 1;
j = 0;
P0 = number[a[5]];
break;
default:
break;
}
}
main()
{
ENLED = 0;
ADDR3 = 1;
timer1_init(); //定时器1初始化
int_init(); //中断初始化
while(1); //循环
}
interrupt_timer1() interrupt 3 //定时器1 中断标志位3
{
static uint32 sec = 0;
TH1 = 0xFC;
TL1 = 0x67;
counter++;
if(counter == 1000)
{
sec++;
counter = 0;
a[0] = sec%10; //对10取余
a[1] = sec/10%10;
a[2] = sec/100%10;
a[3] = sec/1000%10;
a[4] = sec/10000%10;
a[5] = sec/100000%10;
}
display_led();
}