#include <mega128.h>
#include <delay.h>
////////////////////////////////////////////////////////////////////////////////////////////
// ATmega128: 
// RC -1 МHz; фьюзы не трогаем
////////////////////////////////////////////////////////////////////////////////////////////


// Подключение дисплея
#define DATA  PORTA
#define RS      PORTB.5
#define DC      PORTB.6
#define WR     PORTB.7

// Определениецветов
#define black   0,0,0            // черный
#define red      255,0,0        // красный
#define green   0,255,0        // зеленый
#define blue     0,0,255        // синий
#define yellow  255,255,0    // жёлтый
#define cyan    0,255,255    // голубой
#define lilac      255,0,255    // сиреневый
#define white   255,255,255 // белый
 

void SendCom (unsigned int com) // отправка команд
{
DC = 0;
DATA = com;
WR = 0;
WR = 1;
}

void SendDat (unsigned int dat)  //отправка данных
{
DC = 1;
DATA = dat;
WR = 0;
WR = 1;
}

void LCDinit ()             //  инициализация дисплея
{
WR = 1;
RS = 0;
delay_ms(1);
RS = 1;
delay_ms(5);
SendCom(0x11);          // Выход дисплея из спячки
SendCom(0x29);          // Включение дисплея
delay_ms(1);
SendCom(0x36);
SendDat(0xC0);            // Книжная ориентация дисплея
SendCom(0x3A);
SendDat(0b00000111); //  24 битный режим
}

void LCDclear(char color_r, char color_g, char color_b)  // Заливка дисплея
{
unsigned long int i;
SendCom(0x2A);                      // Команда ориетациипо Х координате
SendDat(0);  SendDat(0);         // Данные начала Х координат (0)
SendDat(0);  SendDat(240);     // Данные конца Х координат (240)
SendCom(0x2B);                      // Команда ориентации по Y координате
SendDat(0);  SendDat(0);         // Данные начала Y координат (0)
SendDat(1);  SendDat(65);       // Данные конца Y координат (320)
SendCom(0x2C);                      // Команда записи в память дисплея
for (i=0;i<(320*240);i++) {SendDat(color_r);SendDat(color_g);SendDat(color_b);}    // RGB   Данные для записи в память дисплея
}
 

void main(void)
{
////////////////////////////////////////////// OLED 
DDRA=0xFF;        // Data      
PORTA=0x00;      // Data    
DDRB.5=1;          // RESET       
PORTB.5=1;         // RESET       
DDRB.6=1;          // D/C 1 – data, 0 – Function.  
PORTB.6=1;         // D/C 1 – data, 0 – Function.  
DDRB.7=1;          // WR
PORTB.7=1;         // WR  
////////////////////////////////////////////// 

LCDinit();                // Инициализация дисплея
//LCDclear(red);      // Заливка дисплея красным цветом

////////////////////////////////////////////// 
/**/
while (1) 
{
  LCDclear(red);      // Заливка дисплея красным цветом
  LCDclear(green);  // Заливка дисплея зеленый цветом
  LCDclear(blue);     // Заливка дисплея синий цветом
};

////////////////////////////////////////////// 
}

