-         

Ergebnis 1 bis 5 von 5

Thema: if-Abfrage verkürzen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.02.2013
    Beiträge
    5

    if-Abfrage verkürzen

    Anzeige

    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:

    Code:
    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
    Code:
    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

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Code:
    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.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    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.
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    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.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.02.2013
    Beiträge
    5
    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

Ähnliche Themen

  1. Pins Abfrage
    Von crusico im Forum C - Programmierung (GCC u.a.)
    Antworten: 23
    Letzter Beitrag: 22.01.2009, 11:10
  2. IF Abfrage
    Von kalletronic im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 06.06.2007, 07:39
  3. Printbefehl verkürzen
    Von Picht im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 06.09.2006, 01:37
  4. Abfrage!
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 03.07.2006, 14:05
  5. COM-Abfrage
    Von surfer im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 40
    Letzter Beitrag: 15.09.2005, 15:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •