Display 1,14 Zoll 135x240 Pixel Treiber ST7789V

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Ja der Thomas hat offensichtlich Verständis-Schwierigkeiten bezüglich Basic-Befehlen, die nicht alleine für sich stehen dürfen.
      Zu einem For gehört immer ein Next.
      Zu einem If gehört immer ein End if, wenn sich dazwischen mehrere Zeilen Code befinden.

      Zu Einem $ASM gehört immer ein $END ASM.
      Zu einem Label: gehört ein Return, zu einer Sub ein End Sub etc.

      @Thomas1964
      Wenn ich dir mal einen gut gemeinten Tipp geben darf:

      Verwende anstelle von Unterprogrammen mit Label: .. Return besser SUB oder FUNCTION.
      Vorteil ist:
      1. Code wird übersichtlicher
      2. Verwendung von lokalen Variablen in der SUB/FUNCTION. Das spart globale Variablen!
      3. Die dürfen auch vor der Hauptschleife stehen, wenn "Config Submode = New" angegeben ist. Nach der Hauptschleife mit Deklaration der Routine.

      Nachteil:
      1. keiner. Eine Sub ohne Parameter ist genauso schnell wie ein Label mit Return. Auch die Codelänge ist die selbe behaupte ich jetzt mal.
      Labels mit Return haben natürlich auch ihre Berechtigung, z.B. bei Interrupt-Routinen. Wobei man das auch mit einer Sub machen kann. So kann man sogar in ISR-Routinen lokale Variablen verwenden.

      Labels stammen aus den Urzeiten/Anfängen von Basic, als es noch keine Functionsn/Sub's gab, und sollten i.d.R. nur in Ausnahmen verwendet werden.
    • Hallo Pluto,

      habe das mal geändert,
      kann man im Simulator testen, ob auch in die Unterprogramme gesprungen wird ?
      Im Simulator läuft natürlich nur die Hauptschleife.
      Kann man den PINB.0 und PINB.1 irgendwo auf 1 setzen ?
      Habe bisher noch nicht mit dem Simulator gearbeitet.
      Dateien
    • Thomas1964 schrieb:

      steht das irgendwo beschrieben, wie das mit SUB und Funktion geht ?
      Ja das steht in der Bascom-Hilfe (F1 drücken)

      Im Fenster das sich dann öffnet Unter Reiter "Index" kannst du dann im Textfeld z.B. eingeben:
      • Sub
      • Function
      • Declare Sub
      • Declare Function
      • u.v.m.
      Die Hilfe kann ich dir ans Herz legen!

      Online findest du die Hilfe auch Bascom Online-Hilfe.
    • Wenn du dir in der Hilfe z.B. mal If .. End If anschaust, dann wirst du feststellen, dass du deinen Code vereinfachen kannst.
      So der Syntax:

      BASCOM-Quellcode

      1. If <Bedingung> then
      2. <Befehl>
      3. <Befehl>
      4. End If


      So dein Code am Beispiel B1:

      BASCOM-Quellcode: So ist dein Code aktuell

      1. if B1 = 0 then y1 = 105 'immer wenn die Bahn auf der Anzeige
      2. if B1 = 0 then y2 = 30 'die Abfahrtszeit 0min erreicht wird diese in
      3. if B1 = 0 then y3 = 45 'die untereste Zeile geschoben
      4. if B1 = 0 then y4 = 60 'und alle anderen rücken um 12 Pixel nach oben.
      5. if B1 = 0 then y5 = 75
      6. if B1 = 0 then y6 = 90
      7. if B1 = 0 then B1 = 60
      Und so könnte er sein:


      BASCOM-Quellcode: Bessere Variante (Vorschlag)

      1. If B1 = 0 then
      2. y1 = 105 'immer wenn die Bahn auf der Anzeige
      3. y2 = 30 'die Abfahrtszeit 0min erreicht wird diese in
      4. y3 = 45 'die untereste Zeile geschoben
      5. y4 = 60 'und alle anderen rücken um 12 Pixel nach oben.
      6. y5 = 75
      7. y6 = 90
      8. B1 = 60
      9. End If
    • Hallo Mitch,

      habe ich mal so abgeändert, anbei der Code, aber wenn ich den PINB.0 auf 3,3Volt setze zählt er die Stunden
      hoch, hört aber nicht bei 24 auf und setzte ich es dann wieder auf GND springt er nicht mehr ins Hauptprogramm.
      Das selbe bei den Minuten.

      Kann auch nicht kompilieren, bekomme folgende Fehlermeldung.

      Error : 7 Line : 406 IF THEN expected [ 107] , in File : C:\Users\Zoe\Desktop\µC-Programme\Anzeige 1,14 Zoll 135x240\1.14 Test\Anzeigetafel_Iserlohn_114_4.bas
      Error : 350 Line : 406 Interrupt needs return [[ 11]] , in File : C:\Users\Zoe\Desktop\µC-Programme\Anzeige 1,14 Zoll 135x240\1.14 Test\Anzeigetafel_Iserlohn_114_4.bas
      Error : 123 Line : 406 END IF expected , in File : C:\Users\Zoe\Desktop\µC-Programme\Anzeige 1,14 Zoll 135x240\1.14 Test\Anzeigetafel_Iserlohn_114_4.bas
      Dateien
    • Das liegt daran, weil du nicht sauber programmierst.

      Die Fehlermeldungen kommen, weil der Compiler auf kein End If stößt.

      Du erinnerst dich? Block-Befehle? Post #22

      In Zeile 208 startest du einen Block mit If, wo wird der Block angeschlossen?
      Genau das gleiche in Zeilen 217, 226, 235, 244, 253 ...

      Schau nochmal genau in Post #30, wie mein Vorschlag war. Wo kommt das End If???
    • Hallo Mitch, das ist mir auch schon aufgefallen, habe ich auch schon geändert,
      er springt auch von der Zeiteinstellung wieder ins Hauptprogramm.
      Aber ich habe noch irgendwo in der Zeiteinstellung einen Fehler drin.
      Ich bin die ganze Zeit am suchen, muss noch mal genau nachschauen.

      Anbei der Code
      Dateien
    • Und sowas geht auch nicht!

      BASCOM-Quellcode: Unterprogramm von Hauptschleife ber Gosub aufgerufen

      1. ZeiteinstellungStunden:
      2. cls
      3. Setfont Color16x16
      4. Boxfill(0 , 0) -(240 , 135) , blue
      5. For S =1 to 24
      6. tmpString = "00"+Str(Stunden) 'Einblendung der Uhrzeit unterste Displayzeile
      7. Zeit = Right(tmpString , 2) + ":"
      8. tmpString ="00" +Str(Minuten)
      9. Zeit = Zeit + Right(tmpString,2)
      10. Lcdat 70,70,Zeit,White, Blue
      11. Lcdat 100 , 60 ,"Uhrzeit", White, Blue
      12. incr Stunden
      13. If Stunden >= 23 then:gosub Hauptprogramm
      14. waitms 800
      15. next S
      16. end if
      17. return
      Alles anzeigen
      Du kannst nicht von einer Hauptschleife mit Gosub in ein Unterprogramm springen, und von dort wieder mit Gosub (siehe Zeile 15) ins Hauptprogramm.
      Das würd dein Stack zum Überlaufen bringen.

      Du Kannst deine Sub vorzeitig mit Return verlassen (schlechter Programmierstyle).
      Ein Gosub legt die Rücksprungadresse auf den HWStack und springt zum Unterprogramm.
      Daher muss dieses mit Return verlassen werden, damit der Stack wieder stimmt.
      Das Programm setzt dann die Abarbeitung nach dem Gosub <Label> im Hauptprogramm wieder fort.

      Verwende für deine Unterprogramme
      Sub ZeiteinstellungStunden()
      ' Code hier
      ' ..
      End Sub ' schließt das Unterprogramm ab

      Jetzt ist mir auch klar, warum du nach der Haupschleife ein Return hast.
      Aber da kommt der Code ja nie hin.

      Weil
      Do
      ' ..
      Loop

      Eine Endlosschleife ist. (Blockbefehl)
    • Hallo Mitch, meinst du so ?
      config Submode=new
      declare sub ZeiteinstellungStunden
      declare sub ZeiteinstellungMinuten

      if Stunde = 1 and Minute = 0 then:call ZeiteinstellungStunden
      elseif Stunde = 0 and Minute = 1 then:call ZeiteinstellungMinuten:
      elseif Stunde = 0 and Minute = 0 then:gosub Hauptprogramm

      sub ZeiteinstellungStunden()


      cls
      Setfont Color16x16
      Boxfill(0 , 0) -(240 , 135) , blue
      For S =1 to 24
      tmpString = "00"+Str(Stunden) 'Einblendung der Uhrzeit unterste Displayzeile
      Zeit = Right(tmpString , 2) + ":"
      tmpString ="00" +Str(Minuten)
      Zeit = Zeit + Right(tmpString,2)
      Lcdat 70,70,Zeit,White, Blue
      Lcdat 100 , 60 ,"Uhrzeit", White, Blue
      incr Stunden
      waitms 800
      If Stunde = 0 then:gosub Hauptprogramm
      next S
      end if
      end sub


      sub ZeiteinstellungMinuten()


      cls
      Setfont Color16x16
      Boxfill(0 , 0) -(240 , 135) , blue
      For M =1 to 60
      tmpString = "00"+Str(Stunden) 'Einblendung der Uhrzeit unterste Displayzeile
      Zeit = Right(tmpString , 2) + ":"
      tmpString ="00" +Str(Minuten)
      Zeit = Zeit + Right(tmpString,2)
      Lcdat 70,70,Zeit,White, Blue
      Lcdat 100 , 60 ,"Uhrzeit", White, Blue
      incr Minuten
      waitms 800
      If Minute = 0 then:gosub Hauptprogramm
      next M
      end if
      end sub
    • Eine Sub wird automatisch beendet, wenn sie abgearbeitet ist.
      In der Praxis ist das der Fall, wenn die Code-Ausführung auf "END SUB" trifft.
      Das entspricht quasi dem Return von einem Unterprogramm.

      Will man die Sub vorzeitig verlassen gibt es die Anweisung "Exit Sub".

      Das hat nichts mit Bedingung zu tun.
      Außer man will explizit die Sub verlassen, wenn man eine Bedingung erreicht ist, dann schreibt man
      If <Bedingung> then Exit Sub.

      (Bascom Hilfe ansehen, da steht das alles drin!)
    • Wenn du Sub oder Function deklarierst (Zeile 18 u. 18), müssen die Klammern angegeben werden.
      Falsch:
      Declare Sub Name ' hier fehlt die Klammer!

      Richtig:
      Declare Sub Name()

      Auch wenn keine Parameter verwendet werden, muss eine Klammer angegeben werden.
      Wenn du das nicht tust, könnte das in einer späteren Version zu Fehlern oder Fehlverhalten der Routinen führen.

      Wenn du eine Sub aufrufst, musst du auch die Klammer angeben (Zeile 131, 132).
      Falsch: Call Name
      Richtig: Call Name() ' Klammer angeben!

      Fehler in Zeile 133:
      Hier springst du mit Gosub ins Hauptprogramm.
      Wenn Springen, dann hier mit Goto. Weil Hauptschleife ein Unterprogramm ist, sondern Endlos-Schleife, verbleibt die Rücksprungadresse ewig auf dem Stack.

      Dann ist da noch ein Fehler, den du mehrfach im Programm hast
      Du schreibst in Zeile 132 folgendes:
      elseif Stunde = 0 and Minute = 1 then:call ZeiteinstellungMinuten:

      Das ist syntaktisch falsch.
      Zwischen then und Call gehört kein Doppelpunkt. Der wird nur verwendet, um mehrere Anweisen voneinander zu trennen.
      Weiterhin steht nach dem Call ZeiteinstellungMinuten wieder ein Doppelpunkt. Da kommt aber keine Anweisung mehr.
      Außerdem müssen Klammern angegeben werden bei Sub.

      Überhaupt verstehe ich den Sinn nicht der Zeilen 131 bis 135 in der Programm-Position nicht.
    • Hallo Mitch,

      habe das soweit geändert, es wird auch aus den Sub´s zurückgesprungen, nur mit
      der Zeiteinstellung, das funktioniert noch nicht so richtig, anbei der Code.


      Gruß Thomas
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Thomas1964 ()