- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: Mikrocontroller ADuC812, uVision2, LCD ansteuern

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    AM
    Gast

    Mikrocontroller ADuC812, uVision2, LCD ansteuern

    Hallo,

    ich programmiere seit 2 Tagen Mikrocontroller in C (uVision2) und habe daher noch nicht die Erfahrung! Derzeit versuche ich ein LCD (AV1624) anzusteuern. Ich hab das Datenblatt des Displays durchgearbeitet und danach meinen C-Code geschrieben (siehe unten!). Ich hab keine Ahnung was ich da falsch gemacht habe (kenn mich ja noch nicht besonders aus). Vielleicht kann mir jemand einen Tip geben.


    Mein LCD-File:


    #include <stdio.h>
    #include <ADUC812.H>
    #include "LCD.h"


    #define COMMAND 0x30
    // 0011 0000 (ist das Initialisierungskommando => aus Datenblatt)
    #define BUSY 0x80 // Bit 7 (von Port 0.7 ist gesetzt, wenn Display für den Empfang
    // weiterer Daten noch nicht bereit ist!)

    #define WAIT_WHILE_BUSY { while (ReadBusyFlag() & BUSY); }


    // LCD-Datenpins liegen auf Port 0 (0.0-0.7)
    //
    // E RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
    //
    // P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
    //

    // um die Portpins einzeln ansprechen zu können:
    sbit RS = I2CCON^1; // Register Select: RS = 1: Daten werden gesendet!
    // RS = 0: Kommando wird gesendet!
    sbit RW = I2CCON^0; // Read/Write-Pin: Read = 1 / Write = 0
    sbit Enable = I2CCON^2; // bei fallender Flanke (1->0) werden die Werte der Daten- und
    // Steuerleitungen vom Display eingelesen!


    void InitLCD() // Initialisierungsschleife aus Datenblatt
    {
    Wait(300);

    RS = 0;
    // dem Display anzeigen, dass ein Kommando gesendet werden soll
    RW = 0; // Schreiben!
    P0 = COMMAND;
    Enable = 1; // Daten werden bei fallender Flanke (1->0) übernommen
    Wait(500); // kurz warten
    Enable = 0;

    Wait(300);
    RS = 0; RW = 0;
    P0 = COMMAND;
    Enable = 1;
    Wait(300);
    // kurz warten
    Enable = 0;


    Wait(300); // 100 us warten

    RS = 0;
    RW = 0;
    P0 = COMMAND;
    Enable = 1;
    Wait(300);
    // kurz warten
    Enable = 0;

    Wait(300);
    // 100 us warten

    // Display-Mode festlegen
    RS = 0;
    RW = 0;
    P0 = 0x38;
    // 00111000
    Enable = 1; // |||
    Wait(300); // || \- Zeichenfont 5x7
    Enable = 0; // | \-- 2 Zeilen
    // \--- 8-Bit Mode
    Wait(300);// ab hier kann das Busy-Flag abgefragt werden!
    // Display einschalten
    RS = 0;
    RW = 0;
    P0 = 0x3c;
    // 00111100
    Enable = 1; // |||
    Wait(300); // || \- Zeichen unter dem Cursor blinkt nicht
    Enable = 0; // | \-- Cursor sichtbar
    // \--- Display einschalten
    Wait(300);//WAIT_WHILE_BUSY; // warten, bis Busy-Flag vom Displaycontroller gelöscht wird

    // Display löschen
    RS = 0;
    RW = 0;
    P0 = 0x01;
    // Kommando "Display löschen"
    Enable = 1;
    Wait(300); Enable = 0;

    Wait(300);
    //WAIT_WHILE_BUSY;

    // Entry Mode Set
    RS = 0;
    RW = 0;
    P0 = 0x06;
    // 00000110
    Enable = 1; // ||
    Wait(300); // | \- Displayinhalt nicht schieben
    Enable = 0; // \-- Adresspointer inkrementieren

    Wait(300);
    }


    unsigned char ReadBusyFlag()
    {
    RS = 0;
    RW = 1;
    Enable = 1;
    Wait(300);
    Enable = 0;

    return P0;
    }


    void WriteChar (unsigned char Data)
    {
    WAIT_WHILE_BUSY;

    RS = 1;
    // signalisieren, dass Daten gesendet werden
    RW = 0; // will schreiben

    P0 = Data; // Daten an den Port legen!

    Enable = 1;
    Wait(300);
    Enable = 0;
    Wait(300);
    }


    void WriteText (char *Data)
    {
    while (*Data)
    {
    WriteChar (*Data++);
    }
    }


    void Wait(unsigned int i)
    {
    for (; i >= 0; i--);
    }




    Mein"Main"-File:

    #include <stdio.h>
    #include <ADUC812.H>
    #include "LCD.h"


    void main (void)
    {
    InitLCD();

    WriteChar('T');

    while (1);
    // WriteText ("Test");
    }


    Ich hab die Files auch noch mal im Anhang beigefügt!


    Danke!!! \/ [/b]
    Angehängte Dateien Angehängte Dateien
    • Dateityp: c main_113.c (197 Bytes, 100x aufgerufen)
    • Dateityp: h lcd.h (181 Bytes, 126x aufgerufen)
    • Dateityp: c lcd.c (3,9 KB, 120x aufgerufen)

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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

12V Akku bauen