Hallo, ich habe einen Teil, eines LCD Menüs, welches in CVAVR programmiert wurde. Da ich aber mit WinAVR meine Programme versuche zu schreiben, brauche ich Hilfe, bei der Umsetzung von CVAVR in WinAVR. Hier die Teile, des LCD Menüs, ich hoffe, es steigt jemand durch. Es sind wirklichnur Teile des Programms, es fehlen einige Funktionen, die aber nicht für das Menü gebraucht werden, denke ich. flash char menu[72][18] = {"A","B","C","D","E","F","G","H", "1-a","2-a","3-a","4-a","5-a","6-a","7-a","8a", "1-b","2-b","3-b","4-b","5-b","6-b","7-b","8b", "1-b","2-b","3-c","4-c","5-c","6-c","7-b","8b", "1-d","2-d","3-d","4-d","5-d","6-d","7-d","8-d", "1-e","2-e","3-e","4-e","5-e","6-e","7-e","8-e", "1-f","2-f","3-f","4-f","5-f","6-f","7-f","8-f", "1-g","2-g","3-g","4-g","5-g","6-g","7-g","8-g", "1-h","2-h","3-h","4-h","5-h","6-h","7-h","8-h" }; unsigned char menu_pointer[3] = {0,0,0}; unsigned char submenu_pointer = 0; unsigned char menu_level = 0; //Hier werden die Funktonen zugeordnet /* menu line A 1-8 */ flash PF flash functionArray[64] = { na, na, na, na, na, na, na, na, /* menu line B 1-8 */ na, na, na, na, na, na, na, na, /* menu line C 1-8 */ na, na, na, na, na, na, na, na, /* menu line D 1-8 */ na, na, na, na, na, na, na, na, /* menu line E 1-8 */ na, na, na, na, na, na, na, na, /* menu line F 1-8 */ na, na, na, na, na, na, na, na, /* menu line G 1-8 */ na, na, na, na, na, na, na, na, /* menu line H 1-8 */ na, na, na, na, na, na, na, na }; void display_menu() { unsigned char menuoffset = 0; if ( menu_level == 0 ) { //ct_lcd_output( menu[ menu_pointer[0]], 1 ); //ct_lcd_output( lcd_clearline, 2 ); lcd_clear(); //lcd_high (3); //lcd_gotoxy(0,0); lcd_putsf( menu[ menu_pointer[0]] ); lcd_gotoxy(0,1); lcd_putsf( lcd_clearline ); lcd_gotoxy(0,2); lcd_putsf( lcd_clearline ); } else if ( menu_level == 1 ) { if ( returned_to_menu ) { //ct_lcd_output( menu[ menu_pointer[0]], 1 ); //ct_lcd_output( lcd_clearline, 3 ); lcd_clear(); //lcd_high (3); lcd_gotoxy(0,0); lcd_putsf( menu[ menu_pointer[0]] ); lcd_gotoxy(0,1); lcd_putsf( menu[ menu_pointer[0]] ); lcd_gotoxy(0,2); lcd_putsf( lcd_clearline ); returned_to_menu = 0; } menuoffset = (menu_pointer[0]+1)*8+menu_pointer[1]; //ct_lcd_output( menu[ menuoffset ], 2 ); lcd_clear(); //lcd_high (3); lcd_gotoxy(0,0); lcd_putsf( menu[ menu_pointer[0]] ); lcd_gotoxy(0,1); lcd_putsf( menu[ menuoffset ]); } } void dispatchFunction() { unsigned char i,offset = 0; offset = menu_pointer[0]*8+menu_pointer[1]; i=(*functionArray[offset]) ( 0 ); } void ecu_state_handler() { changed = 1; //ct_lcd_clear(); lcd_clear(); while ( 1 ) { //while ( !switch1 ) { if ( changed ) { display_menu(); changed = 0; delay_ms( 500 ); } /* this is the cancel/end/break switch */ if ( switch1 ) { if ( menu_level > 0 ) { menu_level--; menu_pointer[ menu_level +1 ] = 0; // Zurück zu Submenu 1 } else if ( menu_level == 0 ) { menu_pointer[ menu_level ] = 0; // Zurück zu Menu A //Startbildschirm display_run_1(); menu_level--; }; changed = 1; } if ( switch2 ) { menu_pointer[ menu_level ]--; if ( menu_pointer[ menu_level ] == 255 ) { menu_pointer[ menu_level ] = 7; } changed = 1; } if ( switch3 ) { menu_pointer[ menu_level ]++; if ( menu_pointer[ menu_level ] == 8 ) { menu_pointer[ menu_level ] = 0; } changed = 1; } /* this is the OK, enter, yes switch */ if ( switch4 ) { menu_level++; if ( menu_level == 2 ) { dispatchFunction(); menu_level = 1; returned_to_menu = 1; } changed=1; } } } void main(void) { // Global enable interrupts #asm("sei") while (1) { ecu_state_handler(); }; } Gruß Toby
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.