- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: zweite Zeile bei LCD ansprechen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.03.2004
    Ort
    Mannheim
    Alter
    42
    Beiträge
    35

    zweite Zeile bei LCD ansprechen

    Anzeige

    E-Bike
    Moin Leude!

    Ich versuche hier mit einen Display von Reichelt (LCD 162C) in die zweite Zeile zu schreiben, was mir aber leider nicht gelingt.
    Das Display hat den Controller KS0070B drauf.

    Wenn ich die erste Zeile überlaufen lasse, komme ich irgendwann in der zweiten Zeile raus... das ist aber nicht ganz der Sinn der Sache. Ich will direkt in die 2. Zeile schreiben.

    Mit dem Setzen der GC-RAM-Adresse kann ich auch die Position des Cursors festlegen, aber danach zeigt er nix mehr an wenn ich normalen Text schicke. Allerdings bewegt sich der Cursor für jeden (unsichtbaren) Buchstaben eine Position weiter.

    Wie kann ich die zweite Zeile direkt adressieren und dort schreiben.

    Das Display läuft im 4-Bit-Modus

    Chris
    * Alles geht in Arsh - Jesus bleibt! *

    P.U.S.H - Pray Until Something Happens!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    54
    Beiträge
    2.807
    im Bascom und Hitachi-Controllern gibt es dafür z.B. die Befehler "Upperline & Lowerline", vielleicht da mal mit herumspielen...

  3. #3
    Gast
    Ja, danke für den Tipp, aber ich mache das ganze über den I2C-Baustein PCF8574. Hab also kein Bascom.

    Ich brauche die Reihenfolge der Bytes / das Byte, dass ich zum Display schicken muss.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.11.2004
    Ort
    Berlin
    Beiträge
    58
    hallo,

    ich denke mal, dein RS-Signal (Pin4) ist nach dem ersten Setzen des Cursors bleibt weiterhin auf LOW. Wenn du danach wieder Daten schreiben willst, dann musst du RS wieder auf HIGH setzen.
    RS--> HIGH --> Daten schreiben
    RS --> LOW --> Befehle schreiben

    IngBo

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2005
    Beiträge
    26
    Hier ein stueck code vielleicht kannst Du damit was Anfangen.
    Aber in 8-bit mode!
    Mfg stephan


    struct display
    {
    // Display control /////////////////
    char display_of; // display n/off
    char cursor_of; // cursor n/off
    char blinking_of; // blinking n/off
    char cursor_dir; // cursor direction:incr/decr
    char display_shift; // display shift n/off
    char bus; // bus type :8/4 chars
    char row_size; // lines :2/1 line display
    char font; // font :5x10/5x7 dots
    char enable; // display enable :E/E2
    ////////////////////////////////////

    /*
    // SDCC 3
    // Display control /////////////////
    bit display_of; // display n/off
    bit cursor_of; // cursor n/off
    bit blinking_of; // blinking n/off
    bit cursor_dir; // cursor direction:incr/decr
    bit display_shift; // display shift n/off
    bit bus; // bus type :8/4 bits
    bit row_size; // lines :2/1 line display
    bit font; // font :5x10/5x7 dots
    bit enable; // display enable :E/E2
    ////////////////////////////////////
    */
    };
    typedef struct display Display;
    #define RS P2_4 //
    #define RW P2_5 //
    #define E P2_6 //
    #define E2 P2_7 //
    #define DATA P0 // 8 data bits
    #define WAITTIME_WRITE 10 // usec time to sleep when writing to lcd
    #define WAITTIME_READ 5 // usec time to sleep when reading from lcd
    ///////////////////////////////
    bit WdtLcdIAP=0; // IAP Watchdog
    bit ENABLE_NR=0;
    /**
    * lcdRead()
    * read data from LCD and write to dat
    **/
    char lcdRead(short dat)
    {
    RS=(dat>>9)&1;
    RW=ON;
    if (ENABLE_NR==1) E=ON;
    else E2=ON;
    if(WdtLcdIAP) feedWatchDog();
    usleep(WAITTIME_READ);
    if(WdtLcdIAP) feedWatchDog();
    dat=(short)DATA;
    E=OFF; E2=OFF;
    RS=OFF;
    RW=OFF;
    return (char)dat;
    }

    /**
    * lcdWrite()
    * write dat direct to LCD bus
    * return DD adresse position
    **/
    void lcdWrite(short dat)
    {
    while((lcdRead(0)>>7)&1){} // wait until LCD is ready

    RS=(dat>>9)&1; // get RS bit
    RW=OFF; // set RW bit


    if(WdtLcdIAP) feedWatchDog();
    usleep(WAITTIME_WRITE);
    if(WdtLcdIAP) feedWatchDog();

    if (ENABLE_NR==1) E=ON;
    else E2=ON;
    DATA=(char)dat;

    E=OFF; E2=OFF;
    RS=OFF;
    RW=OFF;
    return;
    }
    /**
    * setCursor()
    * move cursor to line and row
    * line1 = 0 line2 = 1
    **/
    void setCursor(Display *dis,char line,char col)
    {
    short dat=0;

    ENABLE_NR=dis->enable;

    col&=63; // filter
    dat|=col; // related adresse
    dat|=((line&1)<<6); // line 1 or 2
    dat|=(1<<7); // DB7
    lcdWrite(dat);
    }

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    11.03.2004
    Ort
    Mannheim
    Alter
    42
    Beiträge
    35
    so, erstmal herzlichen Dank.

    werde mich mal damit beschäftigen...
    * Alles geht in Arsh - Jesus bleibt! *

    P.U.S.H - Pray Until Something Happens!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests