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







Zitieren

Lesezeichen