Die digits gehen an, wenn der port low ist.
Code:
void ausgabe(void)
{
	static uint8_t digit=0;
	uint16_t temp, dez[5]={1,10,100,1000,10000};

	temp = wert / dez[digit+1] * dez[digit+1]; // führende Stellen ausblenden
	temp = (wert-temp)/dez[digit]; // Ziffer ermitteln
	temp = segmente[temp]; // Segmentmuster ermitteln

	if(dezimalpunkt == digit) temp &= ~(1<<7); // Dezimalpunkt an diesem Digit anzeigen?

	digit0_PORT |= (1<<digit0_PIN); // alle Digits ausschalten
	digit1_PORT |= (1<<digit1_PIN);
	digit2_PORT |= (1<<digit2_PIN);
	digit3_PORT |= (1<<digit3_PIN);

	if(temp & (1<<0)) segA_PORT |= (1<<segA_PIN); else segA_PORT &= ~(1<<segA_PIN);
	if(temp & (1<<1)) segB_PORT |= (1<<segB_PIN); else segB_PORT &= ~(1<<segB_PIN);
	if(temp & (1<<2)) segC_PORT |= (1<<segC_PIN); else segC_PORT &= ~(1<<segC_PIN);
	if(temp & (1<<3)) segD_PORT |= (1<<segD_PIN); else segD_PORT &= ~(1<<segD_PIN);
	if(temp & (1<<4)) segE_PORT |= (1<<segE_PIN); else segE_PORT &= ~(1<<segE_PIN);
	if(temp & (1<<5)) segF_PORT |= (1<<segF_PIN); else segF_PORT &= ~(1<<segF_PIN);
	if(temp & (1<<6)) segG_PORT |= (1<<segG_PIN); else segG_PORT &= ~(1<<segG_PIN);
	if(temp & (1<<7)) segP_PORT |= (1<<segP_PIN); else segP_PORT &= ~(1<<segP_PIN);

	switch(digit)
	{
	   case 0: digit0_PORT &= ~(1<<digit0_PIN); // Anzeigedigit auswählen
	   case 1: digit1_PORT &= ~(1<<digit1_PIN);
	   case 2: digit2_PORT &= ~(1<<digit2_PIN);
	   case 3: digit3_PORT &= ~(1<<digit3_PIN);
	}

	digit = (digit+1) & 3; // nächstes Segment auswählen (0-3)
}
Werde es gleich testen!
:)