olikraus / ucglib

Arduino True Color Library for TFTs and OLEDs
https://github.com/olikraus/ucglib/wiki
Other
261 stars 76 forks source link

support 1.5" oled (SEPS225) controller #47

Closed olikraus closed 8 years ago

olikraus commented 9 years ago

128x128 display ebay: www.ebay.com/itm/5V-Ready-SPI-1-5-Full-Color-OLED-Module-for-Arduino-AVR-PIC-STM-ARM-PI-/141641587471

http://oled.jimdo.com/2014/02/21/ug-2828gdeaf02-oled-module-for-arduino/ Display: UG-2828GDEAF02-Univision Arduino-UG282802.rar

Open topics

The color problem edges seems to be a display issue. Writing a color with none zero blue component to the last line, will show something on the first line if this is also blue (probably some bits in the red component are set). Attached a picture to this issue (see below).

olikraus commented 9 years ago

/* Test code for driving UG2828GDEAF02 1,5# OLED ZhangFeng, PRC. zjjszhangf@gmail.com http://vfdclock.jimdo.com 01-18-2014 */

include

include

define FASTIO 1

// 4-wire SPI(BS1=0; BS2=0)

define RST_PIN 8

define CS_PIN 9

define DC_PIN 10

define DIN_PIN 11

define CLK_PIN 12

define HVEN_PIN 13

define DODELAY asm("nop\n\t""nop\n\t");

define COUNTOF(arr) (sizeof(arr) / sizeof(arr[0]))

ifndef FASTIO

// rst

define OLED_RES_1 digitalWrite(RST_PIN, HIGH)

define OLED_RES_0 digitalWrite(RST_PIN, LOW)

// cs

define OLED_CS_1 digitalWrite(CS_PIN, HIGH)

define OLED_CS_0 digitalWrite(CS_PIN, LOW)

// DC (Data or Command)

define OLED_DC_1 digitalWrite(DC_PIN, HIGH)

define OLED_DC_0 digitalWrite(DC_PIN, LOW)

// data in

define OLED_DIN_1 digitalWrite(DIN_PIN, HIGH)

define OLED_DIN_0 digitalWrite(DIN_PIN, LOW)

// clock

define OLED_CLK_1 digitalWrite(CLK_PIN, HIGH)

define OLED_CLK_0 digitalWrite(CLK_PIN, LOW)

// HVEN(optional)

define OLED_HVEN_1 digitalWrite(HVEN_PIN, HIGH)

define OLED_HVEN_0 digitalWrite(HVEN_PIN, LOW)

else

// Fast IO version // pin map please check: http://arduino.cc/en/Hacking/Atmega168Hardware // pin11 = pb3; pin12 = pb4; pin15 = pb5

define GPIO_Pin0 (0x01) /* Pin 0 selected /

define GPIO_Pin1 (0x02) / Pin 1 selected _/

define GPIO_Pin2 (0x04) / Pin 2 selected _/

define GPIO_Pin3 (0x08) / Pin 3 selected _/

define GPIO_Pin4 (0x10) / Pin 4 selected _/

define GPIO_Pin5 (0x20) / Pin 5 selected _/

define GPIO_Pin6 (0x40) / Pin 6 selected _/

define GPIO_Pin7 (0x80) / Pin 7 selected */

define RES_PORT PORTB

define CS_PORT PORTB

define DC_PORT PORTB

define DIN_PORT PORTB

define CLK_PORT PORTB

define HVEN_PORT PORTB

define RES_PORTPIN GPIO_Pin_0

define CS_PORTPIN GPIO_Pin_1

define DC_PORTPIN GPIO_Pin_2

define DIN_PORTPIN GPIO_Pin_3

define CLK_PORTPIN GPIO_Pin_4

define HVEN_PORTPIN GPIO_Pin_5

define OLED_RES_1 RES_PORT |= (RES_PORTPIN)

define OLED_RES_0 RES_PORT &= ~(RES_PORTPIN)

define OLED_CS_1 CS_PORT |= (CS_PORTPIN)

define OLED_CS_0 CS_PORT &= ~(CS_PORTPIN)

define OLED_DC_1 DC_PORT |= (DC_PORTPIN)

define OLED_DC_0 DC_PORT &= ~(DC_PORTPIN)

define OLED_DIN_1 DIN_PORT |= (DIN_PORTPIN)

define OLED_DIN_0 DIN_PORT &= ~(DIN_PORTPIN)

define OLED_CLK_1 CLK_PORT |= (CLK_PORTPIN)

define OLED_CLK_0 CLK_PORT &= ~(CLK_PORTPIN)

define OLED_HVEN_1 HVEN_PORT |= (HVEN_PORTPIN)

define OLED_HVEN_0 HVEN_PORT &= ~(HVEN_PORTPIN)

endif

define Max_Column 0x7f // 128-1

define Max_Row 0x7f // 128-1

define Brightness 0x0F

define MAKECOLOR64k(r,g,b) (unsigned short int)((((unsigned short int)(r)>>3)<<11)|(((unsigned short int)(g)>>2)<<5)|((unsigned short int)(b)>>3))

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Delay Time //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

define uDelay

