Hallo,
sowas läßt sich ziemlich einfach programmieren, z.B. so:

zuerst ein Array, wo die Zahlen 0-9 gespeichert sind bei mir so:
Code:
const uint8_t zeichen[] ={
		0x3F,			/*0*/
		0x18,			/*1*/
		0x6D,			/*2*/
		0x7C,			/*3*/
		0x5A,			/*4*/
		0x76,			/*5*/
		0x77,			/*6*/
		0x1C,			/*7*/
		0x7F,			/*8*/
		0x7E			/*9*/
		};
Dann brauchst Du zwei Variablen, die Deine zwei Zahlen darstellen:
Code:
volatile uint8_t erste = 1;
volatile uint8_t zweite = 2;
Jetzt schmeißt Du einen Timer an und in seinem Overflowinterrupt kommt folgendes rein :
Code:
static uint8_t zahl = 0;/*Spechert Welche Zahl dran ist*/

 if (zahl){
	  PORTB &=~(1<<ENABLE2);
	  PORTB |=(1<<ENABLE1);
	  PORTD = ~(zeichen[erste]);
	  zahl=0;
  } else {
	  PORTB &=~(1<<ENABLE1);
	  PORTB |=(1<<ENABLE2);
	  PORTD = ~(zeichen[zweite]);
	  zahl=1;
  }
So, am PortD kamen bei mir die Anoden, und am PortB die Beiden Kathoden die mit ENABLE1 u. ENABLE2 definiert sind.

Du brauchst auch kein Timer von 1 MHz, ich glaube ich habe irgendwas um 200 Hz oder so, muß mal probieren, was nicht mehr flackert.

Ich hoffe, ich konnte Dir damit etwas helfen.

Gruß Sebastian