- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: LCD Ansteurung mittels C

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.07.2005
    Ort
    Oberwil
    Alter
    43
    Beiträge
    131

    LCD Ansteurung mittels C

    Anzeige

    Praxistest und DIY Projekte
    Gibt es vielleicht ein Codestück in C damit ich mein LCD 2x16 ansteuren kann? Habe mich mal umgeschaut im Netz, fand gute Beispiele, die aber meistens mit Assembler progammiert wurden. Ich möchte mich grundsätzliczh mit C beschäftigen.

  2. #2

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.09.2005
    Ort
    Kiel
    Alter
    43
    Beiträge
    16

    Textausgabe Funktion

    Hallo!
    Komme bei der "komfortablen" Textausgabe auf einem 2x8 Display an einem atmega8, 4-bit Modus, nicht weiter:
    Ich würde gerne eine Funktion verwenden, der ich als Parameter die Wertigkeit von RS und das zu bearbeitende Byte übergebe.
    Habe da folgendes:

    Code:
    void writeLCD(unsigned char rs,unsigned char ch)
    {
    
    connected_port=0x00;									//upper nibble
    if ((ch & 0x80) == 0x80) connected_port |= 0x08;		//prüfen, ob bit D7 gesetzt werden soll
    if ((ch & 0x40) == 0x40) connected_port |= 0x04;		//prüfen, ob bit D6 gesetzt werden soll
    if ((ch & 0x20) == 0x20) connected_port |= 0x02;		//etc.
    if ((ch & 0x10) == 0x10) connected_port |= 0x01;
    if (rs == 1) connected_port |= 0x10;					//prüfen, ob Befehl (rs=0) oder Wort (rs=1) anliegt
    
    connected_port |= 0x20;									//schreiben zum Display
    connected_port &= 0xdf;
    
    wait(100);
    
    connected_port=0x00;									//lower nibble
    if ((ch & 0x08) == 0x08) connected_port |= 0x08;
    if ((ch & 0x04) == 0x04) connected_port |= 0x04;
    if ((ch & 0x02) == 0x02) connected_port |= 0x02;
    if ((ch & 0x01) == 0x01) connected_port |= 0x01;
    if (rs == 1) connected_port |= 0x10;
    
    connected_port |= 0x20;
    connected_port &= 0xdf;
    
    wait(100);
    }
    
    
    void writeStrLCD(char *ptr)
    {
    unsigned char i;
    
    for (i=1;i<41;i++)
       {
       if (*ptr == 0x00) break;
       writeLCD(1,*ptr);
       *ptr++ = 0x00;
       }
    }
    Das Problem ist, dass bei Aufruf von z.B. writeLCD(0,0x01); (was ja einem clear entspricht) gar nichts passiert.
    Bei Aufruf von writeStrLCD("abc"); werden zwar 3 Zeichen geschrieben, aber eben nicht abc...
    Bei mir im Kopf funktionierts doch aber so gut....
    Wäre sehr nett, wenn mir jemand einen Tipp geben könnte!
    MfG, Cvecko![/code]

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    In writeLCD() musst du connected_port auch hin und wieder rausschreiben
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.09.2005
    Ort
    Kiel
    Alter
    43
    Beiträge
    16
    Rausschreiben? Meinste damit das "portionsweise" 4-bit rüberschicken zum Display? Das mach ich ja 2x mit

    connected_port |= 0x20; //schreiben zum Display
    connected_port &= 0xdf;

    Einmal fürs upper, einmal fürs lower nibble...
    Oder meinst du was anderes?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    28.09.2005
    Ort
    Kiel
    Alter
    43
    Beiträge
    16
    Fiel mir noch ein: Ist es bei obigem Programm überhaupt richtig, zu Anfang der beiden nibblebit-Zuweisungsteilen connected_port=0x00; zu setzen?
    Hab noch ein bisschen rumprobiert, funktioniert aber bis jetzt leider immer noch nicht...
    Wenn jemand noch eine Idee hat: Wär echt super!
    Danke & mfG, Cvecko!

Berechtigungen

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

Solar Speicher und Akkus Tests