PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lcd-menü



Bratwurst
16.09.2005, 18:42
Hallo,

Ich versuche mich jetzt schon geraume Zeit an einem einfachen Menü (darzustellen auf einem 16x4 LCD). Ich habe auch schon "etwas per taster durchschaltbares" auf die Beine gestellt bekommen, allerdings ist das noch sehr umständlich programmiert.
Könnt ihr mir eventuell einfach einmal ein Grundgerüst vorschlagen, wie man so etwas am ressurcensparendsten und ergonomisch lösen kann.

Ich bin für jedes Beispiel dankbar

mfg
Paul

hrei
16.09.2005, 19:50
Hallo!

Meine Standardlösung nutzt 3 Tasten: Rauf, Runter und Enter.

Im gezeigten Code wird dafür eine "Tastatur" an einem Analogport genutzt. Das Beuispiel muss man sich natürlich für die eigenen Bedürfnisse zurechtfummeln:



'Gerüst für Atmega 8 mit Menue - HR - AUGUST 2005

$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600


Enable Interrupts 'Interrupts erlauben

Config Adc = Single , Prescaler = Auto

Config Pinc.0 = Input 'Für analog_key
Keyboard Alias Pinc.0 'Aliasname

Config Pinb.0 = 1 'Ausgang
Beep Alias Pinb.0

Declare Function Analog_key() As Byte

Dim Taste As Byte
Dim Menue_current As Byte
'-------------------------------------------------------------------------------

Sound Beep , 400 , 450 'Bin wach -)
Cursor Off
Lcd " Menue Test"
Wait 3
'-------------------------------------------------------------------------------

Cls
Menue:
Menue_current = 0

Menue_1:

Taste = Analog_key()
Waitms 100

If Taste = 32 Then
Menue_current = Menue_current + 1
End If

If Taste = 33 Then
Menue_current = Menue_current - 1
End If

If Menue_current > 6 Then Menue_current = 1
If Menue_current < 1 Then Menue_current = 6

If Taste = 10 Then Goto Execute
'-------------------------------------------------------------------------------
Select Case Menue_current 'aktuelle Auswahl anzeigen

Case 1
Locate 1 , 1
Lcd " Fall 1 "
Case 2
Locate 1 , 1
Lcd " Fall 2 "
Case 3
Locate 1 , 1
Lcd " Fall 3 "
Case 4
Locate 1 , 1
Lcd " Fall 4 "
Case 5
Locate 1 , 1
Lcd " Fall 5 "
Case 6
Locate 1 , 1
Lcd " Fall 6 "

End Select
Taste = 255
Goto Menue_1
'-------------------------------------------------------------------------------

Execute: 'aktuellen Menuepunkt ausführen
Cls

Select Case Menue_current
Case 1
Cls
'Call 1
Cls
Case 2
Cls
'Call 2
Cls
Case 3
Cls
'Call 3
Cls
Case 4
Cls
'Call 4
Cls
Case 5
Cls
'Call 5
Cls
Case 6
Cls
'Call 6
Cls
End Select

Goto Menue_1
'-------------------------------------------------------------------------------

End 'Hauptprogramm Ende

'------------------------------------------------------------------------------
'Diese Unterfunktion fragt die Tastatur am analogen Port ab
Function Analog_key() As Byte
Local Ws As Word
Analog_key = 255
Start Adc
Ws = Getadc(0)
If Ws < 900 Then
Select Case Ws
Case 0 To 100
Analog_key = 32
Case 400 To 600
Analog_key = 33
Case 650 To 750
Analog_key = 10
End Select
Sound Beep , 400 , 450 'Quittungspiepser
End If
Waitms 100
End Function
'-------------------------------------------------------------------------------
'
'
'.... Hier folgen die durch das Menue aufgerufenen Subroutinen bzw. Funktionen


Grüße
Henrik

Bratwurst
17.09.2005, 18:56
Vielen Dank für das Beispiel !
Ich hab mir lieber mal eine Analogtastatur zurechtgefummel ;) Jetzt funktioniert das alles auch Prima.

Schönes Wochenende noch

spaceduck
24.11.2005, 12:23
mal ne Frage...

Was ist eine Analogtastatur? Wie soll sowas schaltungstechnisch aussehen mit den 3 Tasten?

Danke schon mal...

spaceduck
24.11.2005, 12:23
mal ne Frage...

Was ist eine Analogtastatur? Wie soll sowas schaltungstechnisch aussehen mit den 3 Tasten?

Danke schon mal...

hrei
24.11.2005, 12:42
mal ne Frage...
Was ist eine Analogtastatur? Wie soll sowas schaltungstechnisch aussehen mit den 3 Tasten?


Siehe direkt: http://www.henrik-reimers.de/control/tastaturen.htm

Ansonsten evtl. auch mal in die Wissensrubrik dieses Forums hineinspähen und sich ggf. auch http://www.henrik-reimers.de/control/avr/index.html reinziehen.

Grüße
Henrik