# pragma chip PIC16F84A # pragma char LCD_DATA @ PORTB # pragma char LCD_DATA_TRIS @ TRISB # pragma char LCD_CTRL @ PORTA # pragma char LCD_CTRL_TRIS @ TRISA # pragma bit LCD_E @ LCD_CTRL. 4 # pragma bit LCD_RS @ LCD_CTRL. 0 # pragma bit LCD_RW @ LCD_CTRL. 3 # pragma bit LED @ LCD_CTRL. 2 # pragma bit LCD_BUSY @ LCD_DATA. 7 //--------------------------- void LCD_WAIT_15ms (void) { uns16 x; x = 15000; //15000 while (x > 0); { x = x - 1; } } void LCD_WAIT_41ms (void) { uns16 x; x = 4100; //4100 while (x > 0); { x = x - 1; } } void LCD_WAIT_01ms (void) { uns8 x; x = 100; //100 while (x > 0); { x = x - 1; } } void LCD_WAIT_004ms (void) { uns8 x; x = 40; //40 while (x > 0); { x = x - 1; } } //--------------------------- void LCD_FERTIG (void) { LCD_DATA = 0b.0000.0000; LCD_DATA_TRIS = 0b.1111.1111; // alles Eingänge LCD_RS = 0; LCD_RW = 1; LCD_E = 1; while (LCD_BUSY == 1) { } LCD_E = 0; LCD_RS = 0; LCD_RW = 0; LCD_DATA_TRIS = 0b.0000.0000; // alles Ausgänge } void PIC_INI (void) { LCD_CTRL_TRIS = 0b.0000.0000; // alles Ausgänge LCD_DATA_TRIS = 0b.0000.0000; // alles Ausgänge } void LCD_INI (void) { LCD_DATA = 0b.0000.0000; // alle Ausgänge sind 0 LCD_E = 0; LCD_RW = 0; LCD_RS = 0; // alle Ausgänge sind 0 LCD_WAIT_15ms (); // 15ms warten LCD_DATA = 0b.0011.0000; LCD_E = 1; LCD_WAIT_41ms (); // 4,1ms warten LCD_E = 0; LCD_E = 1; LCD_WAIT_01ms (); // 0,1ms warten LCD_E = 0; LCD_E = 1; LCD_WAIT_01ms (); // 0,1ms warten LCD_E = 0; LCD_DATA = 0b.0011.0100; // 0.0.1.DL.N.F.*.* DL= 8Bit, N = 2 zeilig, F = 5x8 zeichen LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LCD_DATA = 0b.0000.1000; // Display AUS LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LCD_DATA = 0b.0000.0001; // Display löschen LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LCD_DATA = 0b.0000.0111; // 0.0.0.0.0.1.I/D.S I/D = increment/decrement, S = shift LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LCD_DATA = 0b.0000.1100; // Display EIN LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LED = 1; // lebt der PIC ? } void LCD_TAKE (void) // übernahme der Zeichen { LCD_RS = 1; LCD_RW = 0; LCD_E = 1; LCD_FERTIG (); LCD_E = 0; LCD_RS = 0; } void LCD_AUSGABE (void) { LCD_DATA = 'C'; LCD_TAKE (); LCD_DATA = 'B'; LCD_TAKE (); } void ENDLOS (void) { uns8 x; x = 10; while (x > 1) {} } void main (void) { PIC_INI (); LCD_INI (); LCD_AUSGABE (); ENDLOS (); }