Hallo,

Ich hab mir kürzlich AVR Studio 7 auf meinen Rechner gespielt und eine XMEGA library für ein OLED Display mit SSD1309 Chip für den AVR umgebastelt.
Es funktioniert auch alles so weit.

Ich hab da aber jetzt ein Verständnisproblem mit den folgenden Programmzeilen:
Code:
for (percent=0; percent<=100; percent++)
        {
            ssd1309_drawBargraph((uint8_t)percent, 0, 7, 0, 15);
            ssd1309_drawBargraph((uint8_t)percent, 6, 7, 30, 98);
            ssd1309_printf_P(1, 20, PSTR("Level: %3d %%"), percent);
            _delay_ms(100);
        }
Es geht dabei um die Programmzeile:
Code:
ssd1309_printf_P(1, 20, PSTR("Level: %3d %%"), percent);
Auf dem Display wird z.B. | Level: 12 % | ausgegeben. Wobei 12 dem aktuellen Wert von percent darstellt, der hochgezählt wird.

Die zugehörige Funktion schau so aus:
Code:
void ssd1309_printf_P(uint8_t page, uint8_t startColumn, PGM_P __fmt, ...)
{
    char aString[64];    
    va_list argumentlist;
    va_start(argumentlist, __fmt);
    vsprintf_P(aString, __fmt, argumentlist);
    va_end(argumentlist);
    ssd1309_print(aString, page, startColumn);
}
Wie wird aus percent plötzlich ein ASCII Code?
Was bedeutet der Teil %3d ?
Was bedeutet %% ?