Hallo,
da gebe ich Robert völlig recht. Zu solchen Kunstgriffen greife ich nur bei extrem großen Projekten mit viel, viel Text auf 40x4 Displays. Dann verwende ich aber auch nicht das interne EEprom des AVR, sondern ein externes 64k I2C-EEprom, das gesondert mit den Texten beschrieben wird. Dabei überlege ich mir vorher eine für das Projekt geeignete "Formatierung" des EEprom und rufe die Texte dann mit einer Sub ab, der nur ein Pointer auf den gewünschten Text/Bildschirminhalt übergeben wird.
Wenn ich das richtig verstanden habe, möchtest Du vor allem ein Menue haben, das den jeweiligen Menuepunkt anzeigt und auf Knofdruck in die entsprechende Routine verzweigt. Dafür füge ich mal ein Beispiel ein, das mit 3 Tastern auskommt und sich natürlich beliebig modifizieren lässt:
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 = 1
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
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 'Hauptprogrammschleife Ende
'------------------------------------------------------------------------------
'Diese Unterfunktion fragt die Tastatur am analogen Port ab.
'Die Werte müssten ggf. natürlich angepasst werden und entsprechen hier
'meinem Schaltungsvorschlag.
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 'Entspricht UP
Case 400 To 600
Analog_key = 33 'Entspricht DOWN
Case 650 To 750
Analog_key = 10 'Entspricht ENTER
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