Forum: Projekte & Code LCD Menü CvAVR in WiAVR


von Tobias Tetzlaff (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.