Bin gerade wieder ein bisschen bei meinem WinampTerminal bei und dabei ist vorerste eine kleine Menuesteuerung "abgefallen"

Zur Steuerung habe ich einen kleinen Minijoystick mit zwei kleinen Potis und einem Taster aus einem PS-Pad, man braucht daher nur 3 Eingänge für 4 Richtungsfunktionen und einer Tasterfunktion. Als Anzeige habe ich ein 4x16 Display. Als Board benutze ich derzeit das MyAvr.

Man scrollt hier einfach mit Up/down durch eine beliebig erweiterbare Anzahl von Menues und kann dort dann weitere Aktionen steuern.

Bild hier  


Ist sicherlich nicht optimal programmiert, funktioniert aber :
Code:
$regfile = "m8def.dat"
$crystal = 3686400
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Lcd = 16 * 4
Initlcd
Cursor Off


Config Portd = Output                                       'LED o.Ä. an Port D
Config Portc = Input                                        'Eingänge an Port C

'Taster an Port C.5
'Poti 1 an Port C.0
'Poti 2 an Port C.1


Dim W As Word                                               'adc horizontal
Dim X As Word                                               'adc vertikal
Dim R As Bit                                                'rechts
Dim L As Bit                                                'links
Dim O As Bit                                                'oben
Dim U As Bit                                                'unten
Dim T As Bit                                                'taste
Dim Z As Byte                                               'seitenzähler



Config Timer1 = Timer , Prescale = 64                       'Interrupt wird erzeugt, springt 10x pro Sekunde nach Timer_irq
On Timer1 Timer_irq
Const Timervorgabe = 53036
Enable Timer1
Enable Interrupts

Cls                                                         'Hauptschleife für Hauptmenue
Do
   Locate 1 , 1
   Lcd "Waehlen sie :"
   Locate 2 , 1
   Lcd "(Up/down)"
   Locate 3 , 1


   If O = 1 Then Incr Z                                     'wenn Poti nach oben, erhöhe Seitenzähler
   If U = 1 Then Decr Z                                     'wenn Poti nach unten, verringere Seitenzähler


   If Z = 1 Then Gosub Menue1                               'springe je nach Zählstand
   If Z = 2 Then Gosub Menue2
   If Z = 3 Then Gosub Menue3
   If Z = 4 Then Gosub Menue4
   If Z > 4 Then Z = 0                                      'Zähler fängt bei > Menue 4 wieder vorne an
   Waitms 300
Loop
End


Timer_irq:
  Timer1 = Timervorgabe

  Config Adc = Single , Prescaler = Auto
  Start Adc

  W = Getadc(0)                                             'Analogwerte werden eingelesen für "Taste" oben/unten
  If W > 700 Then L = 1 Else L = 0
  If W < 300 Then R = 1 Else R = 0

  X = Getadc(1)                                             'Analogwerte werden eingelesen für "Taste" links/rechts
  If X > 700 Then O = 1 Else O = 0
  If X < 300 Then U = 1 Else U = 0

  If Pinc.5 = 0 Then T = 1 Else T = 0                       'taster wird eingelesen und "T" auf dessen Zustand gesetzt
Return



Menue1:                                                     'Hier werden die Menues angesprungen
Cls
Do
   Locate 1 , 1
   Lcd "Menue 1"
   Locate 2 , 1
   Lcd "Das erste Menue"
Loop Until O = 1 Or U = 1                                   'loop bis oben/unten betätigt, springe dann zurück
Return

Menue2:
Cls
Do
   Locate 1 , 1
   Lcd "Menue 2"
   Locate 2 , 1
   Lcd "Das zweite"
Loop Until O = 1 or U=1
Return

Menue3:
Cls
Do
   Locate 1 , 1
   Lcd "Menue 3"
   Locate 2 , 1
   Lcd "Noch Eines"
Loop Until O = 1 or U=1
Return

Menue4:
Cls
Do
   Locate 1 , 1
   Lcd "Menue 4"
   Locate 2 , 1
   Lcd "Und Schliesslich"
Loop Until O = 1 Or U = 1
Return