// Code OLED-Display, Übertragung im 8 Bit Modus // ************************************************************* // ************** Einbindung weiterer Funktionen ************* // ************************************************************* #include #include // ************************************************************* // *********** Einstellung Konfiguration Prozessor ***********4 // ************************************************************* #pragma config |= 0b.10.0001.0011.0000 // Globale Konstanten bit BUSYPIN @ PORTA.7; bit RS @ PORTA.2; bit RW @ PORTA.3; bit EN @ PORTA.6; // ************************************************************* // ********************* Prozedur: Pause ********************* // ************************************************************* void pause (uns16 ms) // Unterprogramm zum Abwarten einer { // angegebenen Anzahl von Millisekunden while(ms) // Schleife verlassen, wenn ms=0 ist { OPTION = 2; // Vorteiler auf 8 einstellen TMR0 = 131; // 125 * 8 = 1000 (= 1 ms) while (TMR0); // Abwarten einer Millisekunde ms--; // "ms" mit jeder Millisekunde erniedrigen } } /*============================================================================ Funktion : CheckBusy Parameter : --- Rueckgabe : --- Beschreibung: Prüfen ob Display Busy ist Verweis : --- ============================================================================*/ void CheckBusy (void) { bit busy_f; busy_f = 1; RS = 0; pause (1); RW = 1; pause (10); do { EN = 1; pause (10); busy_f = BUSYPIN; EN = 0; } while(busy_f); } /*============================================================================ Funktion : WriteIns Parameter : --- Rueckgabe : --- Beschreibung: Instruction ans Display senden Verweis : --- ============================================================================*/ void WriteIns (char instruction) { pause (5); RS = 0; pause (1); // wenn pause fehlt klappt Display nicht, sehr seltsam RW = 0; PORTB = instruction; pause (10); EN = 1; pause (10); EN = 0; CheckBusy(); } /*============================================================================ Funktion : initDisplay Parameter : --- Rueckgabe : --- Beschreibung: Display wird mit 8 Bit Datenbus initialisiert Verweis : --- ============================================================================*/ void initDisplay (void) { RS = 1; // sollte eigentlich nicht erforderlich sein, ohne aber Display schwarz pause (1); EN = 1; pause (1); RW = 1; // sollte eigentlich nicht erforderlich sein, ohne aber Display schwarz pause (1); WriteIns(0x39); //function set european chararacter set pause (1); WriteIns(0x08); //display off pause (1); WriteIns(0x06); //entry mode set increment cursor by 1 not shifting display pause (1); WriteIns(0x17); //Character mode and internel power on (have to turn on internel power to get the best brightness) pause (1); WriteIns(0x01); //clear display pause (1); WriteIns(0x02); //return home pause (1); WriteIns(0x0C); //display on pause (1); } /*============================================================================ Funktion : WriteData Parameter : data1=character Rueckgabe : --- Beschreibung: Zeichen senden Verweis : --- ============================================================================*/ void WriteData (char data1) { pause (5); RS = 1; pause (1); // wenn pause fehlt klappt Display nicht, sehr seltsam RW = 0; PORTB = data1; pause (10); EN = 1; pause(10); EN = 0; pause(10); CheckBusy(); } /*============================================================================ Funktion : WriteData Parameter : *string = Pointer auf String Rueckgabe : --- Beschreibung: String wird gesendet, vorsicht abschließende 0 muss da sien Verweis : --- ============================================================================*/ void WriteString (const char *pString) { char zeichen; zeichen = *pString; while (zeichen > 0) { WriteData(*pString); pString++; zeichen = *pString; } } // ************************************************************* // ************************************************************* // ********************* Hauptroutine ************************ // ************************************************************* // ************************************************************* void main (void) { // OSCF = 1; // interner Takt: 4 MHz PORTA = 0; PORTB = 0; TRISA = 0b.1000.0011; TRISB = 0b.0000.0000; pause (1000); initDisplay(); WriteString("Hallo Welt"); }