www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM LCD-Display Menü


Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich bin mal hier gelandet da es nicht so viele Foren gibt die sich 
intensiv mit Bascom beschäftigen.
Hoffe deshalb hier wird einem geholfen.

Ich habe zwar schon einige Beiträge über erstellen eines LCD-Menüs 
gelesen, jedoch war nie das richtige für mich dabei.
Da ich mich erst seit kurzem überhaupt mit AVR's beschäftige habe ich in 
dieser Richtung auch so gut wie keine Erfahrung.
Zu meinem Problem:

Ich möchte gerne auf einem 16x2 Zeilen Display ein Auswahlmenü 
darstellen.
Das ganze soll mittels 3 Taster (bzw. Drehimpulsgeber mit Taster) 
gesteuert werden.
(2 Taster für Links/Rechts, 1 Taster für Menü/Option-Auswahl)
Die obere Zeile soll zur Auswahl des Menüs dienen, die untere zur 
Auswahl der Option des Menüs.

Bsp:
1.Zeile: LED 1
2.Zeile: [AUS] EIN

Wobei die 2te Zeile erst erscheinen soll wenn bei der ersten die 
Auswahltaste gedrückt wurde. (Die Eckige Klammer zeigt die Auswahl an)
In der zweiten kann man dann ebenfalls mittels Taste Links/Rechts die 
Option auswähln und mit der Auswahltaste bestätigen.

Jede Option soll natürlich noch eine Funktion ausführen. (zb. Ausgang 
Portc.1 auf HI schalten)

Nach der Auswahl soll die Anzeige wieder zu einer Standardanzeige 
zurückspringen.
Und das Menü soll erst wieder erscheinen sobald eine der 
Links/Rechts-Taste betätigt wurde.

Das ganze soll vorerst auf einem ATmega8 laufen.

Ich weiß, etwas viel für den Anfang, aber vielleicht kann mir ja jemand 
dazu einige Tips geben.

Ich habe folgendes Codebeispiel das ich im netz gefunden habe, das in 
etwa meinen Vorstellungen ensprechen würde, jedoch muß hier eine 
Tastatur angeschlossen werden und die Menüführung funktioniert in alle 
Richtungen mit Untermenüs, was ich ja nicht benötigen würde.
' KONFIGURATION
'
$regfile = "m8def.dat"
$crystal = 3686400

' Displaytyp
Const Lcdrows = 2
Const Lcdcols = 16

Const Keyup = 8
Const Keydown = 2
Const Keyright = 6
Const Keyleft = 4

'Speicherbereich für Menüeinträge
Const Mnumaxlines = 10

' LCD Einstellungen
Config PortD = Output
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 ,
Config Lcdpin = Pin , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Cursor Off

' VARIABLEN
'
Dim Mnuselect As Integer
Dim Mnuselectscount As Integer
Dim Mnuselectback As Integer
Dim Mnuselectpointer As Integer
Dim Mnutext(mnumaxlines) As String * Lcdcols
Dim Mnuselects(mnumaxlines) As Integer
Dim I As Integer
Dim N As Integer
Dim M As Integer
Dim Mnuselectold As Integer
Dim Keypressed As Integer

'PROGRAMM
'
Waitms 300

Mnuselect = 0

Do
   Select Case Mnuselect
      Case 0:
         Mnuselectback = 0
         Mnutext(1) = "1541 Floppy ID"
         Mnuselects(1) = 1
         Mnutext(2) = "Selbsttest"
         Mnuselects(2) = 2
         Mnuselectscount = 2
         Gosub Mnushow
      Case 1:
         Mnuselectback = 0
         Mnutext(1) = "IP-Adresse"
         Mnuselects(1) = 11
         Mnutext(2) = "DHCP"
         Mnuselects(2) = 12
         Mnutext(3) = "Mac-Adresse"
         Mnuselects(3) = 13
         Mnuselectscount = 3
         Gosub Mnushow
      Case 11:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 1
      Case 12:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 1
      Case 13:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 1
      Case 2:
         Mnuselectback = 0
         Mnutext(1) = "Vollstaendig"
         Mnuselects(1) = 21
         Mnutext(2) = "Teilweise"
         Mnuselects(2) = 22
         Mnuselectscount = 2
         Gosub Mnushow
      Case 21:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 2
      Case 22:
         Mnuselectback = 2
         Mnutext(1) = "Display"
         Mnuselects(1) = 221
         Mnutext(2) = "Schnittstellen"
         Mnuselects(2) = 222
         Mnuselectscount = 2
         Gosub Mnushow
      Case 221:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 22
      Case 222:
         '
         ' Programmteil
         '
         Waitms 500
         Mnuselect = 22
      Case Else:
         Mnuselect = 0
   End Select
Loop

Mnushow:
Mnuselectold = Mnuselect
Mnuselectpointer = 1

While Mnuselectold = Mnuselect
   M = 1
   Cls
   N = Mnuselectpointer + Lcdrows
   Decr N

   If N > Mnuselectscount Then
      N = Mnuselectscount
   End If

   For I = Mnuselectpointer To N
      Locate M , 1
      If I = Mnuselectpointer Then
         Lcd "["
      Else
         Lcd " "
      End If
      Lcd Mnutext(i)
      Incr M
   Next

   Do
      Gosub Tstq
   Loop Until Keypressed > 0

   If Keypressed = Keyup Then
      If Mnuselectpointer > 1 Then
         Decr Mnuselectpointer
      End If
   End If

   If Keypressed = Keydown Then
      If Mnuselectpointer < Mnuselectscount Then
         Incr Mnuselectpointer
      End If
   End If

   If Keypressed = Keyright Then
      Mnuselect = Mnuselects(mnuselectpointer)
   End If

   If Keypressed = Keyleft Then
      Mnuselect = Mnuselectback
   End If

