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:
Code:
'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
Lesezeichen