ich hatte es davor mit nur 3 Bytes versucht um dann festzustellen dass der Dezimalpunkt weg war.

meine Anzeige Routine ist hier: (vielleicht nicht die beste aber sie funktioniert)

Code:
#define DATENRICHTUNG DDRD
#define ANZEIGEPORT PORTD


#define SER PD2
#define SCK PD3
#define SCL PD4
#define RCK PD5



void InitAnzeige(void)
{

	DATENRICHTUNG |= ((1<<SER) | (1<<SCK) | (1<<SCL) | (1<<RCK) );

	ANZEIGEPORT |= (1<<SCL);

}
void Impuls(void)
{
	ANZEIGEPORT &= ~(1<<SCK);
	//_delay_us(10);
	ANZEIGEPORT |= (1<<SCK);
	//	_delay_us(10);
	ANZEIGEPORT &= ~(1<<SCK);
}
void Clear(void)
{
	ANZEIGEPORT &= ~(SCL<<1);
	ANZEIGEPORT |= (SCL<<1);
}
void Ausgeben(void)
{
	ANZEIGEPORT &= ~(1<<RCK);

	ANZEIGEPORT |= (1<<RCK);

	ANZEIGEPORT &= ~(1<<RCK);

}


void Write(char *number)
{
	Clear();

	static	uint8_t zahl1 = 0;
	static  uint8_t zahl2 = 0;
	uint8_t i = 0;
	char dotpoint =' ';

	while (*number)
	{
		if(i == 0)
		{
			zahl1 = (uint8_t) *number;
		}
		if(i == 1)
		{

			dotpoint = *number;
		}
		if(i == 2)
		{
		
			zahl2 = (uint8_t) *number;
		}
		
		number++;
		i++;
	}
	
	

	struct 
	{
		unsigned A1:1;
		unsigned B1:1;
		unsigned C1:1;
		unsigned D1:1;
		unsigned E1:1;
		unsigned F1:1;
		unsigned G1:1;
		unsigned DP1:1;

		unsigned A2:1;
		unsigned B2:1;
		unsigned C2:1;
		unsigned D2:1;
		unsigned E2:1;
		unsigned F2:1;
		unsigned G2:1;
		unsigned DP2:1;
	}Segmente;

	if(dotpoint == '.')
	{
		Segmente.DP1 = 1;

	}

	switch(zahl1)
	{
		case '0':
		Segmente.A1 = 1;
		Segmente.B1 = 1;
		Segmente.C1 = 1;
		Segmente.E1 = 1;
		Segmente.D1 = 1;
		Segmente.F1 = 1;
		
		break;
		case '1':
		Segmente.B1 = 1;
		Segmente.C1 = 1;
		
		break;

		case '2':
		Segmente.A1 = 1;
		Segmente.B1 = 1;
		Segmente.G1 = 1;
		Segmente.E1 = 1;
		Segmente.D1 = 1;
		break;

		case '3':
		Segmente.A1 = 1;
		Segmente.B1 = 1;
		Segmente.G1 = 1;
		Segmente.C1 = 1;
		Segmente.D1 = 1;
		break;

		case '4':
		
		Segmente.B1 = 1;
		Segmente.G1 = 1;
		
		Segmente.C1 = 1;
		Segmente.F1 = 1;
		break;

		case '5':
		
		Segmente.A1 = 1;
		Segmente.F1 = 1;
		Segmente.G1 = 1;
		Segmente.C1 = 1;
		Segmente.D1 = 1;
		break;
		case '6':
		Segmente.A1 = 1;
		Segmente.F1 = 1;
		Segmente.E1 = 1;
		Segmente.G1 = 1;
		Segmente.C1 = 1;
		Segmente.D1 = 1;		
		break;
		case '7':
		Segmente.A1 = 1;
		Segmente.B1 = 1;
		Segmente.C1 = 1;
		break;
		case '8':
		Segmente.A1 = 1;
		Segmente.F1 = 1;
		Segmente.E1 = 1;
		Segmente.G1 = 1;
		Segmente.C1 = 1;
		Segmente.D1 = 1;
		Segmente.B1 = 1;
				
		break;
		case '9':
		Segmente.A1 = 1;
		Segmente.F1 = 1;
		Segmente.B1 = 1;
		Segmente.G1 = 1;
		Segmente.C1 = 1;
		Segmente.D1 = 1;
		break;

	}
	switch(zahl2)
	{
		
		case '0':
		Segmente.A2 = 1;
		Segmente.B2 = 1;
		Segmente.C2 = 1;
		Segmente.E2 = 1;
		Segmente.D2 = 1;
		Segmente.F2 = 1;
		
		break;
		case '1':
		Segmente.B2 = 1;
		Segmente.C2 = 1;
		
		break;

		case '2':
		Segmente.A2 = 1;
		Segmente.B2 = 1;
		Segmente.G2 = 1;
		Segmente.E2 = 1;
		Segmente.D2 = 1;
		break;

		case '3':
		Segmente.A2 = 1;
		Segmente.B2 = 1;
		Segmente.G2 = 1;
		Segmente.C2 = 1;
		Segmente.D2 = 1;
		break;

		case '4':
		
		Segmente.B2 = 1;
		Segmente.G2 = 1;
		
		Segmente.C2 = 1;
		Segmente.F2 = 1;
		break;

		case '5':
		Segmente.A2 = 1;
		Segmente.F2 = 1;
		Segmente.G2 = 1;
		Segmente.C2 = 1;
		Segmente.D2 = 1;
		break;
		case '6':
		Segmente.A2 = 1;
		Segmente.F2 = 1;
		Segmente.E2 = 1;
		Segmente.G2 = 1;
		Segmente.C2 = 1;
		Segmente.D2 = 1;		
		break;
		case '7':
		Segmente.A2 = 1;
		Segmente.B2 = 1;
		Segmente.C2 = 1;
		break;
		case '8':
		Segmente.A2 = 1;
		Segmente.F2 = 1;
		Segmente.E2 = 1;
		Segmente.G2 = 1;
		Segmente.C2 = 1;
		Segmente.D2 = 1;
		Segmente.B2 = 1;
				
		break;
		case '9':
		Segmente.A2 = 1;
		Segmente.F2 = 1;
		Segmente.B2 = 1;
		Segmente.G2 = 1;
		Segmente.C2 = 1;
		Segmente.D2 = 1;
		break;
	}
		//Nummer 1
		
		//Nummer 9
		if(Segmente.A2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 10
		if(Segmente.B2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 11
		if(Segmente.C2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 12
		if(Segmente.D2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 13
		if(Segmente.E2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 14
		if(Segmente.F2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 15
		if(Segmente.G2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 16
		if(Segmente.DP2 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		if(Segmente.A1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 2
		if(Segmente.B1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 3
		if(Segmente.C1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 4
		if(Segmente.D1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 5
		if(Segmente.E1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 6
		if(Segmente.F1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 7
		if(Segmente.G1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();
		//Nummer 8
		if(Segmente.DP1 == 1)
		{
			ANZEIGEPORT |= (1<<SER);

		}
		else
		{
			ANZEIGEPORT &= ~(1<<SER);
		}
		Impuls();

	Ausgeben();
	

		
}