mikrocontroller.net

Forum: Projekte & Code LCD Menü CvAVR in WiAVR


Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.