- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Kleines Menü auf einem LCD

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206

    Kleines Menü auf einem LCD

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    ich wollte ein kleines Menü auf einem LCD erstellen mit 3 Unterpunkten (km/h; t pro Umdrehung; Drehzahl[wie oft sich die Achse gedreht hat])
    Nun alles schön und gut ich kann per Interrupt zwischen den 3 Sachen wechseln und sie abwechselnd auf dem lcd anzeigen lassen, jetzt möchte ich mit dem anderen interrupt eingang den aktuellen punkt bestätigen und wieder in die main rutine springen, doch dies klappt leider nicht. :'(
    Auch weiß ich noch nicht wie ich den ausgabe wert ändern soll also zB von km/h auf drehzal

    hat jemand eine idee oder gibt es vielleicht eine möglichkeit das menü einfacher zu gestalten ??

    Code:
    'Martin Gluch
    'grüne LED PD0
    'Taster PD2 und PD3
    'Sensor PB0
    'LCD PC
    '
    '----------------------------------------------------------
    $regfile = "m8def.dat"                                      ' Inizialiesierung Microkontroller
    $crystal = 3686400                                          ' Quarz Frequenz
    Declare Sub Keypressed
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
    Config Lcdbus = 4                                           ' LCD Konfiguierung
    
    Cursor Off                                                  ' Cursor auf dem LCD Ausblenden
    
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 12 , 16 , 16 , 31        ' Fahrrad Modul 1
    Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 30 , 8 , 30         ' Fahrrad Modul 2
    Deflcdchar 2 , 7 , 9 , 17 , 17 , 18 , 16 , 8 , 7            ' Fahrrad Modul 3
    Deflcdchar 3 , 4 , 18 , 9 , 8 , 8 , 8 , 16 , 32             ' Fahrrad Modul 4
    Deflcdchar 4 , 9 , 9 , 10 , 10 , 31 , 2 , 1 , 32            ' Fahrrad Modul 5
    Deflcdchar 5 , 28 , 18 , 9 , 5 , 29 , 1 , 2 , 28            ' Fahrrad Modul 6
    
    On Icp1 Oncapture                                           ' Interrupt Routine deklarieren
    On Int0 Onmenue
    On Int1 Onenter
    
    Dim Wcapture As Long                                        'Variablen Declaration
    Dim Geschw As Single                                        'Variablen Declaration
    Dim Endgeschw As Single                                     'Variablen Declaration
    Dim Menuepunkt As Integer
    Menuepunkt = 0
    
    Ddrb.0 = 0                                                  ' Pin PB0 Eingang (Sensor + r. Taster)
    Portb.0 = 1                                                 ' PullUp von Pin PB0 aktivieren
    
    Ddrb = &B00000001                                           ' Pin DB0 Ausgang (LED)
    Portd = &B00001100
    Mcucr = &B00001010
    Gicr = &B11000000
    
    '\/Begrüßungsbildschirm\/
    Cls
       Locate 1 , 1
          Lcd "Fahrradtacho"
       Locate 2 , 1
          Lcd "Version 1.0"
       Locate 1 , 14
          Lcd Chr(0)
       Locate 1 , 15
          Lcd Chr(1)
       Locate 2 , 13
          Lcd Chr(2)
       Locate 2 , 14
          Lcd Chr(3)
       Locate 2 , 15
          Lcd Chr(4)
       Locate 2 , 16
          Lcd Chr(5)
    Waitms 1500
    Cls
       Locate 1 , 1
          Lcd "----------------"
       Locate 2 , 3
          Lcd "Martin Gluch"
    Waitms 2000
    Cls
    '/\Begrüßungsbildschirm/\
    
    
    Tccr1a = &B00000000
    Tccr1b = &B10000101
    Timsk.ticie1 = 1
    
    Sreg.7 = 1
    
    
    Main:
    
    Goto Main
    
    
    Oncapture:
    
    
      Timer1 = Timer1 - Capture1
      Wcapture = Capture1
      Wcapture = Wcapture \ 3.600
      'Wcapture = Wcapture \ 1000
      Geschw = 2.03 / Wcapture                                  ' 2,03 durch beliebigen  Reifenumfang ersetzen
      Endgeschw = Geschw * 360
      Endgeschw = Endgeschw * 10
    
      Cls
      Locate 1 , 2
      Lcd Chr(0)
      Locate 1 , 3
      Lcd Chr(1)
      Locate 2 , 1
      Lcd Chr(2)
      Locate 2 , 2
      Lcd Chr(3)
      Locate 2 , 3
      Lcd Chr(4)
      Locate 2 , 4
      Lcd Chr(5)
      Locate 1 , 6
      Lcd Endgeschw
      Locate 1 , 12
      Lcd " km/h "
      Locate 2 , 6
      Lcd "M. Gluch"
    
      Return
      Return
    
      Onmenue:
    
      Cls
      Locate 1 , 1
      Lcd "Menue"
      If Menuepunkt = 0 Then
      Locate 2 , 1
      Lcd "km/h"
      End If
      If Menuepunkt = 1 Then
      Locate 2 , 1
      Lcd "Zeit/U"
      End If
      If Menuepunkt = 2 Then
      Locate 2 , 1
      Lcd "Drehzahl"
      End If
      Menuepunkt = Menuepunkt + 1
      If Menuepunkt = 3 Then
      Menuepunkt = 0
      End If
    
      Return
    
    
      Onenter:
    
      Return
    Dies soll ein Fahrrad tacho werden die ganz normale Geschwindigkeitsmessung funktioniert auch doch das MEnü als besonderer Hingucker funktioniert leider noch nicht.

    Gruß
    Martin

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    Hallo,

    dein Programmaufbau ist etwas merkwürdig.
    Du rechnest nach eingehendem ICP-Interrupt die Geschwindigkeit aus und gibst sie aus und springst zurück in die leere Main-Routine.
    Im Menü änderst du lediglich die Einheit dahinter.
    Trotz allem kommt als nächstes wieder ein ICP-Interrupt und die Geschwindigkeitsausgabe.

    ich würde in der Menue-Interrupt-Routine nur bei jedem Klick eine Variable ähnlich der Variablen Menuepunkt verändern
    (so wie du das schon machst: help=help+1 und if help=3 then help=0)

    in die OnEnter-Routine würde ich dann nur Menuepunkt=help reinschreiben
    damit wird die abzuprüfende Variable übernommen

    und in der ICP-Interrupt-Routine die gemessenen Werte berechnen und meinetwegen alle 3 Ergebnisse in Variablen hinterlegen.

    die Main würde ich nicht leer lassen, sondern da die Variable Menuepunkt durch eine Case-Abfrage laufen lassen und die entsprechende Ausgabe dort machen.


    Gruß BoGe-Ro

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Du hast Deine LCD-Ausgabe in der Interruptroutine, das ist nicht besonders schön, weil das LCD die Int ausbremst.

    Für Tasten brauchts auch keine Interrupts, so schnell sind die Tasten nicht.
    Aus der Mainloop per debounce Befehl aufgerufen würde dicke reichen.

    Goto ist so ziemlich das größte Schreckgespenst .... brrrrr
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    Dankeschöön für die Antworten werde mich mal direkt dran machen wenn irgendwas bei rauskommt melde ich mich noch mal

    Gruß
    Martin
    \/ \/ \/ Elektronische Bauteile funktionieren nur weil in ihnen Rauch eingeschlossen ist Beweis: tritt Rauch aus sind sie kaputt!! \/ \/ \/

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    So habe nun das Menü programmiert ist zwar nicht sonderlich komplex und schwierig aber es funktioniert.

    Wenn jemand verbesserungen hat oder vorschläge wie ich es optimieren kann dem wäre ich sehr dankbar.

    Code:
    $regfile = "m8def.dat"                                      ' Inizialiesierung Microkontroller
    $crystal = 3686400                                          ' Quarz Frequenz
    Declare Sub Key1
    Declare Sub Key2
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
    Config Lcdbus = 4                                           ' LCD Konfiguierung
    
    Cursor Off                                                  ' Cursor auf dem LCD Ausblenden
    
    Deflcdchar 0 , 32 , 32 , 32 , 32 , 12 , 16 , 16 , 31        ' Fahrrad Modul 1
    Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 30 , 8 , 30         ' Fahrrad Modul 2
    Deflcdchar 2 , 7 , 9 , 17 , 17 , 18 , 16 , 8 , 7            ' Fahrrad Modul 3
    Deflcdchar 3 , 4 , 18 , 9 , 8 , 8 , 8 , 16 , 32             ' Fahrrad Modul 4
    Deflcdchar 4 , 9 , 9 , 10 , 10 , 31 , 2 , 1 , 32            ' Fahrrad Modul 5
    Deflcdchar 5 , 28 , 18 , 9 , 5 , 29 , 1 , 2 , 28            ' Fahrrad Modul 6
    
    On Icp1 Oncapture                                           ' Interrupt Routine deklarieren
    
    Dim Wcapture As Long                                        'Variablen Declaration
    Dim Geschw As Single                                        'Variablen Declaration
    Dim Endgeschw As Single                                     'Variablen Declaration
    Dim Menuepunkt As Integer
    Dim Anzeigezahl As Single
    Dim Einheit As String * 6
    Dim Zaehler As Long
    Dim Strecke As Single
    Dim Zeit As Integer
    Menuepunkt = 0
    Zaehler = 0
    Strecke = 0
    
    Ddrd = &B0000001
    Portd.2 = 1
    Portd.3 = 1
    Ddrb.0 = 0                                                  ' Pin PB0 Eingang (Sensor + r. Taster)
    Portb.0 = 1                                                 ' PullUp von Pin PB0 aktivieren
    
    
    '\/Begrüßungsbildschirm\/
    Cls
       Locate 1 , 1
          Lcd "Fahrradtacho"
       Locate 2 , 1
          Lcd "Version 1.0"
       Locate 1 , 14
          Lcd Chr(0)
       Locate 1 , 15
          Lcd Chr(1)
       Locate 2 , 13
          Lcd Chr(2)
       Locate 2 , 14
          Lcd Chr(3)
       Locate 2 , 15
          Lcd Chr(4)
       Locate 2 , 16
          Lcd Chr(5)
    Waitms 1500
    Cls
       Locate 1 , 1
          Lcd "----------------"
       Locate 2 , 3
          Lcd "Martin Gluch"
    Waitms 2000
    Cls
    Locate 1 , 5
    Lcd "Computer"
    Locate 2 , 6
    Lcd "bereit"
    Waitms 1000
    '/\Begrüßungsbildschirm/\
    
    
    Tccr1a = &B00000000
    Tccr1b = &B10000101
    Timsk.ticie1 = 1
    
    Sreg.7 = 1
    
    
    Do
    
      Debounce Pind.2 , 0 , Key1 , Sub
      Debounce Pind.3 , 0 , Key2 , Sub
    
      Cls
      If Menuepunkt = 0 Then
      Anzeigezahl = Endgeschw
      Locate 2 , 1
      Lcd "Geschwindigkeit"
      Locate 1 , 12
      Einheit = " km/h "
      End If
      If Menuepunkt = 1 Then
      Anzeigezahl = Zeit
      Locate 2 , 1
      Lcd "Zeit pro Umdreh."
      Locate 1 , 12
      Einheit = " ms  "
      End If
      If Menuepunkt = 2 Then
      Anzeigezahl = Zaehler
      Locate 2 , 1
      Lcd "Counter"
      Einheit = "     "
      End If
      If Menuepunkt = 3 Then
      Anzeigezahl = Strecke \ 1000
      Locate 2 , 1
      Lcd "Strecke"
      Einheit = "  km  "
      End If
    
      Locate 1 , 6
      Lcd Anzeigezahl
      Locate 1 , 11
      Lcd Einheit
      Waitms 70
    
    Loop
    
    Oncapture:
    
      Timer1 = Timer1 - Capture1
      Wcapture = Capture1
      Wcapture = Wcapture \ 3.600
      'Wcapture = Wcapture \ 1000
      Geschw = 2.03 / Wcapture                                  ' 2,03 durch beliebigen  Reifenumfang ersetzen
      Endgeschw = Geschw * 360
      Endgeschw = Endgeschw * 10
    
      Zaehler = Zaehler + 1
      Strecke = Strecke + 2.03
      Zeit = Wcapture
    
      Portd.0 = 1
      Waitms 1
      Portd.0 = 0
    
    Return
    
    Sub Key1
    
      Cls
      If Menuepunkt = 0 Then
      Locate 2 , 1
      Lcd "Zeit pro Umdreh."
      End If
    
      If Menuepunkt = 1 Then
      Locate 2 , 1
      Lcd "Counter"
      End If
    
      If Menuepunkt = 2 Then
      Locate 2 , 1
      Lcd "Strecke"
      End If
    
      If Menuepunkt = 3 Then
      Locate 2 , 1
      Lcd "Geschwindigkeit"
      End If
    
      Menuepunkt = Menuepunkt + 1
      If Menuepunkt = 4 Then
      Menuepunkt = 0
      End If
    
    End Sub
    
    Sub Key2
    
     Zaehler = 0
     Cls
     Locate 1 , 1
     Lcd "Counter Reset"
     Waitms 500
    
    
    End Sub
    End
    Gruß
    Martin
    \/ \/ \/ Elektronische Bauteile funktionieren nur weil in ihnen Rauch eingeschlossen ist Beweis: tritt Rauch aus sind sie kaputt!! \/ \/ \/

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2010
    Ort
    Edewecht
    Alter
    26
    Beiträge
    21
    frage wie teste ich sowas am pc in einer software???
    also in welcher?
    oder geht das überhaupt?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Zitat Zitat von pro-bot
    frage wie teste ich sowas am pc in einer software???
    also in welcher?
    oder geht das überhaupt?
    garnicht, geht oder geht nicht
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2010
    Ort
    Edewecht
    Alter
    26
    Beiträge
    21
    ach das is bascom??? oder?

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von RobbyMartin
    Registriert seit
    31.12.2009
    Ort
    Leverkusen
    Alter
    30
    Beiträge
    206
    Jap das ist es guck mal in welchem Unterforum du gelandet bist

    "Basic-Programmierung (Bascom-Compiler)"

    Gruß
    Martin
    \/ \/ \/ Elektronische Bauteile funktionieren nur weil in ihnen Rauch eingeschlossen ist Beweis: tritt Rauch aus sind sie kaputt!! \/ \/ \/

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2010
    Ort
    Edewecht
    Alter
    26
    Beiträge
    21
    oh garnich drauf geachtet

Berechtigungen

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

LiFePO4 Speicher Test