Git Product home page Git Product logo

Comments (2)

olikraus avatar olikraus commented on June 27, 2024

/* Test code for driving UG2828GDEAF02 1,5# OLED
ZhangFeng, PRC.
[email protected]
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)
{
}
}

from ucglib.

olikraus avatar olikraus commented on June 27, 2024

sam_3738

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

/* Test code for driving UG2828GDEAF02 1,5# OLED
ZhangFeng, PRC.
[email protected]
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)
{
}
}

from ucglib.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.