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:
GrüßeCode:'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
Henrik







Zitieren

Lesezeichen