Wend
Cls
Return

Tstq:
Ddrb = &B11111111
Portb = &B00000000
Ddrc = &B00000000
Portc = &B11111111

Keypressed = 0

If Pinc.3 = 0 Then
   Keypressed = Keypressed + 10
End If

If Pinc.4 = 0 Then
   Keypressed = Keypressed + 20
End If

If Pinc.5 = 0 Then
   Keypressed = Keypressed + 30
End If

If Pinc.6 = 0 Then
   Keypressed = Keypressed + 40
End If

If Keypressed > 0 Then
   Ddrb = &B00000000
   Portb = &B11111111
   Ddrc = &B11111111
   Portc = &B00000000

   If Pinb.0 = 0 Then
      Keypressed = Keypressed + 1
   End If

   If Pinb.1 = 0 Then
      Keypressed = Keypressed + 2
   End If

   If Pinb.2 = 0 Then
      Keypressed = Keypressed + 3
   End If

   If Pinb.3 = 0 Then
      Keypressed = Keypressed + 4
   End If

   If Pinb.4 = 0 Then
      Keypressed = Keypressed + 5
   End If

   If Pinb.5 = 0 Then
      Keypressed = Keypressed + 6
   End If

   If Pinb.6 = 0 Then
      Keypressed = Keypressed + 7
   End If

   If Pinb.7 = 0 Then
      Keypressed = Keypressed + 8
   End If

   Waitms 250
End If

Return
End

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schmeiß den Code weg und lerne Programmieren.
Fang an das LCD an zu steueren und gib einen
Text aus. Dann machste das ganze mit drei Tasten
ob dein Auswahlmenue so funktioniert, wie du es haben
willst. Dann kannste dich an den Drehimpulsgeber geben.
Und schauen ob den hinbekommst. Dort mußte was auf die Zeiten
achten, damit der richtig funktioniert. Ist alles in Basic
machbar. Habe es selber für einen µC (PIC) (Mikrobasic)
hinbekommen. War auch kein problem.
Also gutest gelingen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seh ich auch so wie mein Vorredner
Lern zuallererst einmal programmieren und schraub deine Erwartungen 
zunächst mal zurück. Nicht gleich an alles denken und sich in Details 
verlieren.

Ein Menü ist erst mal nichts anderes als ein Text, der an einer 
bestimmten Stelle ausgegeben wird und der sich verändert, wenn ein 
Eingabemedium (bei dir der Drehgeber) betätigt wird. Damit solltest du 
anfangen: In der ersten Zeile sollen deine Hauptmenüpunkte sich 
durchschalten, wenn der Drehgeber betätigt wird. Und dann geht das 
lernen los, wie man sowas vernünftig organisieren kann.

Niemand wird als Wunderwutzi geboren. Ein Menü ist für jeden eine 
Herausforderung. Vor allem wenn es möglichst universell sein soll. Aber 
Kopf hoch: Es ist auch nicht Raketentechnik. Alles ist machbar.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Schmeiß den Code weg und lerne Programmieren.

Tolle Aussage.
dann ist dieses Board hier und die Hilfestellungen die hier angeboten 
werden sozusagen nur Zeitverschwendung. Willst du mir das damit 
mitteilen?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du scheinst nicht zu verstehen für was ein
Forum da ist. Ich verstehe den Code und ich sage
dir, das dieses Beispiel für dich ungeeignet ist.
Um einen fertigen Code zu ändern, muß man viel
Ahnung von programmieren haben. Noch mehr, als wenn man
es selber machen würde. Und keiner wird wahrscheinlich
dafür bereit sein, diesen Code, für dich anzupassen.
Schreib selber ein Programm und dir wird geholfen, was du besser
oder anders machen sollst. Ein Forum bietet dir Hilfe, wenn
du mit deinen Gedanken nicht mehr weiter kommst. Aber keiner
nimmt dir die Arbeit ab, selber sich Gedanken darüber zu machen.
In diesem Beispiel, wird dir geholfen, wenn du bei deinem
Programm probleme hast. Nur ich seh kein Programm von dir.
Oder änderungen an Codeschnippsel. Das wirst du schon selber
machen müssen. Wenn du das nicht willst, dann such dir eine
Firma, die machen sowas gerne. Geld darf dann aber fast keine
Rolle spielen.
So genug geschrieben. Setz dich hin und lerne Programmieren.

Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Nur ich seh kein Programm von dir.
> Oder änderungen an Codeschnippsel.

Wenn du das sehen könntest wärst du hellseher.
Den ich habe tatsächlich einiges am Code geändert wo ich dachte ich 
könnte das ganze an meine Wünsche anpassen.
Kaum zu glauben, oder?

Trotzdem danke für deinen wunderbaren, überweltigen Rat.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich seh schon du hast nichts verstanden.
Na dann mal gutest gelingen.
Vielleicht wirst du ja noch schlau daraus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.