Hallo an alle

Ich hab nun die A/D Routine fertig geschrieben .

Code:
#include <avr/io.h>
#include <stdlib.h>
#include "wintek2704.h"

void adc_init(void);
int get_adc (void);
void lcd_put_d(uint16_t dec);

int main (void)
{
	DDRC &=~ _BV(PC0);
	PINC &=~ _BV(PC0);
	
	uint8_t balken3, balken_leer, i, j;
	uint16_t ergebnis_display;
	uint16_t ergebnis_neu;
		
	adc_init();
	lcd_init(LCD_DISP_ON);
	lcd_puts("        ADC -- Test\n");
	ergebnis_neu = 0;
	
	while(1)
	{
		ergebnis_display = get_adc();
		
		if (ergebnis_neu > ergebnis_display || ergebnis_neu < ergebnis_display)
		{
		lcd_gotoxy(0,1);
		lcd_puts("    ");
		ergebnis_neu = ergebnis_display;
		}
		lcd_gotoxy(0,1);
		lcd_put_d(ergebnis_neu);
		
		balken3 = ergebnis_neu / 37;
		balken_leer = 27 - balken3;
		
		lcd_gotoxy(0,2);
		
		for(i = 0; i < balken3; i++)
			lcd_puts("=");
		for(j = 27; j > balken_leer; j--)
		lcd_puts(" ");
	}
	return(0);
}

void lcd_put_d(uint16_t dec)
{
	char buffer[6];
	itoa(dec, buffer, 10);
	lcd_puts(buffer);
}

	

void adc_init (void)
{
	ADCSR = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2);	//Prescaler = 64 TF = 125 kHz 
}

int get_adc (void)
{
	uint8_t i;
	uint16_t ergebnis_adc;
	
	ADMUX = 0; // Vreff = Vcc
	
	ADCSRA |= (1 << ADSC);
	
	while (!(ADCSRA & (1 << ADIF)));
	
	ergebnis_adc = 0;
	
	for(i = 0; i < 5; i++)
	{
		ADCSRA |= (1 << ADSC);
		while(!(ADCSRA & (1 << ADIF)));
		
		ergebnis_adc += ADC;
	}
	ergebnis_adc = ergebnis_adc / 5;
	
	return ergebnis_adc;
}
Jedoch überschreibe ich jetzt immer die Zahl vor der Aktualisierung mit 4 leerzeicnen (lcd_puts" "). Denn Wenn ich eine Zahl > 1000 anzeige, bleibt die letzte Stelle hängen wenn der Wert unter 1000 sinkt. Das gleiche bei 100. Deshalb die Überschreibung mit den Leerzeichen.

Gibt es in C ein Möglichkeit die Zahlen formatiert auszugeben zB 0125, 0058, 1024

In Bascom gibt es ja die Funktion FUSING. Gibt es sowas auch in C

Danke im Voraus

Gruß Robert