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