PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if-Abfrage verkürzen



CADdy
28.04.2013, 17:31
Hallo allemiteinander,

für eine Uhr möchte ich eine Datumsanzeige machen, die alle 10s für 3s das Datum anzeigt. Da es sich um ein achtstelliges, einzeiliges LCD-Modul handelt, kann ich Zeit und Datum nicht gleichzeitig darstellen. Mit meiner Abfrage funktioniert das auch einwandfrei, allerdings bin ich der Meinung, dass die If-Abrage irgendwie einfacher machbar sein sollte:



if (((soft_seconds >= 7) & (soft_seconds <= 9)) | ((soft_seconds >= 17) & (soft_seconds <= 19)) | ((soft_seconds >= 27) & (soft_seconds <= 29)) | ((soft_seconds >= 37) & (soft_seconds <= 39)) | ((soft_seconds >= 47) & (soft_seconds <= 49)) | ((soft_seconds >= 57) & (soft_seconds <= 59)))
{
sprintf(buffer, "%02d.%02d.%02d", date_D, date_M, date_Y);
lcd_puts(buffer);
}


Ich bin jetzt nicht der Held in Sachen C und funktionieren tuts ja auch, mich würde aber schon interessieren, ob das auch kürzer geht. Ich habe schon rumprobiert und z.B. den Inhalt von
soft_seconds in char zu wandeln, den linken Teil abzuschneiden und dann für den Vergleich zu verwenden. Das ist aber noch aufwändiger und hat auch nicht geklappt.

Für einen Tipp würde ich mich freuen.

Servus
Peter

ichbinsisyphos
28.04.2013, 17:42
if (soft_seconds%10 > 6)

%x, sprich "modulo x", ist der Rest bei Division durch x. %10 liefert also Ziffern von 0 bis 9. Erlauben willst du 7,8,9. Danach geht er wieder auf 0, also reicht der Test > 6.

HeXPloreR
28.04.2013, 17:46
Hallo ich würde versuchen die sekunden mit einem einzigen zähler (= 7) hochzuzählen: also sekundenzähler == 7 dann... datum zeigen für 3sec anzeigen. Gleichzeitig den zähler um +10 erhöhen (= 17) darauf wieder prüfen usw usw.... wenn zähler 57 dann ...datum zeigen und zähler wieder auf 7 setzen.

ichbinsisyphos
28.04.2013, 17:53
Mir fällt grad ein, du wirst doch nicht ständig aufs LCD schreiben, oder? Im Zeitmodus brauchst ja nur einmal pro Sekunde, im Datumsmodus sowieso nur einmal. Da wird man sicher was optimieren können. Was und wie hängt auch vom Rest des Codes ab.

CADdy
28.04.2013, 18:12
Hi ichbinsisyphos,

danke für Deine Antwort.
Deine if-Abfrage funktioniert einwandfrei und mein Programm ist um 182 Bytes kleiner geworden :-)
Modulo x - so einfach kanns sein...
Ich schreibe nur einmal pro Sekunde auf das Display, soft_seconds wird per Interrupt pro Sekunde um 1 erhöht.

Dank Dir, Du hast mir sehr weitergeholfen.

Servus
Peter