#define F_CPU 8000000 #include #include #include #define CNTR 4 #define SPE 6 #define SPIE 7 //PORT B #define CS 2 #define COPI 3 #define CIPO 4 #define CLK 5 //PORT C #define buttonOne 1 #define buttonTwo 2 #define buttonThree 3 #define buttonFour 4 //PORT D #define RESET 0 volatile char operation = 0; void initSPI(){ PRR &= ~(1 << PRSPI); DDRB |= (1 << CIPO) | (1 << COPI) | (1 << CLK) | (1 << CS); PORTB |= (1 << CS); SPCR |= (1 << SPE); //Aktiviert SPI SPCR |= (1 << CNTR); //Aktiviert den 'Controler' Modus SPCR |= (1 << SPIE); //SPI Interrupt Enable SPCR |= (1 << CPOL); //SPI Mode 3 SPCR |= (1 << CPHA); //SPI Mode 3 SPCR |= (1 << DORD); //MSB First SPCR |= (1 << SPR0); //SCK / 16 = 0.5MHz } void SPIsendInit(char datas){ SPDR = datas; while(!(SPSR & (1 << SPIF))); _delay_ms(15); } void SPIinitDisplay(){ SPIsendInit(0x3a); SPIsendInit(0x09); SPIsendInit(0x06); SPIsendInit(0x1e); SPIsendInit(0x39); SPIsendInit(0x1b); SPIsendInit(0x6e); SPIsendInit(0x57); SPIsendInit(0x72); SPIsendInit(0x38); SPIsendInit(0x0f); operation = 1; } void SPIsendString(unsigned char characters[]){ int temp = strlen(characters) - 1; for(int s = 0; s <= temp; s++){ SPIsend(characters[s]); } } void SPIsend(unsigned char datas){ // Serial Write Operation // Synchronizing Lower Data Upper Data // 1 1 1 1 1 R/W RS 0 D0 D1 D2 D3 0 0 0 0 D4 D5 D6 D7 0 0 0 0 //Um Commands zu senden muss RS eine 0 sein unsigned char upperData = datas; char lowerData = datas; char command = 0x1f; char character = 0x5f; upperData &= 0xf0; lowerData &= 0x0f; upperData |= (upperData >> 4); upperData &= (0x0f); SPDR = (operation == 0) ? command : character; while(!(SPSR & (1 << SPIF))); _delay_ms(10); SPDR = lowerData; while(!(SPSR & (1 << SPIF))); _delay_ms(10); SPDR = upperData; while(!(SPSR & (1 << SPIF))); } int main(){ initSPI(); MCUCR |= (1 << 4); DDRD |= (1 << RESET); _delay_ms(10); PORTD &= ~(1 << RESET); DDRC &= ~(1 << buttonOne) & ~(1 << buttonTwo) & (1 << buttonThree) & (1 << buttonFour); //Reset Display PORTD |= (1 << RESET); _delay_ms(60); PORTD &= ~(1 << RESET); _delay_us(500); PORTD |= (1 << RESET); SPIinitDisplay(); SPIsendString("Holerra"); return 0; }