void uDelay1(unsigned char l) { while(l--) { //asm("nop\n\t""nop\n\t""nop\n\t""nop\n\t"); //asm("nop\n\t""nop\n\t""nop\n\t""nop\n\t"); }; }

inline void Write_Command(unsigned char Data) { unsigned char i; OLED_CS_0; OLED_DC_0; for (i=0; i<8; i++) { OLED_CLK_0; if((Data&0x80)>>7) OLED_DIN_1; else OLED_DIN_0; Data = Data << 1; uDelay(1); OLED_CLK_1; uDelay(1); } OLED_CLK_0; OLED_DC_1; OLED_CS_1; }

inline void Write_Data(unsigned char Data) { unsigned char i;

OLED_CS_0; OLED_DC_1; for (i=0; i<8; i++) { OLED_CLK_0; if((Data&0x80)>>7) OLED_DIN_1; else OLED_DIN_0; Data = Data << 1; uDelay(1); OLED_CLK_1; uDelay(1); } OLED_CLK_0; OLED_DC_1; OLED_CS_1; }

void OLED_InitIOs(void) { OLED_RES_1; OLED_CS_1; OLED_CLK_1; OLED_DIN_1; OLED_DC_1; }

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Initialization //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void OLED_Init(void) { unsigned char i;

OLED_RES_0; for(i=0;i<200;i++) { delay(1); // delay } OLED_RES_1;

// Disp OFF Write_Command(0x06); Write_Data(0x00);

// OSC_CTL Write_Command(0x02); Write_Data(0x01); // CLOCK_DIV Write_Command(0x03); Write_Data(0x30); // REDUCE_CURRENT Write_Command(0x04); Write_Data(0x00); // SOFT RET Write_Command(0x05); Write_Data(0x00); // PRECHARGE_TIME_R Write_Command(0x08); Write_Data(0x03); // PRECHARGE_TIME_G Write_Command(0x09); Write_Data(0x04); // PRECHARGE_TIME_B Write_Command(0x0A); Write_Data(0x05); // PRECHARGE_CURRENT_R Write_Command(0x0B); Write_Data(0x0B); // PRECHARGE_CURRENT_G
Write_Command(0x0C); Write_Data(0x0B); // PRECHARGE_CURRENT_B Write_Command(0x0D); Write_Data(0x0E); // DRIVING_CURRENT_R Write_Command(0x10); Write_Data(0x3E); // DRIVING_CURRENT_G Write_Command(0x11); Write_Data(0x32); // DRIVING_CURRENT_B Write_Command(0x12); Write_Data(0x3D); // DISPLAY MODE SET Write_Command(0x13); Write_Data(0x00); // RGB_IF Write_Command(0x14); Write_Data(0x01);
// RGB_POL Write_Command(0x15); Write_Data(0x00);

// MEMORY WRITE MODE // 6bit3 262k color / Write_Command(0x16); WriteData(0x76); / // 8bit_2 64k color Write_Command(0x16); Write_Data(0x66); // MX1_ADDR Write_Command(0x17); Write_Data(0x00); // MX2_ADDR Write_Command(0x18); Write_Data(0x7F); // MY1_ADDR Write_Command(0x19); Write_Data(0x00); // MY2_ADDR Write_Command(0x1A); Write_Data(0x7F); // MEMORY ACCESS POINTER X Write_Command(0x20); Write_Data(0x00); // MEMORY ACCESS POINTER Y Write_Command(0x21); Write_Data(0x00); // DUTY Write_Command(0x28); Write_Data(0x7F); // DSL Write_Command(0x29); Write_Data(0x00); // D1 DDRAM FAC Write_Command(0x2E); Write_Data(0x00); // D1 DDRAM FAR Write_Command(0x2F); Write_Data(0x00); // D1 DDRAM SAC Write_Command(0x31); Write_Data(0x00); // D1 DDRAM SAR Write_Command(0x32); Write_Data(0x00); // SCR1_FX1 Write_Command(0x33); Write_Data(0x00); // SCR1_FX2 Write_Command(0x34); Write_Data(0x7F);
// SCR1_FY1 Write_Command(0x35); Write_Data(0x00); // SCR1_FY2 Write_Command(0x36); Write_Data(0x7F); // IREF Write_Command(0x80); Write_Data(0x00); // Display ON // Write_Command(0x06); // Write_Data(0x01); }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Instruction Setting //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // "0x00" => 65,536 Colors Mode // "0x01" => 262,144 Colors Mode

define Color_Depth 0x01

// Set_Pixel_Format(0x66|((Color_Depth<<4)&0x70));

void Set_Pixel_Format(unsigned char d) { Write_Command(0x16); // Set Memory Access Control / Interface Pixel Format (MEMORY_WRITE_MODE) Write_Data(d); // Default => 0x06 // Enable 18-bit Bus Interface // 262,144 Colors // Horizontal address counter is increased. // Vertical address counter is increased. // The data is continuously written horizontally. }

void Set_Display_On_Off(unsigned char d) { Write_Command(0x06); // Set Display On/Off (DISP_ON_OFF) Write_Data(d); // Default => 0x00 // Scan signal is high level at pre-charge period. // Display Off }

inline void Set_Column_Address(unsigned char a, unsigned char b) { Write_Command(0x17); // Set Column Address of Start (MX1_ADDR) Write_Data(a); // Default => 0x00 Write_Command(0x18); // Set Column Address of End (MX2_ADDR) Write_Data(b); // Default => 0x9F }

inline void Set_Row_Address(unsigned char a, unsigned char b) { Write_Command(0x19); // Set Row Address of Start (MY1_ADDR) Write_Data(a); // Default => 0x00 Write_Command(0x1A); // Set Row Address of End (MY2_ADDR) Write_Data(b); // Default => 0x7F }

inline void Set_Display_Offset(unsigned char a, unsigned char b) { Write_Command(0x20); // Specify the Horizontal Start Position of a Window for Written in Memory (MEMORY_ACCESSPOINTER X) Write_Data(a); // Default => 0x00 Write_Command(0x21); // Specify the Vertical Start Position of a Window for Written in Memory (MEMORY_ACCESSPOINTER Y) Write_Data(b); // Default => 0x00 }

inline void Set_Write_RAM() { Write_Command(0x22); // Internal DDRAM Memory Access (DDRAM_DATA_ACCESS_PORT) }

void Fill_RAM(unsigned char a, unsigned char b) { unsigned char i,j;

Set_Display_Offset(0x00,0x00); Set_Column_Address(0x00,0x7F); Set_Row_Address(0x00,0x7F); Set_Write_RAM();

for(i=0;i<128;i++) { for(j=0;j<160;j++) { Write_Data(a); Write_Data(b); } } }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Regular Pattern (Partial or Full Screen) // // a: Column Address of Start // b: Column Address of End // c: Row Address of Start // d: Row Address of End // e: RRRRRGGG // f: GGGBBBBB //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Fill_Block(unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f) { unsigned char i,j;

Set_Display_Offset(a,c); Set_Column_Address(a,b); Set_Row_Address(c,d); Set_Write_RAM();

for(i=0;i<(d-c+1);i++) { for(j=0;j<(b-a+1);j++) { Write_Data(e); Write_Data(f); } } }

void Fill_Block64k(unsigned char xLeft, unsigned char yTop, unsigned char xRight, unsigned char yBottom, unsigned short int colFill) { unsigned char i,j,w,h,col1,col2;

col1 = colFill>>8; //Line Color - CCCCCBBB col2 = colFill&0xff; // Line Color - BBBAAAAA w = (yBottom-yTop+1); h = (xRight-xLeft+1); Set_Display_Offset(xLeft,yTop); Set_Column_Address(xLeft,xRight); Set_Row_Address(yTop,yBottom);

Set_Write_RAM();

for(i=0;i<w;i++) { for(j=0;j<h;j++) { Write_Data(col1); Write_Data(col2); } }
} //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // First Screen Active Range (Partial or Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void First_Screen_Range(unsigned char x1, unsigned char x2, unsigned char y1, unsigned char y2) { Write_Command(0x2E); // Set Column Address of Start Point (D1_DDRAM_FAC) Write_Data(x1); // Default => 0x00 Write_Command(0x2F); // Set Row Address of Start Point (D1_DDRAM_FAR) Write_Data(y1); // Default => 0x9F Write_Command(0x33); // Set Column Address of Start (SCR1_FX1) Write_Data(x1); // Default => 0x00 Write_Command(0x34); // Set Column Address of End (SCR1_FX2) Write_Data(x2); // Default => 0x9F Write_Command(0x35); // Set Row Address of Start (SCR1_FY1) Write_Data(y1); // Default => 0x00 Write_Command(0x36); // Set Row Address of End (SCR1_FY2) Write_Data(y2); // Default => 0x7F }

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Patterns //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Show_64k_Pattern_BigEndian(unsigned char Data_Pointer, unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) { unsigned char Src_Pointer; unsigned char i,j;

Src_Pointer=Data_Pointer;

Set_Display_Offset(x1,y1); Set_Column_Address(x1,x2); Set_Row_Address(y1,y2); Set_Write_RAM();

for(i=0;i<(y2-y1+1);i++) { for(j=0;j<(x2-x1+1);j++) { Write_Data(_Src_Pointer); Src_Pointer++; Write_Data(_Src_Pointer); Src_Pointer++; } } }

void Show_64k_Pattern_LittleEndia(unsigned char Data_Pointer, unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) { unsigned char Src_Pointer; unsigned char i,j;

Src_Pointer=Data_Pointer;

Set_Display_Offset(x1,y1); Set_Column_Address(x1,x2); Set_Row_Address(y1,y2); Set_Write_RAM();

for(i=0;i<(y2-y1+1);i++) { for(j=0;j<(x2-x1+1);j++) { WriteData((Src_Pointer+1)); WriteData((Src_Pointer)); Src_Pointer+=2; } } }

void Draw_Point64k_Slow(unsigned char x, unsigned char y, unsigned short int col) { Set_Display_Offset(x,y); Set_Column_Address(x,x); Set_Row_Address(y,y); Set_Write_RAM();

Write_Data(col>>8); // Line Color - CCCCCBBB Write_Data(col&0xff); // Line Color - BBBAAAAA }

define DrawPoint Draw_Point64k_Slow

/* Draw_line : algorithm by Jack Bresenham */ void Draw_Line64k(int X1, int Y1, int X2, int Y2, uint16_t col) {
int dy; int dx; int StepX, StepY; int Fraction;

dy = Y2 - Y1; dx = X2 - X1;

if (dy < 0) { dy = -dy; StepY = -1; } else StepY = 1;

if (dx < 0) { dx = -dx; StepX = -1; } else StepX = 1;

dy <<= 1; // dy is now 2_dy dx <<= 1; // dx is now 2_dx DrawPoint( X1, Y1, col);

if (dx > dy) { Fraction = dy - (dx >> 1); // same as 2_dy - dx while (X1 != X2) {
if (Fraction >= 0) { Y1 += StepY; Fraction -= dx; // same as fraction -= 2_dx }

  X1 += StepX;
  Fraction += dy;                   // same as fraction -= 2*dy
  DrawPoint( X1, Y1, col);
}

} else { Fraction = dx - (dy >> 1); while (Y1 != Y2) {
if (Fraction >= 0) { X1 += StepX; Fraction -= dy; } Y1 += StepY; Fraction += dx; DrawPoint( X1, Y1, col); } } }

// 八对称性 inline void _draw_circle_8(int xc, int yc, int x, int y, unsigned short int c) { // 参数 c 为颜色值 DrawPoint(xc + x, yc + y, c); DrawPoint(xc - x, yc + y, c); DrawPoint(xc + x, yc - y, c); DrawPoint(xc - x, yc - y, c); DrawPoint(xc + y, yc + x, c); DrawPoint(xc - y, yc + x, c); DrawPoint(xc + y, yc - x, c); DrawPoint(xc - y, yc - x, c); }

//Bresenham's circle algorithm void Draw_Circle64k(int xc, int yc, int r, int fill, unsigned short int c) { // (xc, yc) 为圆心,r 为半径 // fill 为是否填充 // c 为颜色值

// 如果圆在图片可见区域外,直接退出
if (xc + r < 0 || xc - r >= Max_Column ||
        yc + r < 0 || yc - r >= Max_Row) return;

int x = 0, y = r, yi, d;
d = 3 - 2 * r;

if (fill) {
    // 如果填充(画实心圆)
    while (x <= y) {
        for (yi = x; yi <= y; yi ++)
            _draw_circle_8(xc, yc, x, yi, c);

        if (d < 0) {
            d = d + 4 * x + 6;
        } else {
            d = d + 4 * (x - y) + 10;
            y --;
        }
        x++;
    }
} else {
    // 如果不填充(画空心圆)
    while (x <= y) {
        _draw_circle_8(xc, yc, x, y, c);

        if (d < 0) {
            d = d + 4 * x + 6;
        } else {
            d = d + 4 * (x - y) + 10;
            y --;
        }
        x ++;
    }
}

} //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Checkboard (Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Checkerboard() { unsigned char i,j;

Set_Display_Offset(0x00,0x00); Set_Column_Address(0x00,0x9F); Set_Row_Address(0x00,0x7F); Set_Write_RAM();

for(i=0;i<64;i++) { for(j=0;j<80;j++) { Write_Data(0xFF); Write_Data(0xFF); Write_Data(0x00); Write_Data(0x00); } for(j=0;j<80;j++) { Write_Data(0x00); Write_Data(0x00); Write_Data(0xFF); Write_Data(0xFF); } } }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Color Bar (Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Rainbow() { // White => Column 1~20 Fill_Block(0x00,0x10,0x00,Max_Row,0xFF,0xFF);

// Yellow => Column 21~40 Fill_Block(0x10,0x20,0x00,Max_Row,0xFF,0xE0);

// Purple => Column 41~60 Fill_Block(0x20,0x30,0x00,Max_Row,0xF8,0x1F);

// Cyan => Column 61~80 Fill_Block(0x30,0x40,0x00,Max_Row,0x07,0xFF);

// Red => Column 81~100 Fill_Block(0x40,0x50,0x00,Max_Row,0xF8,0x00);

// Green => Column 101~120 Fill_Block(0x50,0x60,0x00,Max_Row,0x07,0xE0);

// Blue => Column 121~140 Fill_Block(0x60,0x70,0x00,Max_Row,0x00,0x1F);

// Black => Column 141~160 Fill_Block(0x70,Max_Column,0x00,Max_Row,0x00,0x00); }

const unsigned char Icon24x24x64k[] ={ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x7b,0xf7,0xd6,0xee,0x73,0xe6,0x52,0xe6,0x51,0xe6,0x93,0xe6,0xd6,0xee,0x7b,0xf7, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xef,0x30,0xde, 0x0e,0xe6,0x6f,0xee,0x8f,0xee,0xd0,0xf6,0xf0,0xf6,0x90,0xee,0x6f,0xee,0x0e,0xe6, 0x10,0xe6,0xf8,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xff,0x52,0xe6,0x0e,0xe6,0xf1,0xf6, 0x50,0xff,0x2e,0xff,0x0c,0xff,0xec,0xfe,0xec,0xfe,0xec,0xfe,0x0d,0xff,0x10,0xff, 0xd0,0xf6,0x0d,0xe6,0x31,0xe6,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0xf7,0xef,0xdd,0x8f,0xee,0x2f,0xff,0xcb,0xfe, 0xa8,0xfe,0xc8,0xfe,0xa8,0xfe,0xa8,0xfe,0xa7,0xfe,0xa7,0xfe,0x87,0xfe,0x87,0xfe, 0x8a,0xfe,0xee,0xfe,0x4d,0xee,0xae,0xdd,0x9d,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xbd,0xff,0xef,0xdd,0x8e,0xf6,0x0c,0xff,0xa8,0xfe,0xa8,0xfe, 0xa9,0xfe,0xc8,0xfe,0xa9,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0x68,0xfe,0x67,0xfe, 0x66,0xfe,0x66,0xfe,0xaa,0xfe,0x2c,0xee,0xce,0xdd,0xbd,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0x93,0xe6,0x6c,0xee,0x0b,0xff,0xa8,0xfe,0xa9,0xfe,0xc9,0xfe, 0xa9,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0x88,0xfe,0x67,0xfe,0x67,0xfe, 0x67,0xfe,0x47,0xfe,0x06,0xfe,0x68,0xfe,0x0b,0xee,0x73,0xe6,0xff,0xff,0xff,0xff,

0xff,0xff,0x5a,0xf7,0x0b,0xe6,0xca,0xfe,0xa8,0xfe,0xa9,0xfe,0xc9,0xfe,0xc9,0xfe, 0xc8,0xfe,0xc8,0xfe,0xa8,0xfe,0xa8,0xfe,0x88,0xfe,0x67,0xfe,0x87,0xfe,0x87,0xfe, 0x26,0xfe,0x26,0xfe,0x26,0xfe,0x25,0xfe,0x28,0xfe,0xaa,0xe5,0x39,0xef,0xff,0xff,

0xff,0xff,0x52,0xe6,0x89,0xf6,0xe8,0xfe,0xc9,0xfe,0xa9,0xfe,0xa9,0xfe,0x88,0xfe, 0xc6,0xe5,0x27,0xee,0xa8,0xfe,0x67,0xfe,0x67,0xfe,0x67,0xfe,0xe6,0xed,0x65,0xe5, 0x26,0xfe,0x26,0xfe,0x26,0xfe,0xe6,0xfd,0xe5,0xfd,0xa6,0xf5,0x31,0xde,0xff,0xff,

0x9d,0xf7,0xeb,0xe5,0x87,0xfe,0xc7,0xfe,0xc8,0xfe,0xa8,0xfe,0xe8,0xfe,0x45,0xd5, 0xc0,0x8a,0xa2,0xab,0x47,0xf6,0x87,0xfe,0x87,0xfe,0x06,0xf6,0x82,0xa3,0xe1,0x92, 0x24,0xdd,0x26,0xfe,0xe6,0xfd,0xe5,0xf5,0xa4,0xfd,0x44,0xfd,0x49,0xdd,0x9d,0xf7,

0x19,0xef,0x86,0xe5,0x87,0xfe,0x67,0xfe,0x87,0xfe,0x87,0xfe,0xa7,0xfe,0xe3,0xb3, 0x80,0x8a,0xc0,0x92,0xa6,0xe5,0x67,0xfe,0x87,0xfe,0x45,0xe5,0xc0,0x92,0xa0,0x8a, 0x23,0xbc,0x06,0xfe,0xa5,0xf5,0x84,0xf5,0x44,0xf5,0x23,0xfd,0xe4,0xdc,0x39,0xef,

0xd7,0xee,0xc5,0xe5,0x87,0xfe,0x67,0xfe,0x67,0xfe,0x67,0xfe,0x87,0xfe,0x66,0xbc, 0x00,0x72,0xe2,0x8a,0xc8,0xed,0x06,0xfe,0x06,0xfe,0x87,0xed,0xc2,0x8a,0x40,0x72, 0x45,0xc4,0xa5,0xfd,0x64,0xf5,0x64,0xf5,0x24,0xf5,0x03,0xfd,0xc3,0xe4,0xd5,0xee,

0x95,0xe6,0xe5,0xed,0x87,0xfe,0x67,0xfe,0x67,0xfe,0x47,0xfe,0x26,0xfe,0x2b,0xf6, 0xec,0xbc,0x8c,0xd5,0x07,0xfe,0xe5,0xfd,0xc4,0xfd,0xc6,0xfd,0x2b,0xcd,0xab,0xbc, 0x89,0xf5,0x63,0xfd,0x44,0xf5,0x24,0xf5,0x24,0xf5,0x23,0xfd,0xc2,0xe4,0x73,0xe6,

0xb6,0xee,0xa5,0xed,0x67,0xfe,0x67,0xfe,0x27,0xfe,0x26,0xfe,0x26,0xfe,0x26,0xfe, 0x8b,0xfe,0x49,0xfe,0xe5,0xfd,0xc6,0xf5,0xa5,0xfd,0x84,0xf5,0xe7,0xfd,0x09,0xfe, 0x64,0xfd,0x43,0xf5,0x24,0xf5,0x04,0xf5,0x24,0xf5,0x23,0xf5,0xc2,0xe4,0x94,0xe6,

0xf8,0xee,0x85,0xe5,0x46,0xfe,0x27,0xfe,0x26,0xfe,0x25,0xfe,0xe5,0xf5,0xe6,0xf5, 0xe6,0xfd,0xe6,0xfd,0xe7,0xfd,0xc7,0xfd,0xa7,0xfd,0xa6,0xfd,0x65,0xf5,0x44,0xf5, 0x24,0xed,0x23,0xfd,0x24,0xfd,0x24,0xf5,0x04,0xf5,0x03,0xfd,0xa3,0xe4,0xf7,0xee,

0x5b,0xf7,0x87,0xe5,0x26,0xfe,0x26,0xfe,0x26,0xfe,0x45,0xdd,0xe6,0xd4,0xe6,0xfd, 0x07,0xfe,0x29,0xfe,0x2b,0xfe,0x2b,0xfe,0x0b,0xfe,0xe9,0xfd,0xc8,0xfd,0x86,0xfd, 0xe5,0xe4,0x44,0xcc,0x03,0xf5,0x24,0xf5,0x04,0xf5,0xe3,0xfc,0xc5,0xdc,0x5b,0xf7,

0xff,0xff,0xcd,0xdd,0xe5,0xf5,0x26,0xfe,0xe5,0xf5,0x07,0xcd,0x49,0xdd,0xe5,0xd4, 0x05,0xdd,0x87,0xed,0xea,0xf5,0x2c,0xfe,0x0c,0xfe,0xa9,0xf5,0x46,0xed,0x83,0xd4, 0x86,0xcc,0xa8,0xcc,0xa3,0xe4,0x03,0xfd,0x03,0xfd,0xc3,0xf4,0x6b,0xdd,0xde,0xff,

0xff,0xff,0x95,0xe6,0x86,0xe5,0x06,0xfe,0xe6,0xfd,0xa8,0xed,0xe7,0xfd,0xa9,0xe5, 0xe9,0xcc,0x67,0xbc,0x67,0xbc,0x67,0xbc,0x47,0xbc,0x27,0xb4,0x47,0xb4,0xc9,0xc4, 0x48,0xed,0x26,0xf5,0x04,0xf5,0x03,0xfd,0x03,0xfd,0xc4,0xe4,0x95,0xe6,0xff,0xff,

0xff,0xff,0xbe,0xff,0xac,0xdd,0xc6,0xf5,0xe6,0xfd,0xc6,0xfd,0x85,0xfd,0xc5,0xfd, 0xc7,0xfd,0xe9,0xf5,0xca,0xf5,0x8a,0xed,0x6a,0xed,0x8a,0xed,0xa9,0xf5,0x66,0xfd, 0x23,0xfd,0x04,0xf5,0x03,0xf5,0x03,0xfd,0x04,0xf5,0x6a,0xdd,0xbe,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0x19,0xef,0x47,0xdd,0xc6,0xfd,0xa5,0xfd,0x64,0xf5,0x65,0xf5, 0x64,0xf5,0x43,0xfd,0x23,0xfd,0x23,0xfd,0x23,0xfd,0x03,0xfd,0x02,0xfd,0x03,0xf5, 0x03,0xf5,0x03,0xf5,0x23,0xfd,0x25,0xfd,0xe6,0xdc,0x18,0xef,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xb5,0xe6,0x26,0xd5,0xc7,0xf5,0x85,0xfd,0x44,0xf5, 0x24,0xf5,0x44,0xf5,0x23,0xf5,0x24,0xf5,0x23,0xf5,0x23,0xf5,0x03,0xf5,0xe3,0xf4, 0xe3,0xf4,0x45,0xfd,0x66,0xf5,0xe5,0xdc,0x95,0xee,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb6,0xe6,0x49,0xdd,0x87,0xf5,0xa7,0xfd, 0x66,0xfd,0x24,0xf5,0x23,0xf5,0x23,0xf5,0x03,0xf5,0xe3,0xf4,0x04,0xf5,0x46,0xfd, 0x67,0xfd,0x46,0xed,0x07,0xd5,0xb6,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0xf7,0xce,0xdd,0x27,0xdd, 0x47,0xed,0x67,0xf5,0x87,0xfd,0x67,0xfd,0x67,0xfd,0x87,0xfd,0x67,0xfd,0x46,0xed, 0x06,0xdd,0xad,0xdd,0x3a,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x19,0xef, 0x10,0xe6,0x6b,0xdd,0x49,0xe5,0x48,0xe5,0x28,0xe5,0x48,0xdd,0x6a,0xdd,0x10,0xe6, 0x18,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7c,0xf7,0x5a,0xf7,0x5a,0xef,0x7c,0xf7,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7c,0xf7,0x5a,0xf7,0x5a,0xef,0x7c,0xf7,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, };

void draw_lines(void) { unsigned char x1,y1,x2,y2; unsigned short int i;

for (i=0; i<1000; i++) { x1=rand()%127; x2=rand()%127; y1=rand()%127; y2=rand()%127; Draw_Line64k(min(x1,x2),min(y1,y2),max(x1,x2),max(y1,y2), MAKECOLOR64k(rand(), rand(),rand())); } }

void draw_circles(void) { unsigned char x,y,r; unsigned short int i;

// draw unfilled circles for (i=0; i<200; i++) { x=rand()%128; y=rand()%128; r=rand()%60; Draw_Circle64k(x, y, r, 0, MAKECOLOR64k(rand(), rand(),rand())); } }

void setup() { long i; // set the digital pin as output: pinMode(RST_PIN, OUTPUT); pinMode(CS_PIN, OUTPUT); pinMode(DC_PIN, OUTPUT); pinMode(DIN_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); // pinMode(HVEN_PIN, OUTPUT);

// OLED_HVEN_1; //+12V on OLED_InitIOs(); OLED_Init(); Fill_RAM(0x00,0x00); Set_Display_On_Off(1); draw_circles(); delay(500); Fill_RAM(0x00,0x00); draw_lines(); delay(500); // do filling color Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0x00,0x00,0x00)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0xFF,0x00,0x00)); delay(500);
Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0x00,0xFF,0x00)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0x00,0x00,0xFF)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0xFF,0xFF,0x00)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0x00,0xFF,0xFF)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0xFF,0x00,0xFF)); delay(500); Fill_Block64k(0x00,0x00,Max_Column,Max_Row,MAKECOLOR64k(0xFF,0xFF,0xFF)); delay(500);
Rainbow(); delay(500); Checkerboard(); delay(500); Show_64k_Pattern_LittleEndia((unsigned char *)Icon24x24x64k,50,50,50+23,50+23);

}

// do put code in loop func void loop() { while(1) { } }

olikraus commented 8 years ago

sam_3738

Display hardware problem? The picture is generated with the provided example code:

/* Test code for driving UG2828GDEAF02 1,5# OLED ZhangFeng, PRC. zjjszhangf@gmail.com http://vfdclock.jimdo.com 01-18-2014 */

include

include

//#define FASTIO 1

// 4-wire SPI(BS1=0; BS2=0) //(/sclk=/ 13, /data=/ 11, /cd=/ 9 , /cs=/ 10, /reset=/ 8);

define RST_PIN 8

define CS_PIN 10

define DC_PIN 9

define DIN_PIN 11

define CLK_PIN 13

define HVEN_PIN 8

define DODELAY asm("nop\n\t""nop\n\t");

define COUNTOF(arr) (sizeof(arr) / sizeof(arr[0]))

ifndef FASTIO

// rst

define OLED_RES_1 digitalWrite(RST_PIN, HIGH)

define OLED_RES_0 digitalWrite(RST_PIN, LOW)

// cs

define OLED_CS_1 digitalWrite(CS_PIN, HIGH)

define OLED_CS_0 digitalWrite(CS_PIN, LOW)

// DC (Data or Command)

define OLED_DC_1 digitalWrite(DC_PIN, HIGH)

define OLED_DC_0 digitalWrite(DC_PIN, LOW)

// data in

define OLED_DIN_1 digitalWrite(DIN_PIN, HIGH)

define OLED_DIN_0 digitalWrite(DIN_PIN, LOW)

// clock

define OLED_CLK_1 digitalWrite(CLK_PIN, HIGH)

define OLED_CLK_0 digitalWrite(CLK_PIN, LOW)

// HVEN(optional)

define OLED_HVEN_1 digitalWrite(HVEN_PIN, HIGH)

define OLED_HVEN_0 digitalWrite(HVEN_PIN, LOW)

else

// Fast IO version // pin map please check: http://arduino.cc/en/Hacking/Atmega168Hardware // pin11 = pb3; pin12 = pb4; pin15 = pb5

define GPIO_Pin0 (0x01) /* Pin 0 selected /

define GPIO_Pin1 (0x02) / Pin 1 selected _/

define GPIO_Pin2 (0x04) / Pin 2 selected _/

define GPIO_Pin3 (0x08) / Pin 3 selected _/

define GPIO_Pin4 (0x10) / Pin 4 selected _/

define GPIO_Pin5 (0x20) / Pin 5 selected _/

define GPIO_Pin6 (0x40) / Pin 6 selected _/

define GPIO_Pin7 (0x80) / Pin 7 selected */

define RES_PORT PORTB

define CS_PORT PORTB

define DC_PORT PORTB

define DIN_PORT PORTB

define CLK_PORT PORTB

define HVEN_PORT PORTB

define RES_PORTPIN GPIO_Pin_0

define CS_PORTPIN GPIO_Pin_1

define DC_PORTPIN GPIO_Pin_2

define DIN_PORTPIN GPIO_Pin_3

define CLK_PORTPIN GPIO_Pin_4

define HVEN_PORTPIN GPIO_Pin_5

define OLED_RES_1 RES_PORT |= (RES_PORTPIN)

define OLED_RES_0 RES_PORT &= ~(RES_PORTPIN)

define OLED_CS_1 CS_PORT |= (CS_PORTPIN)

define OLED_CS_0 CS_PORT &= ~(CS_PORTPIN)

define OLED_DC_1 DC_PORT |= (DC_PORTPIN)

define OLED_DC_0 DC_PORT &= ~(DC_PORTPIN)

define OLED_DIN_1 DIN_PORT |= (DIN_PORTPIN)

define OLED_DIN_0 DIN_PORT &= ~(DIN_PORTPIN)

define OLED_CLK_1 CLK_PORT |= (CLK_PORTPIN)

define OLED_CLK_0 CLK_PORT &= ~(CLK_PORTPIN)

define OLED_HVEN_1 HVEN_PORT |= (HVEN_PORTPIN)

define OLED_HVEN_0 HVEN_PORT &= ~(HVEN_PORTPIN)

endif

define Max_Column 0x7f // 128-1

define Max_Row 0x7f // 128-1

define Brightness 0x0F

define MAKECOLOR64k(r,g,b) (unsigned short int)((((unsigned short int)(r)>>3)<<11)|(((unsigned short int)(g)>>2)<<5)|((unsigned short int)(b)>>3))

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Delay Time //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

define uDelay

void uDelay1(unsigned char l) { while(l--) { //asm("nop\n\t""nop\n\t""nop\n\t""nop\n\t"); //asm("nop\n\t""nop\n\t""nop\n\t""nop\n\t"); }; }

inline void Write_Command(unsigned char Data) { unsigned char i; OLED_CS_0; OLED_DC_0; for (i=0; i<8; i++) { OLED_CLK_0; if((Data&0x80)>>7) OLED_DIN_1; else OLED_DIN_0; Data = Data << 1; uDelay(1); OLED_CLK_1; uDelay(1); } OLED_CLK_0; OLED_DC_1; OLED_CS_1; }

inline void Write_Data(unsigned char Data) { unsigned char i;

OLED_CS_0; OLED_DC_1; for (i=0; i<8; i++) { OLED_CLK_0; if((Data&0x80)>>7) OLED_DIN_1; else OLED_DIN_0; Data = Data << 1; uDelay(1); OLED_CLK_1; uDelay(1); } OLED_CLK_0; OLED_DC_1; OLED_CS_1; }

void OLED_InitIOs(void) { OLED_RES_1; OLED_CS_1; OLED_CLK_1; OLED_DIN_1; OLED_DC_1; }

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Initialization //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void OLED_Init(void) { unsigned char i;

OLED_RES_0; for(i=0;i<200;i++) { delay(1); // delay } OLED_RES_1;

// Disp OFF Write_Command(0x06); Write_Data(0x00);

// OSC_CTL Write_Command(0x02); Write_Data(0x01); // CLOCK_DIV Write_Command(0x03); Write_Data(0x30); // REDUCE_CURRENT Write_Command(0x04); Write_Data(0x00); // SOFT RET Write_Command(0x05); Write_Data(0x00); // PRECHARGE_TIME_R Write_Command(0x08); Write_Data(0x03); // PRECHARGE_TIME_G Write_Command(0x09); Write_Data(0x04); // PRECHARGE_TIME_B Write_Command(0x0A); Write_Data(0x05); // PRECHARGE_CURRENT_R Write_Command(0x0B); Write_Data(0x0B); // PRECHARGE_CURRENT_G
Write_Command(0x0C); Write_Data(0x0B); // PRECHARGE_CURRENT_B Write_Command(0x0D); Write_Data(0x0E); // DRIVING_CURRENT_R Write_Command(0x10); Write_Data(0x3E); // DRIVING_CURRENT_G Write_Command(0x11); Write_Data(0x32); // DRIVING_CURRENT_B Write_Command(0x12); Write_Data(0x3D); // DISPLAY MODE SET Write_Command(0x13); Write_Data(0x00); // RGB_IF Write_Command(0x14); Write_Data(0x01);
// RGB_POL Write_Command(0x15); Write_Data(0x00);

// MEMORY WRITE MODE // 6bit3 262k color / Write_Command(0x16); WriteData(0x76); / // 8bit_2 64k color Write_Command(0x16); Write_Data(0x66); // MX1_ADDR Write_Command(0x17); Write_Data(0x00); // MX2_ADDR Write_Command(0x18); Write_Data(0x7F); // MY1_ADDR Write_Command(0x19); Write_Data(0x00); // MY2_ADDR Write_Command(0x1A); Write_Data(0x7F); // MEMORY ACCESS POINTER X Write_Command(0x20); Write_Data(0x00); // MEMORY ACCESS POINTER Y Write_Command(0x21); Write_Data(0x00); // DUTY Write_Command(0x28); Write_Data(0x7F); // DSL Write_Command(0x29); Write_Data(0x00); // D1 DDRAM FAC Write_Command(0x2E); Write_Data(0x00); // D1 DDRAM FAR Write_Command(0x2F); Write_Data(0x00); // D1 DDRAM SAC Write_Command(0x31); Write_Data(0x00); // D1 DDRAM SAR Write_Command(0x32); Write_Data(0x00); // SCR1_FX1 Write_Command(0x33); Write_Data(0x00); // SCR1_FX2 Write_Command(0x34); Write_Data(0x7F);
// SCR1_FY1 Write_Command(0x35); Write_Data(0x00); // SCR1_FY2 Write_Command(0x36); Write_Data(0x7F); // IREF Write_Command(0x80); Write_Data(0x00); // Display ON // Write_Command(0x06); // Write_Data(0x01); }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Instruction Setting //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // "0x00" => 65,536 Colors Mode // "0x01" => 262,144 Colors Mode

define Color_Depth 0x01

// Set_Pixel_Format(0x66|((Color_Depth<<4)&0x70));

void Set_Pixel_Format(unsigned char d) { Write_Command(0x16); // Set Memory Access Control / Interface Pixel Format (MEMORY_WRITE_MODE) Write_Data(d); // Default => 0x06 // Enable 18-bit Bus Interface // 262,144 Colors // Horizontal address counter is increased. // Vertical address counter is increased. // The data is continuously written horizontally. }

void Set_Display_On_Off(unsigned char d) { Write_Command(0x06); // Set Display On/Off (DISP_ON_OFF) Write_Data(d); // Default => 0x00 // Scan signal is high level at pre-charge period. // Display Off }

inline void Set_Column_Address(unsigned char a, unsigned char b) { Write_Command(0x17); // Set Column Address of Start (MX1_ADDR) Write_Data(a); // Default => 0x00 Write_Command(0x18); // Set Column Address of End (MX2_ADDR) Write_Data(b); // Default => 0x9F }

inline void Set_Row_Address(unsigned char a, unsigned char b) { Write_Command(0x19); // Set Row Address of Start (MY1_ADDR) Write_Data(a); // Default => 0x00 Write_Command(0x1A); // Set Row Address of End (MY2_ADDR) Write_Data(b); // Default => 0x7F }

inline void Set_Display_Offset(unsigned char a, unsigned char b) { Write_Command(0x20); // Specify the Horizontal Start Position of a Window for Written in Memory (MEMORY_ACCESSPOINTER X) Write_Data(a); // Default => 0x00 Write_Command(0x21); // Specify the Vertical Start Position of a Window for Written in Memory (MEMORY_ACCESSPOINTER Y) Write_Data(b); // Default => 0x00 }

inline void Set_Write_RAM() { Write_Command(0x22); // Internal DDRAM Memory Access (DDRAM_DATA_ACCESS_PORT) }

void Fill_RAM(unsigned char a, unsigned char b) { unsigned char i,j;

Set_Display_Offset(0x00,0x00); Set_Column_Address(0x00,0x7F); Set_Row_Address(0x00,0x7F); Set_Write_RAM();

for(i=0;i<128;i++) { for(j=0;j<160;j++) { Write_Data(a); Write_Data(b); } } }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Regular Pattern (Partial or Full Screen) // // a: Column Address of Start // b: Column Address of End // c: Row Address of Start // d: Row Address of End // e: RRRRRGGG // f: GGGBBBBB //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Fill_Block(unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f) { unsigned char i,j;

Set_Display_Offset(a,c); Set_Column_Address(a,b); Set_Row_Address(c,d); Set_Write_RAM();

for(i=0;i<(d-c+1);i++) { for(j=0;j<(b-a+1);j++) { Write_Data(e); Write_Data(f); } } }

void Fill_Block64k(unsigned char xLeft, unsigned char yTop, unsigned char xRight, unsigned char yBottom, unsigned short int colFill) { unsigned char i,j,w,h,col1,col2;

col1 = colFill>>8; //Line Color - CCCCCBBB col2 = colFill&0xff; // Line Color - BBBAAAAA w = (yBottom-yTop+1); h = (xRight-xLeft+1); Set_Display_Offset(xLeft,yTop); Set_Column_Address(xLeft,xRight); Set_Row_Address(yTop,yBottom);

Set_Write_RAM();

for(i=0;i<w;i++) { for(j=0;j<h;j++) { Write_Data(col1); Write_Data(col2); } }
} //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // First Screen Active Range (Partial or Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void First_Screen_Range(unsigned char x1, unsigned char x2, unsigned char y1, unsigned char y2) { Write_Command(0x2E); // Set Column Address of Start Point (D1_DDRAM_FAC) Write_Data(x1); // Default => 0x00 Write_Command(0x2F); // Set Row Address of Start Point (D1_DDRAM_FAR) Write_Data(y1); // Default => 0x9F Write_Command(0x33); // Set Column Address of Start (SCR1_FX1) Write_Data(x1); // Default => 0x00 Write_Command(0x34); // Set Column Address of End (SCR1_FX2) Write_Data(x2); // Default => 0x9F Write_Command(0x35); // Set Row Address of Start (SCR1_FY1) Write_Data(y1); // Default => 0x00 Write_Command(0x36); // Set Row Address of End (SCR1_FY2) Write_Data(y2); // Default => 0x7F }

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Patterns //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Show_64k_Pattern_BigEndian(unsigned char Data_Pointer, unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) { unsigned char Src_Pointer; unsigned char i,j;

Src_Pointer=Data_Pointer;

Set_Display_Offset(x1,y1); Set_Column_Address(x1,x2); Set_Row_Address(y1,y2); Set_Write_RAM();

for(i=0;i<(y2-y1+1);i++) { for(j=0;j<(x2-x1+1);j++) { Write_Data(_Src_Pointer); Src_Pointer++; Write_Data(_Src_Pointer); Src_Pointer++; } } }

void Show_64k_Pattern_LittleEndia(unsigned char Data_Pointer, unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) { unsigned char Src_Pointer; unsigned char i,j;

Src_Pointer=Data_Pointer;

Set_Display_Offset(x1,y1); Set_Column_Address(x1,x2); Set_Row_Address(y1,y2); Set_Write_RAM();

for(i=0;i<(y2-y1+1);i++) { for(j=0;j<(x2-x1+1);j++) { WriteData((Src_Pointer+1)); WriteData((Src_Pointer)); Src_Pointer+=2; } } }

void Draw_Point64k_Slow(unsigned char x, unsigned char y, unsigned short int col) { Set_Display_Offset(x,y); Set_Column_Address(x,x); Set_Row_Address(y,y); Set_Write_RAM();

Write_Data(col>>8); // Line Color - CCCCCBBB Write_Data(col&0xff); // Line Color - BBBAAAAA }

define DrawPoint Draw_Point64k_Slow

/* Draw_line : algorithm by Jack Bresenham */ void Draw_Line64k(int X1, int Y1, int X2, int Y2, uint16_t col) { int dy; int dx; int StepX, StepY; int Fraction;

dy = Y2 - Y1; dx = X2 - X1;

if (dy < 0) { dy = -dy; StepY = -1; } else StepY = 1;

if (dx < 0) { dx = -dx; StepX = -1; } else StepX = 1;

dy <<= 1; // dy is now 2_dy dx <<= 1; // dx is now 2_dx DrawPoint( X1, Y1, col);

if (dx > dy) { Fraction = dy - (dx >> 1); // same as 2_dy - dx while (X1 != X2) { if (Fraction >= 0) { Y1 += StepY; Fraction -= dx; // same as fraction -= 2_dx }

  X1 += StepX;
  Fraction += dy;           // same as fraction -= 2*dy
  DrawPoint( X1, Y1, col);
}

} else { Fraction = dx - (dy >> 1); while (Y1 != Y2) { if (Fraction >= 0) { X1 += StepX; Fraction -= dy; } Y1 += StepY; Fraction += dx; DrawPoint( X1, Y1, col); } } }

// 八对称性 inline void _draw_circle_8(int xc, int yc, int x, int y, unsigned short int c) { // 参数 c 为颜色值 DrawPoint(xc + x, yc + y, c); DrawPoint(xc - x, yc + y, c); DrawPoint(xc + x, yc - y, c); DrawPoint(xc - x, yc - y, c); DrawPoint(xc + y, yc + x, c); DrawPoint(xc - y, yc + x, c); DrawPoint(xc + y, yc - x, c); DrawPoint(xc - y, yc - x, c); }

//Bresenham's circle algorithm void Draw_Circle64k(int xc, int yc, int r, int fill, unsigned short int c) { // (xc, yc) 为圆心,r 为半径 // fill 为是否填充 // c 为颜色值

// 如果圆在图片可见区域外,直接退出
if (xc + r < 0 || xc - r >= Max_Column ||
        yc + r < 0 || yc - r >= Max_Row) return;

int x = 0, y = r, yi, d;
d = 3 - 2 * r;

if (fill) {
    // 如果填充(画实心圆)
    while (x <= y) {
        for (yi = x; yi <= y; yi ++)
            _draw_circle_8(xc, yc, x, yi, c);

        if (d < 0) {
            d = d + 4 * x + 6;
        } else {
            d = d + 4 * (x - y) + 10;
            y --;
        }
        x++;
    }
} else {
    // 如果不填充(画空心圆)
    while (x <= y) {
        _draw_circle_8(xc, yc, x, y, c);

        if (d < 0) {
            d = d + 4 * x + 6;
        } else {
            d = d + 4 * (x - y) + 10;
            y --;
        }
        x ++;
    }
}

} //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Checkboard (Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Checkerboard() { unsigned char i,j;

Set_Display_Offset(0x00,0x00); Set_Column_Address(0x00,0x9F); Set_Row_Address(0x00,0x7F); Set_Write_RAM();

for(i=0;i<64;i++) { for(j=0;j<80;j++) { Write_Data(0xFF); Write_Data(0xFF); Write_Data(0x00); Write_Data(0x00); } for(j=0;j<80;j++) { Write_Data(0x00); Write_Data(0x00); Write_Data(0xFF); Write_Data(0xFF); } } }

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Show Color Bar (Full Screen) //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void Rainbow() { // White => Column 1~20 Fill_Block(0x00,0x10,0x00,Max_Row,0xFF,0xFF);

// Yellow => Column 21~40 Fill_Block(0x10,0x20,0x00,Max_Row,0xFF,0xE0);

// Purple => Column 41~60 Fill_Block(0x20,0x30,0x00,Max_Row,0xF8,0x1F);

// Cyan => Column 61~80 Fill_Block(0x30,0x40,0x00,Max_Row,0x07,0xFF);

// Red => Column 81~100 Fill_Block(0x40,0x50,0x00,Max_Row,0xF8,0x00);

// Green => Column 101~120 Fill_Block(0x50,0x60,0x00,Max_Row,0x07,0xE0);

// Blue => Column 121~140 Fill_Block(0x60,0x70,0x00,Max_Row,0x00,0x1F);

// Black => Column 141~160 Fill_Block(0x70,Max_Column,0x00,Max_Row,0x00,0x00); }

const unsigned char Icon24x24x64k[] ={ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x7b,0xf7,0xd6,0xee,0x73,0xe6,0x52,0xe6,0x51,0xe6,0x93,0xe6,0xd6,0xee,0x7b,0xf7, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xef,0x30,0xde, 0x0e,0xe6,0x6f,0xee,0x8f,0xee,0xd0,0xf6,0xf0,0xf6,0x90,0xee,0x6f,0xee,0x0e,0xe6, 0x10,0xe6,0xf8,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xff,0x52,0xe6,0x0e,0xe6,0xf1,0xf6, 0x50,0xff,0x2e,0xff,0x0c,0xff,0xec,0xfe,0xec,0xfe,0xec,0xfe,0x0d,0xff,0x10,0xff, 0xd0,0xf6,0x0d,0xe6,0x31,0xe6,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0xf7,0xef,0xdd,0x8f,0xee,0x2f,0xff,0xcb,0xfe, 0xa8,0xfe,0xc8,0xfe,0xa8,0xfe,0xa8,0xfe,0xa7,0xfe,0xa7,0xfe,0x87,0xfe,0x87,0xfe, 0x8a,0xfe,0xee,0xfe,0x4d,0xee,0xae,0xdd,0x9d,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xbd,0xff,0xef,0xdd,0x8e,0xf6,0x0c,0xff,0xa8,0xfe,0xa8,0xfe, 0xa9,0xfe,0xc8,0xfe,0xa9,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0x68,0xfe,0x67,0xfe, 0x66,0xfe,0x66,0xfe,0xaa,0xfe,0x2c,0xee,0xce,0xdd,0xbd,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0x93,0xe6,0x6c,0xee,0x0b,0xff,0xa8,0xfe,0xa9,0xfe,0xc9,0xfe, 0xa9,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0xa8,0xfe,0x88,0xfe,0x67,0xfe,0x67,0xfe, 0x67,0xfe,0x47,0xfe,0x06,0xfe,0x68,0xfe,0x0b,0xee,0x73,0xe6,0xff,0xff,0xff,0xff,

0xff,0xff,0x5a,0xf7,0x0b,0xe6,0xca,0xfe,0xa8,0xfe,0xa9,0xfe,0xc9,0xfe,0xc9,0xfe, 0xc8,0xfe,0xc8,0xfe,0xa8,0xfe,0xa8,0xfe,0x88,0xfe,0x67,0xfe,0x87,0xfe,0x87,0xfe, 0x26,0xfe,0x26,0xfe,0x26,0xfe,0x25,0xfe,0x28,0xfe,0xaa,0xe5,0x39,0xef,0xff,0xff,

0xff,0xff,0x52,0xe6,0x89,0xf6,0xe8,0xfe,0xc9,0xfe,0xa9,0xfe,0xa9,0xfe,0x88,0xfe, 0xc6,0xe5,0x27,0xee,0xa8,0xfe,0x67,0xfe,0x67,0xfe,0x67,0xfe,0xe6,0xed,0x65,0xe5, 0x26,0xfe,0x26,0xfe,0x26,0xfe,0xe6,0xfd,0xe5,0xfd,0xa6,0xf5,0x31,0xde,0xff,0xff,

0x9d,0xf7,0xeb,0xe5,0x87,0xfe,0xc7,0xfe,0xc8,0xfe,0xa8,0xfe,0xe8,0xfe,0x45,0xd5, 0xc0,0x8a,0xa2,0xab,0x47,0xf6,0x87,0xfe,0x87,0xfe,0x06,0xf6,0x82,0xa3,0xe1,0x92, 0x24,0xdd,0x26,0xfe,0xe6,0xfd,0xe5,0xf5,0xa4,0xfd,0x44,0xfd,0x49,0xdd,0x9d,0xf7,

0x19,0xef,0x86,0xe5,0x87,0xfe,0x67,0xfe,0x87,0xfe,0x87,0xfe,0xa7,0xfe,0xe3,0xb3, 0x80,0x8a,0xc0,0x92,0xa6,0xe5,0x67,0xfe,0x87,0xfe,0x45,0xe5,0xc0,0x92,0xa0,0x8a, 0x23,0xbc,0x06,0xfe,0xa5,0xf5,0x84,0xf5,0x44,0xf5,0x23,0xfd,0xe4,0xdc,0x39,0xef,

0xd7,0xee,0xc5,0xe5,0x87,0xfe,0x67,0xfe,0x67,0xfe,0x67,0xfe,0x87,0xfe,0x66,0xbc, 0x00,0x72,0xe2,0x8a,0xc8,0xed,0x06,0xfe,0x06,0xfe,0x87,0xed,0xc2,0x8a,0x40,0x72, 0x45,0xc4,0xa5,0xfd,0x64,0xf5,0x64,0xf5,0x24,0xf5,0x03,0xfd,0xc3,0xe4,0xd5,0xee,

0x95,0xe6,0xe5,0xed,0x87,0xfe,0x67,0xfe,0x67,0xfe,0x47,0xfe,0x26,0xfe,0x2b,0xf6, 0xec,0xbc,0x8c,0xd5,0x07,0xfe,0xe5,0xfd,0xc4,0xfd,0xc6,0xfd,0x2b,0xcd,0xab,0xbc, 0x89,0xf5,0x63,0xfd,0x44,0xf5,0x24,0xf5,0x24,0xf5,0x23,0xfd,0xc2,0xe4,0x73,0xe6,

0xb6,0xee,0xa5,0xed,0x67,0xfe,0x67,0xfe,0x27,0xfe,0x26,0xfe,0x26,0xfe,0x26,0xfe, 0x8b,0xfe,0x49,0xfe,0xe5,0xfd,0xc6,0xf5,0xa5,0xfd,0x84,0xf5,0xe7,0xfd,0x09,0xfe, 0x64,0xfd,0x43,0xf5,0x24,0xf5,0x04,0xf5,0x24,0xf5,0x23,0xf5,0xc2,0xe4,0x94,0xe6,

0xf8,0xee,0x85,0xe5,0x46,0xfe,0x27,0xfe,0x26,0xfe,0x25,0xfe,0xe5,0xf5,0xe6,0xf5, 0xe6,0xfd,0xe6,0xfd,0xe7,0xfd,0xc7,0xfd,0xa7,0xfd,0xa6,0xfd,0x65,0xf5,0x44,0xf5, 0x24,0xed,0x23,0xfd,0x24,0xfd,0x24,0xf5,0x04,0xf5,0x03,0xfd,0xa3,0xe4,0xf7,0xee,

0x5b,0xf7,0x87,0xe5,0x26,0xfe,0x26,0xfe,0x26,0xfe,0x45,0xdd,0xe6,0xd4,0xe6,0xfd, 0x07,0xfe,0x29,0xfe,0x2b,0xfe,0x2b,0xfe,0x0b,0xfe,0xe9,0xfd,0xc8,0xfd,0x86,0xfd, 0xe5,0xe4,0x44,0xcc,0x03,0xf5,0x24,0xf5,0x04,0xf5,0xe3,0xfc,0xc5,0xdc,0x5b,0xf7,

0xff,0xff,0xcd,0xdd,0xe5,0xf5,0x26,0xfe,0xe5,0xf5,0x07,0xcd,0x49,0xdd,0xe5,0xd4, 0x05,0xdd,0x87,0xed,0xea,0xf5,0x2c,0xfe,0x0c,0xfe,0xa9,0xf5,0x46,0xed,0x83,0xd4, 0x86,0xcc,0xa8,0xcc,0xa3,0xe4,0x03,0xfd,0x03,0xfd,0xc3,0xf4,0x6b,0xdd,0xde,0xff,

0xff,0xff,0x95,0xe6,0x86,0xe5,0x06,0xfe,0xe6,0xfd,0xa8,0xed,0xe7,0xfd,0xa9,0xe5, 0xe9,0xcc,0x67,0xbc,0x67,0xbc,0x67,0xbc,0x47,0xbc,0x27,0xb4,0x47,0xb4,0xc9,0xc4, 0x48,0xed,0x26,0xf5,0x04,0xf5,0x03,0xfd,0x03,0xfd,0xc4,0xe4,0x95,0xe6,0xff,0xff,

0xff,0xff,0xbe,0xff,0xac,0xdd,0xc6,0xf5,0xe6,0xfd,0xc6,0xfd,0x85,0xfd,0xc5,0xfd, 0xc7,0xfd,0xe9,0xf5,0xca,0xf5,0x8a,0xed,0x6a,0xed,0x8a,0xed,0xa9,0xf5,0x66,0xfd, 0x23,0xfd,0x04,0xf5,0x03,0xf5,0x03,0xfd,0x04,0xf5,0x6a,0xdd,0xbe,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0x19,0xef,0x47,0xdd,0xc6,0xfd,0xa5,0xfd,0x64,0xf5,0x65,0xf5, 0x64,0xf5,0x43,0xfd,0x23,0xfd,0x23,0xfd,0x23,0xfd,0x03,0xfd,0x02,0xfd,0x03,0xf5, 0x03,0xf5,0x03,0xf5,0x23,0xfd,0x25,0xfd,0xe6,0xdc,0x18,0xef,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xb5,0xe6,0x26,0xd5,0xc7,0xf5,0x85,0xfd,0x44,0xf5, 0x24,0xf5,0x44,0xf5,0x23,0xf5,0x24,0xf5,0x23,0xf5,0x23,0xf5,0x03,0xf5,0xe3,0xf4, 0xe3,0xf4,0x45,0xfd,0x66,0xf5,0xe5,0xdc,0x95,0xee,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb6,0xe6,0x49,0xdd,0x87,0xf5,0xa7,0xfd, 0x66,0xfd,0x24,0xf5,0x23,0xf5,0x23,0xf5,0x03,0xf5,0xe3,0xf4,0x04,0xf5,0x46,0xfd, 0x67,0xfd,0x46,0xed,0x07,0xd5,0xb6,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0xf7,0xce,0xdd,0x27,0xdd, 0x47,0xed,0x67,0xf5,0x87,0xfd,0x67,0xfd,0x67,0xfd,0x87,0xfd,0x67,0xfd,0x46,0xed, 0x06,0xdd,0xad,0xdd,0x3a,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x19,0xef, 0x10,0xe6,0x6b,0xdd,0x49,0xe5,0x48,0xe5,0x28,0xe5,0x48,0xdd,0x6a,0xdd,0x10,0xe6, 0x18,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7c,0xf7,0x5a,0xf7,0x5a,0xef,0x7c,0xf7,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x7c,0xf7,0x5a,0xf7,0x5a,0xef,0x7c,0xf7,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, };

void draw_lines(void) { unsigned char x1,y1,x2,y2; unsigned short int i;

for (i=0; i<1000; i++) { x1=rand()%127; x2=rand()%127; y1=rand()%127; y2=rand()%127; Draw_Line64k(min(x1,x2),min(y1,y2),max(x1,x2),max(y1,y2), MAKECOLOR64k(rand(), rand(),rand())); } }

void draw_circles(void) { unsigned char x,y,r; unsigned short int i;

// draw unfilled circles for (i=0; i<200; i++) { x=rand()%128; y=rand()%128; r=rand()%60; Draw_Circle64k(x, y, r, 0, MAKECOLOR64k(rand(), rand(),rand())); } }

void setup() { long i; // set the digital pin as output: pinMode(RST_PIN, OUTPUT); pinMode(CS_PIN, OUTPUT); pinMode(DC_PIN, OUTPUT); pinMode(DIN_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); // pinMode(HVEN_PIN, OUTPUT);

// OLED_HVEN_1; //+12V on OLED_InitIOs(); OLED_Init(); Set_Display_On_Off(1);

Fill_RAM(0x00,0x00);

FillBlock(0, 127, 0, 1, 0, 15); /* write a horizontal blue line at the top / FillBlock(0, 63, 127, 127, 255, 255); / write half white line at bottom / / error: the top blue line gets modified (hardware error???) */

}

// do put code in loop func void loop() { while(1) { } }