void disp(volatile char, volatile char);
volatile char arr[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f};
volatile char *dir_f=0x30, *dir_k=0x107, *out_f=0x31, *out_k=0x108, *dir_a=0x21, *in_a=0x20;
void setup() {
*dir_f=0xff; *dir_k=0x0f; *dir_a=0x00;
volatile long min0=0, min1=0, sec0=0, sec1=0, l;
while(1){
for(l=0; l<50000; l++){
disp(0,sec0);
disp(1,sec1);
disp(2,min0);
disp(3,min1);
}
sec0++;
if(sec0>9){ sec1++; sec0=0; }
if(sec1>5){ min0++; sec1=0; }
if(min0>9){ min1++; min0=0; }
if(min1>9 || *in_a==0x01){ min1 = min0 = sec1 = sec0 = 0;}
}
}
void disp(volatile char digit, volatile char value){
*out_k=~(1<<digit);
*out_f=arr[value];
*out_f=0;
}