/* * OLED_test.c * * Created: 25.09.2012 15:44:29 * Author: Martin */ #define F_CPU 1000000UL #include #include #include #include uint8_t displayBusy = 0x00; // Busy Flag des Displays void wartemikrosekunden(uint16_t us) // Zeit vertrödeln aus AVR Bibliothek delay.h { for(; us>0; us--) _delay_us(1); } void wartemillisekunden(uint16_t ms) { for(; ms>0; ms--) _delay_ms(1); } uint8_t pruefeBusyFlag(void) { uint8_t BusyFlag = 0x00; DDRD = 0x00; // Port D als Eingang nutzen DDRB |= ( 1 << PB0 )|( 1 << PB1 ); // PB0 und PB1 als Ausgang setzen PORTB &= ~(1<>7; return BusyFlag; } void schreibeBefehl (uint8_t befehl) { DDRD = 0xFF; // alle Ports von Register D als Ausgang setzen // PD0...PD7 = DB0...DB7 des Displays DDRB = 0xFF; //Ports von Register B als Ausgang nutzen PORTB &= ~(1<=1) { position = stelle-1; } else if (stelle==0) { position = 0; } switch (zeile) { case 1: schreibeBefehl(0x80|0x00+position); break; // 1. Zeile case 2: schreibeBefehl(0x80|0x40+position); break; // 2. Zeile //40 HEX = 64 DEZ 64 Zeichen kann der Controller pro Zeile aufnehmen //80 HEZ setzt das MSB auf HIGH, die unteren 7Bit geben die Stelle an } } void DDRAMinhalt(uint8_t befehl) { while (pruefeBusyFlag()) { wartemillisekunden(1); } DDRD = 0xFF; // alle Ports von Register D als Ausgang setzen // PD0...PD7 = DB0...DB7 des Displays PORTB |= (1<