LCD Menü CvAVR in WiAVR

Gast #561441
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren