Du gibst sie als BCD-Code aus.
Das erscheint mir am einfachsten. Jede Ziffer belegt dann 4 Bit die man direkt mit den 4 LEDs ausgeben kann:
- Alle Leds einmal an ist Start linker Sensor (15 ist keine BCD-Ziffer!)
- kurze Pause
- nacheinander jeweils die Bitmuster der Einer, Zehner, ...-Stelle anzeigen. (0 als 14?)
- Dazwischen immer kurze Pause zum Notieren der Ziffern ;)
- zweimal mit allen LEDs blinken für Start mittlerer Sensor
- Ziffern nacheinander anzeigen und notieren
- dreimal alle blinken...

So würde ich das angehen. Wie lange man die jeweiligen Ziffern darstellt hängt davon ab, wie schnell man die Bitmuster erkennen und in Ziffern umrechnen kann ;)

Gruß

mic

Ich hab's mal wie oben beschrieben umgesetzt:
Code:
#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>

void ausgabe_BCD(uint8_t startsignal, uint16_t wert)
{
   uint8_t ziffer=4;
   char ergebnis[5]  = {0,0,0,0,0}; // Speicher für 5 Ziffern bereitstellen
   while (wert >=10000) { ergebnis[0]++; wert -=10000; }
   while (wert >= 1000) { ergebnis[1]++; wert -= 1000; }
   while (wert >=  100) { ergebnis[2]++; wert -=  100; }
   while (wert >=   10) { ergebnis[3]++; wert -=   10; }
   ergebnis[4] +=wert;

// Die LEDs hängen an PB0-PB3 und werden direkt angesteuert. BCD-Bit0 ist LED0:
   while(startsignal--) // Blinken als Kennung des Wertes
	{
		PORTB |= 15; 		// alle LEDs an bedeutet Start eines neuen Wertes
		delay(1000);
		PORTB &= ~15;     // alle LEDs aus
		delay(1000);
	}
	do // die Ziffern nacheinander anzeigen (Einer zuerst)
	{
      if(ergebnis[ziffer] == 0) ergebnis[ziffer]=14; // '0' darstellbar machen
		PORTB |= ergebnis[ziffer]; // Bitmuster anzeigen
      delay(1000);
      PORTB &= ~15;              // und wieder löschen
      delay(1000);
	}while(ziffer--);
	delay(1000);
}
int main(void)
{
	led_init();

	while(1)
   {
      ausgabe_BCD(1, 12345);
      ausgabe_BCD(2, 321);
      ausgabe_BCD(3, 1357);
      ausgabe_BCD(4, 8642);
   }
   return(0);
}