Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support 1.5" oled (SEPS225) controller #47

Closed
6 tasks done
olikraus opened this issue May 25, 2015 · 2 comments
Closed
6 tasks done

support 1.5" oled (SEPS225) controller #47

olikraus opened this issue May 25, 2015 · 2 comments
Milestone

Comments

@olikraus
Copy link
Owner

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

  • Rename _18 to _16, because only 65K colors supported
  • Fix color settings
  • Change direction mode and simplify pixel setting
  • Somehow the color seems wrong at the edges (GraphicsTest), this should be checked
  • Power down
  • Documentation

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 olikraus added this to the 1.03 milestone May 25, 2015
@olikraus
Copy link
Owner Author

/* Test code for driving UG2828GDEAF02 1,5# OLED
ZhangFeng, PRC.
zjjszhangf@gmail.com
http://vfdclock.jimdo.com
01-18-2014
*/
#include <stdio.h>
#include <math.h>
#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_Pin_0 (0x01) /* Pin 0 selected /
#define GPIO_Pin_1 (0x02) /
Pin 1 selected /
#define GPIO_Pin_2 (0x04) /
Pin 2 selected /
#define GPIO_Pin_3 (0x08) /
Pin 3 selected /
#define GPIO_Pin_4 (0x10) /
Pin 4 selected /
#define GPIO_Pin_5 (0x20) /
Pin 5 selected /
#define GPIO_Pin_6 (0x40) /
Pin 6 selected /
#define GPIO_Pin_7 (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
// 6bit_3 262k color
/_
Write_Command(0x16);
Write_Data(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++)
{
Write_Data((Src_Pointer+1));
Write_Data(
(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
Copy link
Owner Author

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 <stdio.h>
#include <math.h>
//#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_Pin_0 (0x01) /* Pin 0 selected /
#define GPIO_Pin_1 (0x02) /
Pin 1 selected /
#define GPIO_Pin_2 (0x04) /
Pin 2 selected /
#define GPIO_Pin_3 (0x08) /
Pin 3 selected /
#define GPIO_Pin_4 (0x10) /
Pin 4 selected /
#define GPIO_Pin_5 (0x20) /
Pin 5 selected /
#define GPIO_Pin_6 (0x40) /
Pin 6 selected /
#define GPIO_Pin_7 (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
// 6bit_3 262k color
/_
Write_Command(0x16);
Write_Data(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++)
{
Write_Data((Src_Pointer+1));
Write_Data(
(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);

Fill_Block(0, 127, 0, 1, 0, 15); /* write a horizontal blue line at the top /
Fill_Block(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)
{
}
}

@olikraus olikraus reopened this Jul 26, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant