Replace U8GLI v1.11 with v1.17
In Travis we already test against 1.17.
This commit is contained in:
parent
9d2a980bcf
commit
6f4873329e
121 changed files with 19375 additions and 5937 deletions
|
@ -107,6 +107,54 @@ u8glib ChangeLog
|
||||||
* Sleep Mode
|
* Sleep Mode
|
||||||
* 4x mode for ST7920
|
* 4x mode for ST7920
|
||||||
* New C++ interface for ST7920
|
* New C++ interface for ST7920
|
||||||
|
2013-03-24 v1.12 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Added touch panel examples
|
||||||
|
2013-06-30 v1.13 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Fixed missing "Arduino.h" in u8g_delay.c
|
||||||
|
* Disable interrupt for port/pin access (AVR), issue 19
|
||||||
|
* Support for HT1632: U8GLIB_HT1632_24X16 u8g(wr, data, cs), issue 165
|
||||||
|
* Support for SSD1351 OLED, issue 168
|
||||||
|
* Cleaned up several compiler warnings
|
||||||
|
* Fixed conflict with scheduler (Arduino Due), issue 155
|
||||||
|
* HW SPI for Arduino Due, issue 180
|
||||||
|
* Performance improvement for ST7920, issue 177
|
||||||
|
* Added ":" to the "n"umeric variant of the fonts, issue 166
|
||||||
|
* Added additional argument u8g_InitCom(). Use U8G_SPI_CLK_CYCLE_NONE by default.
|
||||||
|
* Added double buffer option for many ST7565 devices
|
||||||
|
* Tested with Arduino 1.0.5
|
||||||
|
2013-10-03 v1.14 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Support for ARM controller
|
||||||
|
* Support for the A2 micro printer (issue 191)
|
||||||
|
* Ellipse drawing primitive (issue 187)
|
||||||
|
* Added software reset for UC1701
|
||||||
|
* Fixed compiler warning (issue 196)
|
||||||
|
* Support for Freetronics SSD1351 OLED (issue 195)
|
||||||
|
* Several other fixes and improvements
|
||||||
|
2014-01-25 v1.15 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Fixed a bug with the rotation procs: Occupied too much flash ROM (issue 219)
|
||||||
|
* Fixed issue with more than one SPI controller (SW SPI, issue 227)
|
||||||
|
* Added "drawTriangle" (issue 226)
|
||||||
|
* Added support for UC1608 (issue 214)
|
||||||
|
* Added ProFont family of fonts (issue 234)
|
||||||
|
* SW SPI support for Teensy 3 (issue 230)
|
||||||
|
* Removed Arduino/AVR specific files from ARM port (issue 209)
|
||||||
|
2014-07-05 v1.16 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Added support for LD7032 60x32 OLED
|
||||||
|
* Added support for SSD1306 OLED, which does not send I2C ACK (issue 239)
|
||||||
|
* Added support for SH1106 128x64 OLED
|
||||||
|
* Added support for T6963 128x128 displays
|
||||||
|
* Added U8GLIB_SSD1306_ADAFRUIT_128X64 constructor
|
||||||
|
2014-12-21 v1.17 Oliver Kraus <olikraus@gmail.com>
|
||||||
|
* Added U8GLIB_UC1611_DOGM240 constructor (Issue 284)
|
||||||
|
* Added U8GLIB_UC1611_DOGXL240 constructor
|
||||||
|
* Added support for UC1608 controller (Issue 300)
|
||||||
|
* Added U8GLIB_SSD1306_ADAFRUIT_128X64 for Adafruit OLEDs (Issue 289)
|
||||||
|
* Bufix in the sleep on/off sequence (CS has not been releases, issue 298)
|
||||||
|
* helvB and helvR number only fonts (Issue 271)
|
||||||
|
* 400KHz option for I2C with U8G_I2C_OPT_FAST available for Due and Uno (Issue 303)
|
||||||
|
* I2C support for Arduino Due. 100KHz/400KHz, TWI & TWI1, ACK will be ignored (issue 285)
|
||||||
|
* Unifont update (Issue 297)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,15 @@
|
||||||
U8GLIB
|
U8GLIB
|
||||||
http://code.google.com/p/u8glib/
|
http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
|
||||||
Install instructions for the Arduino environment.
|
Install instructions for the Arduino environment.
|
||||||
|
|
||||||
1. Unzip u8glib_arduino_vX.XX.zip into the "libraries" folder
|
1. Start Arduino IDE
|
||||||
|
2. In the Arduino IDE, import the library from the "Add Library" Menu.
|
||||||
|
|
||||||
|
Alternative install instructions for the Arduino environment.
|
||||||
|
|
||||||
|
1. Unzip u8glib_arduino_vX.XX.zip into the "libraries" folder of the
|
||||||
|
Arduino install directory
|
||||||
2. Start Arduino IDE
|
2. Start Arduino IDE
|
||||||
|
|
||||||
Install instructions for the Chipkit (Arduino) environment.
|
Install instructions for the Chipkit (Arduino) environment.
|
||||||
|
|
|
@ -77,4 +77,3 @@ uint8_t U8GLIB::initRW8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, u
|
||||||
return u8g_InitRW8Bit(&u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset);
|
return u8g_InitRW8Bit(&u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,10 +57,8 @@ class U8GLIB : public Print
|
||||||
protected:
|
protected:
|
||||||
uint8_t init8BitFixedPort(u8g_dev_t *dev, uint8_t en, uint8_t cs, uint8_t di, uint8_t rw, uint8_t reset);
|
uint8_t init8BitFixedPort(u8g_dev_t *dev, uint8_t en, uint8_t cs, uint8_t di, uint8_t rw, uint8_t reset);
|
||||||
private:
|
private:
|
||||||
uint8_t init8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
uint8_t init8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE);
|
||||||
uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE);
|
uint8_t initRW8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset);
|
||||||
uint8_t initRW8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
|
||||||
uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset);
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/* constructor */
|
/* constructor */
|
||||||
|
@ -68,17 +66,17 @@ class U8GLIB : public Print
|
||||||
{ }
|
{ }
|
||||||
U8GLIB(u8g_dev_t *dev)
|
U8GLIB(u8g_dev_t *dev)
|
||||||
{ prepare(); u8g_Init(&u8g, dev); }
|
{ prepare(); u8g_Init(&u8g, dev); }
|
||||||
|
U8GLIB(u8g_dev_t *dev, u8g_com_fnptr com_fn)
|
||||||
|
{ prepare(); u8g_InitComFn(&u8g, dev, com_fn); }
|
||||||
U8GLIB(u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
|
U8GLIB(u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
|
||||||
{ initSPI(dev, sck, mosi, cs, a0, reset); }
|
{ initSPI(dev, sck, mosi, cs, a0, reset); }
|
||||||
U8GLIB(u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset)
|
U8GLIB(u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset)
|
||||||
{ initHWSPI(dev, cs, a0, reset); }
|
{ initHWSPI(dev, cs, a0, reset); }
|
||||||
U8GLIB(u8g_dev_t *dev, uint8_t options)
|
U8GLIB(u8g_dev_t *dev, uint8_t options)
|
||||||
{ initI2C(dev, options); }
|
{ initI2C(dev, options); }
|
||||||
U8GLIB(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
U8GLIB(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw, uint8_t reset)
|
||||||
uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw, uint8_t reset)
|
|
||||||
{ init8Bit(dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset); }
|
{ init8Bit(dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset); }
|
||||||
U8GLIB(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
U8GLIB(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset)
|
||||||
uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset)
|
|
||||||
{ initRW8Bit(dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset); }
|
{ initRW8Bit(dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset); }
|
||||||
|
|
||||||
uint8_t begin(void) { is_begin = 1; return u8g_Begin(&u8g); }
|
uint8_t begin(void) { is_begin = 1; return u8g_Begin(&u8g); }
|
||||||
|
@ -114,6 +112,11 @@ class U8GLIB : public Print
|
||||||
void sleepOff(void) { u8g_SleepOff(&u8g); }
|
void sleepOff(void) { u8g_SleepOff(&u8g); }
|
||||||
|
|
||||||
/* graphic primitives */
|
/* graphic primitives */
|
||||||
|
void setColorEntry(uint8_t color_index, uint8_t r, uint8_t g, uint8_t b) { u8g_SetColorEntry(&u8g, color_index, r, g, b); }
|
||||||
|
void setHiColor(uint16_t rgb) { u8g_SetHiColor(&u8g, rgb); }
|
||||||
|
void setHiColorByRGB(uint8_t r, uint8_t g, uint8_t b) { u8g_SetHiColorByRGB(&u8g, r, g, b); }
|
||||||
|
void setRGB(uint8_t r, uint8_t g, uint8_t b) { u8g_SetRGB(&u8g, r, g, b); }
|
||||||
|
|
||||||
void setColorIndex(uint8_t color_index) { u8g_SetColorIndex(&u8g, color_index); }
|
void setColorIndex(uint8_t color_index) { u8g_SetColorIndex(&u8g, color_index); }
|
||||||
uint8_t getColorIndex(void) { return u8g_GetColorIndex(&u8g); }
|
uint8_t getColorIndex(void) { return u8g_GetColorIndex(&u8g); }
|
||||||
|
|
||||||
|
@ -138,6 +141,14 @@ class U8GLIB : public Print
|
||||||
void drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawCircle(&u8g, x0, y0, rad, opt); }
|
void drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawCircle(&u8g, x0, y0, rad, opt); }
|
||||||
void drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawDisc(&u8g, x0, y0, rad, opt); }
|
void drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawDisc(&u8g, x0, y0, rad, opt); }
|
||||||
|
|
||||||
|
void drawEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawEllipse(&u8g, x0, y0, rx, ry, opt); }
|
||||||
|
void drawFilledEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt = U8G_DRAW_ALL) { u8g_DrawFilledEllipse(&u8g, x0, y0, rx, ry, opt); }
|
||||||
|
|
||||||
|
void drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
||||||
|
{ u8g_DrawTriangle(&u8g, x0, y0, x1, y1, x2, y2); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* bitmap handling */
|
/* bitmap handling */
|
||||||
void drawBitmap(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const uint8_t *bitmap)
|
void drawBitmap(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const uint8_t *bitmap)
|
||||||
{ u8g_DrawBitmap(&u8g, x, y, cnt, h, bitmap); }
|
{ u8g_DrawBitmap(&u8g, x, y, cnt, h, bitmap); }
|
||||||
|
@ -223,6 +234,17 @@ class U8GLIB_DOGS102 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_DOGS102_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_DOGS102_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1701_dogs102_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_DOGS102_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1701_dogs102_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_MINI12864 : public U8GLIB
|
class U8GLIB_MINI12864 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -234,6 +256,17 @@ class U8GLIB_MINI12864 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_MINI12864_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_MINI12864_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1701_mini12864_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_MINI12864_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1701_mini12864_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_DOGM132 : public U8GLIB
|
class U8GLIB_DOGM132 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -260,6 +293,14 @@ class U8GLIB_NHD_C12832 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_NHD_C12832_USART : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_NHD_C12832_USART(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_nhd_c12832_hw_usart_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_DOGM128 : public U8GLIB
|
class U8GLIB_DOGM128 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -269,6 +310,25 @@ class U8GLIB_DOGM128 : public U8GLIB
|
||||||
U8GLIB_DOGM128(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_DOGM128(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_st7565_dogm128_hw_spi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_st7565_dogm128_hw_spi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_DOGM128(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t en, uint8_t cs1, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_dogm128_parallel, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_DOGM128_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_DOGM128_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_dogm128_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_DOGM128_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_dogm128_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_DOGM128_2X(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t en, uint8_t cs1, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_dogm128_2x_parallel, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_LM6059 : public U8GLIB
|
class U8GLIB_LM6059 : public U8GLIB
|
||||||
|
@ -282,6 +342,17 @@ class U8GLIB_LM6059 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_LM6059_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_LM6059_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_lm6059_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_LM6059_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_lm6059_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_LM6063 : public U8GLIB
|
class U8GLIB_LM6063 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -293,6 +364,17 @@ class U8GLIB_LM6063 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_LM6063_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_LM6063_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_lm6063_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_LM6063_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_lm6063_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_64128N : public U8GLIB
|
class U8GLIB_64128N : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -302,6 +384,25 @@ class U8GLIB_64128N : public U8GLIB
|
||||||
U8GLIB_64128N(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_64128N(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_st7565_64128n_hw_spi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_st7565_64128n_hw_spi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_64128N(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t en, uint8_t cs1, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_64128n_parallel, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_64128N_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_64128N_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_64128n_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_64128N_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_64128n_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_64128N_2X(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t en, uint8_t cs1, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_64128n_2x_parallel, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_NHD_C12864 : public U8GLIB
|
class U8GLIB_NHD_C12864 : public U8GLIB
|
||||||
|
@ -315,6 +416,111 @@ class U8GLIB_NHD_C12864 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_NHD_C12864_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_NHD_C12864_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_nhd_c12864_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_NHD_C12864_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7565_nhd_c12864_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1601_C128032 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1601_C128032(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1601_c128032_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1601_C128032(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1601_c128032_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1601_C128032_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1601_C128032_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1601_c128032_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1601_C128032_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1601_c128032_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1608_240X64 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1608_240X64(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x64_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1608_240X64(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x64_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1608_240X64_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1608_240X64_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x64_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1608_240X64_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x64_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1608_240X128 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1608_240X128(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x128_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1608_240X128(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x128_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1608_240X128_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1608_240X128_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x128_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1608_240X128_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1608_240x128_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class U8GLIB_UC1611_DOGM240 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1611_DOGM240(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogm240_i2c, options)
|
||||||
|
{}
|
||||||
|
U8GLIB_UC1611_DOGM240(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogm240_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1611_DOGM240(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogm240_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_UC1611_DOGXL240 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_UC1611_DOGXL240(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogxl240_i2c, options)
|
||||||
|
{}
|
||||||
|
U8GLIB_UC1611_DOGXL240(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogxl240_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_UC1611_DOGXL240(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_uc1611_dogxl240_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_ST7920_128X64 : public U8GLIB
|
class U8GLIB_ST7920_128X64 : public U8GLIB
|
||||||
{
|
{
|
||||||
|
@ -349,6 +555,14 @@ class U8GLIB_ST7920_128X64_1X : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_ST7920_128X64_CUSTOM_1X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_ST7920_128X64_CUSTOM_1X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7920_128x64_custom, sck, mosi, cs, U8G_PIN_NONE, reset) // a0 = U8G_PIN_NONE
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_ST7920_128X64_4X : public U8GLIB
|
class U8GLIB_ST7920_128X64_4X : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -364,6 +578,13 @@ class U8GLIB_ST7920_128X64_4X : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_ST7920_128X64_CUSTOM_4X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_ST7920_128X64_CUSTOM_4X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_st7920_128x64_4x_custom, sck, mosi, cs, U8G_PIN_NONE, reset) // a0 = U8G_PIN_NONE
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class U8GLIB_ST7920_192X32 : public U8GLIB // OBSOLETE, use U8GLIB_ST7920_192X32_1X instead
|
class U8GLIB_ST7920_192X32 : public U8GLIB // OBSOLETE, use U8GLIB_ST7920_192X32_1X instead
|
||||||
|
@ -485,7 +706,7 @@ class U8GLIB_LC7981_240X128 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
// 16 bit mode required: Remove comment from "#define U8G_16BIT 1" in utility/u8g.h
|
// 16 bit mode required: Remove comment from "#define U8G_16BIT 1" in utility/utility/u8g.h
|
||||||
class U8GLIB_LC7981_320X64 : public U8GLIB
|
class U8GLIB_LC7981_320X64 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -581,6 +802,10 @@ class U8GLIB_NHD31OLED_BW : public U8GLIB
|
||||||
U8GLIB_NHD31OLED_BW(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_NHD31OLED_BW(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_bw_hw_spi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_bw_hw_spi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_NHD31OLED_BW(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t cs, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_bw_parallel, d0, d1, d2, d3, d4, d5, d6, d7, U8G_PIN_NONE, cs, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_NHD31OLED_2X_BW : public U8GLIB
|
class U8GLIB_NHD31OLED_2X_BW : public U8GLIB
|
||||||
|
@ -603,6 +828,10 @@ class U8GLIB_NHD31OLED_GR : public U8GLIB
|
||||||
U8GLIB_NHD31OLED_GR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_NHD31OLED_GR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_gr_hw_spi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_gr_hw_spi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_NHD31OLED_GR(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t cs, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1322_nhd31oled_gr_parallel, d0, d1, d2, d3, d4, d5, d6, d7, U8G_PIN_NONE, cs, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_NHD31OLED_2X_GR : public U8GLIB
|
class U8GLIB_NHD31OLED_2X_GR : public U8GLIB
|
||||||
|
@ -629,7 +858,63 @@ class U8GLIB_SSD1306_128X64 : public U8GLIB
|
||||||
U8GLIB_SSD1306_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
U8GLIB_SSD1306_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
: U8GLIB(&u8g_dev_ssd1306_128x64_i2c, options)
|
: U8GLIB(&u8g_dev_ssd1306_128x64_i2c, options)
|
||||||
{ }
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1306_ADAFRUIT_128X64 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1306_ADAFRUIT_128X64(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_adafruit_128x64_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_ADAFRUIT_128X64(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_adafruit_128x64_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_ADAFRUIT_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_adafruit_128x64_i2c, options)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class U8GLIB_SSD1306_128X64_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1306_128X64_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x64_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_128X64_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x64_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_128X64_2X(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x64_2x_i2c, options)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SH1106_128X64 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SH1106_128X64(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SH1106_128X64(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SH1106_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_i2c, options)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SH1106_128X64_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SH1106_128X64_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SH1106_128X64_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SH1106_128X64_2X(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_sh1106_128x64_2x_i2c, options)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_SSD1309_128X64 : public U8GLIB
|
class U8GLIB_SSD1309_128X64 : public U8GLIB
|
||||||
|
@ -644,7 +929,6 @@ class U8GLIB_SSD1309_128X64 : public U8GLIB
|
||||||
U8GLIB_SSD1309_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
U8GLIB_SSD1309_128X64(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
: U8GLIB(&u8g_dev_ssd1309_128x64_i2c, options)
|
: U8GLIB(&u8g_dev_ssd1309_128x64_i2c, options)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_SSD1306_128X32 : public U8GLIB
|
class U8GLIB_SSD1306_128X32 : public U8GLIB
|
||||||
|
@ -659,7 +943,20 @@ class U8GLIB_SSD1306_128X32 : public U8GLIB
|
||||||
U8GLIB_SSD1306_128X32(uint8_t options = U8G_I2C_OPT_NONE)
|
U8GLIB_SSD1306_128X32(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
: U8GLIB(&u8g_dev_ssd1306_128x32_i2c, options)
|
: U8GLIB(&u8g_dev_ssd1306_128x32_i2c, options)
|
||||||
{ }
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1306_128X32_2X : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1306_128X32_2X(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x32_2x_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_128X32_2X(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x32_2x_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1306_128X32_2X(uint8_t options = U8G_I2C_OPT_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1306_128x32_2x_i2c, options)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -713,12 +1010,43 @@ class U8GLIB_SSD1327_96X96_2X_GR : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class U8GLIB_LD7032_60x32 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_LD7032_60x32(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ld7032_60x32_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_LD7032_60x32(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ld7032_60x32_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_LD7032_60x32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t en, uint8_t cs1, uint8_t di, uint8_t rw = U8G_PIN_NONE, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ld7032_60x32_parallel, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, U8G_PIN_NONE, di, rw, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class U8GLIB_HT1632_24X16 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_HT1632_24X16(uint8_t wr, uint8_t data, uint8_t cs)
|
||||||
|
: U8GLIB(&u8g_dev_ht1632_24x16, wr, data, cs, U8G_PIN_NONE, U8G_PIN_NONE)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class U8GLIB_PCF8812 : public U8GLIB
|
class U8GLIB_PCF8812 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
U8GLIB_PCF8812(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_PCF8812(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_pcf8812_96x65_sw_spi, sck, mosi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_pcf8812_96x65_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_PCF8812(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_pcf8812_96x65_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_PCD8544 : public U8GLIB
|
class U8GLIB_PCD8544 : public U8GLIB
|
||||||
|
@ -727,6 +1055,9 @@ class U8GLIB_PCD8544 : public U8GLIB
|
||||||
U8GLIB_PCD8544(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
U8GLIB_PCD8544(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
: U8GLIB(&u8g_dev_pcd8544_84x48_sw_spi, sck, mosi, cs, a0, reset)
|
: U8GLIB(&u8g_dev_pcd8544_84x48_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
{ }
|
{ }
|
||||||
|
U8GLIB_PCD8544(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_pcd8544_84x48_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class U8GLIB_TLS8204_84X48 : public U8GLIB
|
class U8GLIB_TLS8204_84X48 : public U8GLIB
|
||||||
|
@ -764,6 +1095,15 @@ class U8GLIB_T6963_240X128 : public U8GLIB
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class U8GLIB_T6963_128X128 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_T6963_128X128(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
|
||||||
|
uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_t6963_128x128_8bit, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
class U8GLIB_T6963_240X64 : public U8GLIB
|
class U8GLIB_T6963_240X64 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -808,6 +1148,108 @@ class U8GLIB_ILI9325D_320x240 : public U8GLIB
|
||||||
{ init8BitFixedPort(&u8g_dev_ili9325d_320x240_8bit, en, cs1, di, rw, reset); }
|
{ init8BitFixedPort(&u8g_dev_ili9325d_320x240_8bit, en, cs1, di, rw, reset); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128_332 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128_332(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_332_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128_332(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_332_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128_4X_332 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128_4X_332(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_4x_332_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128_4X_332(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_4x_332_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128GH_332 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128GH_332(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_332_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128GH_332(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_332_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128GH_4X_332 : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128GH_4X_332(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_4x_332_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128GH_4X_332(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_4x_332_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128_IDX : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128_IDX(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_idx_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128_IDX(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_idx_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128_HICOLOR : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128_HICOLOR(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_hicolor_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128_HICOLOR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_hicolor_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128_4X_HICOLOR : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128_4X_HICOLOR(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_4x_hicolor_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128_4X_HICOLOR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128_4x_hicolor_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128GH_HICOLOR : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128GH_HICOLOR(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_hicolor_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128GH_HICOLOR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_hicolor_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class U8GLIB_SSD1351_128X128GH_4X_HICOLOR : public U8GLIB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
U8GLIB_SSD1351_128X128GH_4X_HICOLOR(uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_4x_hicolor_sw_spi, sck, mosi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
U8GLIB_SSD1351_128X128GH_4X_HICOLOR(uint8_t cs, uint8_t a0, uint8_t reset = U8G_PIN_NONE)
|
||||||
|
: U8GLIB(&u8g_dev_ssd1351_128x128gh_4x_hicolor_hw_spi, cs, a0, reset)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class U8GLIB_FLIPDISC_2X7 : public U8GLIB
|
class U8GLIB_FLIPDISC_2X7 : public U8GLIB
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
A2Printer.pde
|
||||||
|
|
||||||
|
Special example code for the A2 Mciro Printer (https://www.sparkfun.com/products/10438)
|
||||||
|
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "U8glib.h"
|
||||||
|
|
||||||
|
// use this serial interface
|
||||||
|
#define PRINTER_SERIAL Serial
|
||||||
|
// #define PRINTER_SERIAL Serial1
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_com_uart(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
|
||||||
|
switch(msg) {
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
PRINTER_SERIAL.write(arg_val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
|
||||||
|
// half resolution
|
||||||
|
//U8GLIB u8g(&u8g_dev_a2_micro_printer_192x120_ds, (u8g_com_fnptr)u8g_com_uart);
|
||||||
|
|
||||||
|
// full resolution, requires to uncomment U8G_16BIT in u8g.h
|
||||||
|
//U8GLIB u8g(&u8g_dev_a2_micro_printer_384x240, (u8g_com_fnptr)u8g_com_uart);
|
||||||
|
|
||||||
|
// half resolution, extra log, requires to uncomment U8G_16BIT in u8g.h
|
||||||
|
//U8GLIB u8g(&u8g_dev_a2_micro_printer_192x360_ds, (u8g_com_fnptr)u8g_com_uart);
|
||||||
|
U8GLIB u8g(&u8g_dev_a2_micro_printer_192x720_ds, (u8g_com_fnptr)u8g_com_uart);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void drawLogo(uint8_t d) {
|
||||||
|
u8g.setFont(u8g_font_gdr25r);
|
||||||
|
u8g.drawStr(0+d, 30+d, "U");
|
||||||
|
u8g.setFont(u8g_font_gdr30n);
|
||||||
|
u8g.drawStr90(23+d,10+d,"8");
|
||||||
|
u8g.setFont(u8g_font_gdr25r);
|
||||||
|
u8g.drawStr(53+d,30+d,"g");
|
||||||
|
|
||||||
|
u8g.drawHLine(2+d, 35+d, 47);
|
||||||
|
u8g.drawVLine(45+d, 32+d, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawURL(void) {
|
||||||
|
u8g.setFont(u8g_font_4x6);
|
||||||
|
if ( u8g.getHeight() < 59 ) {
|
||||||
|
u8g.drawStr(53,9,"code.google.com");
|
||||||
|
u8g.drawStr(77,18,"/p/u8glib");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.drawStr(1,54,"code.google.com/p/u8glib");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw(void) {
|
||||||
|
// graphic commands to redraw the complete screen should be placed here
|
||||||
|
|
||||||
|
drawLogo(0);
|
||||||
|
drawURL();
|
||||||
|
u8g.drawFrame(0,0,u8g.getWidth(), u8g.getHeight());
|
||||||
|
|
||||||
|
u8g.setFont(u8g_font_helvR24r);
|
||||||
|
u8g.setPrintPos(0, 100);
|
||||||
|
u8g.print(u8g.getWidth(), DEC);
|
||||||
|
u8g.print("x");
|
||||||
|
u8g.print(u8g.getHeight(), DEC);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void) {
|
||||||
|
PRINTER_SERIAL.begin(19200);
|
||||||
|
|
||||||
|
// flip screen, if required
|
||||||
|
// u8g.setRot180();
|
||||||
|
|
||||||
|
// assign default color value
|
||||||
|
u8g.setColorIndex(1); // pixel on
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
|
||||||
|
// picture loop: This will print the picture
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
draw();
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
|
||||||
|
// send manual CR to the printer
|
||||||
|
PRINTER_SERIAL.write('\n');
|
||||||
|
|
||||||
|
// reprint the picture after 10 seconds
|
||||||
|
delay(10000);
|
||||||
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
const uint8_t rook_bitmap[] PROGMEM = {
|
const uint8_t rook_bitmap[] PROGMEM = {
|
||||||
0x00, // 00000000
|
0x00, // 00000000
|
|
@ -43,8 +43,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -53,9 +53,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -85,19 +86,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
// DOGS102 shield configuration values
|
// DOGS102 shield configuration values
|
|
@ -0,0 +1,201 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Color.pde
|
||||||
|
|
||||||
|
"Hello World!" example code with color.
|
||||||
|
|
||||||
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
|
>>> connected graphics display (see below).
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "U8glib.h"
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_LM6059 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_LM6063 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_BW u8g(10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
|
||||||
|
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
|
void draw(void) {
|
||||||
|
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR || u8g.getMode() == U8G_MODE_R3G3B2) {
|
||||||
|
/* draw background (area is 128x128) */
|
||||||
|
u8g_uint_t r, g, b;
|
||||||
|
for( b = 0; b < 4; b++ )
|
||||||
|
{
|
||||||
|
for( g = 0; g < 32; g++ )
|
||||||
|
{
|
||||||
|
for( r = 0; r < 32; r++ )
|
||||||
|
{
|
||||||
|
u8g.setRGB(r<<3, g<<3, b<<4 );
|
||||||
|
u8g.drawPixel(g + b*32, r);
|
||||||
|
u8g.setRGB(r<<3, g<<3, (b<<4)+64 );
|
||||||
|
u8g.drawPixel(g + b*32, r+32);
|
||||||
|
u8g.setRGB(r<<3, g<<3, (b<<4)+128 );
|
||||||
|
u8g.drawPixel(g + b*32, r+32+32);
|
||||||
|
u8g.setRGB(r<<3, g<<3, (b<<4)+128+64 );
|
||||||
|
u8g.drawPixel(g + b*32, r+32+32+32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// assign default color value
|
||||||
|
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
|
||||||
|
u8g.setColorIndex(255); // white
|
||||||
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
|
||||||
|
u8g.setColorIndex(3); // max intensity
|
||||||
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_BW ) {
|
||||||
|
u8g.setColorIndex(1); // pixel on
|
||||||
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
u8g.setFont(u8g_font_unifont);
|
||||||
|
u8g.drawStr( 0, 22, "Hello World!");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void) {
|
||||||
|
|
||||||
|
// flip screen, if required
|
||||||
|
// u8g.setRot180();
|
||||||
|
|
||||||
|
// set SPI backup if required
|
||||||
|
//u8g.setHardwareBackup(u8g_backup_avr_spi);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
// picture loop
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
draw();
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
|
||||||
|
// rebuild the picture after some delay
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
// setup input buffer
|
// setup input buffer
|
|
@ -44,8 +44,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -54,9 +54,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -86,19 +87,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
void draw(void) {
|
void draw(void) {
|
||||||
// graphic commands to redraw the complete screen should be placed here
|
// graphic commands to redraw the complete screen should be placed here
|
|
@ -0,0 +1,398 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
FPS.pde
|
||||||
|
|
||||||
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
|
>>> connected graphics display (see below).
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
ST7920_192X32, SPI: FPS: Box=7.6 @=9.8 iFPS: Box=11.4 @=14.7
|
||||||
|
ST7920_192X32, 8Bit: FPS: Box=6.2 @=7.5 iFPS: Box=9.3 @=11.2
|
||||||
|
DOGM128 SW SPI: FPS: Box=5.1 @=5.9 Pix=2.6 iFPS: Box=10.2 @=11.8 Pix=5.2
|
||||||
|
DOGM128 HW SPI: FPS: Box=5.5 @=6.3 iFPS: Box=11.0 @=12.6
|
||||||
|
DOGXL160 SW SPI: FPS: Box=1.7 @=1.9 iFPS: Box=6.9 @=7.7
|
||||||
|
DOGXL160 HW SPI: FPS: Box=1.8 @=2.1
|
||||||
|
|
||||||
|
NHD27OLED_BW, SW SPI: FPS: Box=3.0 @=3.7
|
||||||
|
NHD27OLED_BW, HW SPI: FPS: Box=3.5 @=4.5
|
||||||
|
NHD27OLED_2X_BW, SW SPI: FPS: Box=3.8 @=4.9
|
||||||
|
NHD27OLED_2X_BW, HW SPI: FPS: Box=4.6 @=6.4
|
||||||
|
|
||||||
|
30 Sep 2012
|
||||||
|
NHD27OLED_BW, SW SPI: FPS: Clip=9.2 Box=3.9 @=4.4 NEW_CODE
|
||||||
|
NHD27OLED_BW, SW SPI: FPS: Clip=9.2 Box=3.6 @=4.5
|
||||||
|
NHD27OLED_BW, HW SPI: FPS: Clip=16.3 Box=4.7 @=5.6
|
||||||
|
NHD27OLED_2X_BW, SW SPI: FPS: Clip=9.7 Box=4.5 @=5.8
|
||||||
|
NHD27OLED_2X_BW, SW SPI: FPS: Clip=18.0 Box=5.8 @=7.9
|
||||||
|
|
||||||
|
1 Oct 2012
|
||||||
|
ST7920_192X32, 8Bit: FPS: Box=7.2 @=10.0
|
||||||
|
DOGM128 SW SPI: FPS: Box=5.2 @=6.6 Pix=2.6
|
||||||
|
DOGM128 HW SPI: FPS: Clip=33.2 Box=5.5 @=7.1
|
||||||
|
DOGXL160 SW SPI: FPS: Box=1.7 @=2.0
|
||||||
|
DOGXL160 HW SPI: FPS: Box=1.8 @=2.2
|
||||||
|
|
||||||
|
DOGXL160 GR SW SPI: FPS: Box=1.1 @=1.3
|
||||||
|
|
||||||
|
1 Mar 2013
|
||||||
|
ST7920_192X32_1X, SPI: FPS: Clip=10.3 Box=5.5 @=7.2 Pix=3.9
|
||||||
|
ST7920_192X32_4X, SPI: FPS: Clip=10.9 Box=6.7 @=8.8 Pix=7.4
|
||||||
|
ST7920_192X32_1X, 8Bit: FPS: Clip=14.2 Box=6.1 @=8.4 Pix=4.2
|
||||||
|
ST7920_192X32_4X, 8Bit: FPS: Clip=14.2 Box=7.8 @=10.7 Pix=8.7
|
||||||
|
ST7920_192X32_1X, HW SPI: FPS: Clip=14.2 Box=6.3 @=8.7 Pix=4.3
|
||||||
|
ST7920_192X32_4X, HW SPI: FPS: Clip=15.3 Box=8.0 @=11.2 Pix=9.0
|
||||||
|
|
||||||
|
2 Jun 2013
|
||||||
|
U8GLIB_DOGM128 SW SPI: FPS: Clip=23.9 Box=4.5 @=6.6 Pix=2.1
|
||||||
|
U8GLIB_DOGM128_2X SW SPI: FPS: Clip=28.5 Box=6.6 @=9.7 Pix=3.9
|
||||||
|
U8GLIB_DOGM128_2X HW SPI: FPS: Clip=40.8 Box=7.1 @=10.8 Pix=4.1
|
||||||
|
|
||||||
|
3 Jun 2013
|
||||||
|
U8GLIB_ST7920_192X32_1X -Os SW SPI FPS: Clip=11.0 Box=5.4 @=7.1 Pix=3.9 Size=11828
|
||||||
|
U8GLIB_ST7920_192X32_1X -O3 SW SPI FPS: Clip=10.9 Box=5.6 @=7.5 Pix=4.0 Size=13800
|
||||||
|
U8GLIB_ST7920_192X32_1X -Os SW SPI FPS: Clip=16.8 Box=6.7 @=9.6 Pix=4.5 Size=11858 (new seq data output)
|
||||||
|
U8GLIB_ST7920_192X32_1X -Os HW SPI FPS: Clip=25.7 Box=7.5 @=11.3 Pix=4.8 (new seq data output)
|
||||||
|
|
||||||
|
6 Jun 2013
|
||||||
|
U8GLIB_DOGS102 u8g(13, 11, 10, 9); STD SW SPI FPS: Clip=9.5 Box=7.6 @=8.2 Pix=6.2 Size=15652
|
||||||
|
U8GLIB_DOGS102 u8g(13, 11, 10, 9); SW SPI FPS: Clip=19.1 Box=12.8 @=14.0 Pix=9.2 Size=15532
|
||||||
|
|
||||||
|
|
||||||
|
12 Jun 2013
|
||||||
|
SSD1351_128X128_332 SW SPI Clip=1.3 Box=0.7 @=0.9 Pix=0.4
|
||||||
|
SSD1351_128X128_332 HW SPI Clip=3.6 Box=1.1 @=1.5 Pix=0.5
|
||||||
|
|
||||||
|
24 Jun 2013
|
||||||
|
Uno SSD1351_128X128_332 SW SPI Clip=1.4 Box=0.8 @=0.9 Pix=0.4
|
||||||
|
|
||||||
|
Uno SSD1351_128X128_332 HW SPI Clip=4.4 Box=1.2 @=1.6 Pix=0.5
|
||||||
|
Uno SSD1351_128X128_HICOLOR HW SPI Clip=3.7 Box=0.8 @=1.0 Pix=0.3
|
||||||
|
|
||||||
|
Mega2560 SSD1351_128X128_332 HW SPI Clip=4.4 Box=1.2 @=1.6 Pix=0.5
|
||||||
|
Mega2560 SSD1351_128X128_4X_332 HW SPI Clip=4.6 Box=2.3 @=2.8 Pix=1.5
|
||||||
|
Mega2560 SSD1351_128X128_HICOLOR HW SPI Clip=3.6 Box=0.8 @=1.0 Pix=0.3
|
||||||
|
Mega2560 SSD1351_128X128_4X_HICOLOR HW SPI Clip=4.2 Box=1.7 @=2.1 Pix=1.0
|
||||||
|
|
||||||
|
Due SSD1351_128X128_332 HW SPI Clip=24.6 Box=6.3 @=7.8 Pix=2.8
|
||||||
|
Due SSD1351_128X128_4X_332 HW SPI Clip=28.1 Box=13.0 @=15.1 Pix=8.5
|
||||||
|
Due SSD1351_128X128_HICOLOR HW SPI Clip=20.8 Box=3.4 @=4.5 Pix=1.4
|
||||||
|
Due SSD1351_128X128_4X_HICOLOR HW SPI Clip=26.3 Box=8.9 @=11.1 Pix=4.8
|
||||||
|
|
||||||
|
Due SSD1351_128X128_4X_HICOLOR SW SPI Clip=0.4 Box=0.4 @=0.4 Pix=0.4
|
||||||
|
|
||||||
|
Due DOGS102 u8g(13, 11, 10, 9); SW SPI FPS: Clip=19.1 Box=13.1 @=14.3 Pix=9.4
|
||||||
|
Due DOGS102 u8g(10, 9); HW SPI FPS: Clip=128.9 Box=30.7 @=40.6 Pix=15.4
|
||||||
|
|
||||||
|
Due NHD27OLED_BW u8g(10, 9) HW SPI FPS: Clip=53.0 Box=19.6 @=23.8 Pix=10.6
|
||||||
|
Due NHD27OLED_2X_BW u8g(10, 9) HW SPI FPS: Clip=57.0 Box=25.3 @=31.7 Pix=18.1
|
||||||
|
Due NHD27OLED_GR u8g(10, 9) HW SPI FPS: Clip=34.1 Box=11.7 @=13.7 Pix=5.6
|
||||||
|
Due NHD27OLED_2X_GR u8g(10, 9) HW SPI FPS: Clip=38.1 Box=15.5 @=20.0 Pix=8.8
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "U8glib.h"
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_LM6059 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_LM6063 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_BW u8g(10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
|
||||||
|
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
#define SECONDS 10
|
||||||
|
uint8_t flip_color = 0;
|
||||||
|
uint8_t draw_color = 1;
|
||||||
|
|
||||||
|
void draw_set_screen(void) {
|
||||||
|
// graphic commands to redraw the complete screen should be placed here
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
if ( flip_color == 0 )
|
||||||
|
u8g.setHiColorByRGB(0,0,0);
|
||||||
|
else
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.setColorIndex(flip_color);
|
||||||
|
}
|
||||||
|
u8g.drawBox( 0, 0, u8g.getWidth(), u8g.getHeight() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_clip_test(void) {
|
||||||
|
u8g_uint_t i, j, k;
|
||||||
|
char buf[3] = "AB";
|
||||||
|
k = 0;
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.setColorIndex(draw_color);
|
||||||
|
}
|
||||||
|
u8g.setFont(u8g_font_6x10);
|
||||||
|
|
||||||
|
for( i = 0; i < 6; i++ ) {
|
||||||
|
for( j = 1; j < 8; j++ ) {
|
||||||
|
u8g.drawHLine(i-3, k, j);
|
||||||
|
u8g.drawHLine(i-3+10, k, j);
|
||||||
|
|
||||||
|
u8g.drawVLine(k+20, i-3, j);
|
||||||
|
u8g.drawVLine(k+20, i-3+10, j);
|
||||||
|
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u8g.drawStr(0-3, 50, buf);
|
||||||
|
u8g.drawStr180(0+3, 50, buf);
|
||||||
|
|
||||||
|
u8g.drawStr(u8g.getWidth()-3, 40, buf);
|
||||||
|
u8g.drawStr180(u8g.getWidth()+3, 40, buf);
|
||||||
|
|
||||||
|
u8g.drawStr90(u8g.getWidth()-10, 0-3, buf);
|
||||||
|
u8g.drawStr270(u8g.getWidth()-10, 3, buf);
|
||||||
|
|
||||||
|
u8g.drawStr90(u8g.getWidth()-20, u8g.getHeight()-3, buf);
|
||||||
|
u8g.drawStr270(u8g.getWidth()-20, u8g.getHeight()+3, buf);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_char(void) {
|
||||||
|
char buf[2] = "@";
|
||||||
|
u8g_uint_t i, j;
|
||||||
|
// graphic commands to redraw the complete screen should be placed here
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.setColorIndex(draw_color);
|
||||||
|
}
|
||||||
|
u8g.setFont(u8g_font_6x10);
|
||||||
|
j = 8;
|
||||||
|
for(;;) {
|
||||||
|
i = 0;
|
||||||
|
for(;;) {
|
||||||
|
u8g.drawStr( i, j, buf);
|
||||||
|
i += 8;
|
||||||
|
if ( i > u8g.getWidth() )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
j += 8;
|
||||||
|
if ( j > u8g.getHeight() )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_pixel(void) {
|
||||||
|
u8g_uint_t x, y, w2, h2;
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.setColorIndex(draw_color);
|
||||||
|
}
|
||||||
|
w2 = u8g.getWidth();
|
||||||
|
h2 = u8g.getHeight();
|
||||||
|
w2 /= 2;
|
||||||
|
h2 /= 2;
|
||||||
|
for( y = 0; y < h2; y++ ) {
|
||||||
|
for( x = 0; x < w2; x++ ) {
|
||||||
|
if ( (x + y) & 1 ) {
|
||||||
|
u8g.drawPixel(x,y);
|
||||||
|
u8g.drawPixel(x,y+h2);
|
||||||
|
u8g.drawPixel(x+w2,y);
|
||||||
|
u8g.drawPixel(x+w2,y+h2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns unadjusted FPS
|
||||||
|
uint16_t picture_loop_with_fps(void (*draw_fn)(void)) {
|
||||||
|
uint16_t FPS10 = 0;
|
||||||
|
uint32_t time;
|
||||||
|
|
||||||
|
time = millis() + SECONDS*1000;
|
||||||
|
|
||||||
|
// picture loop
|
||||||
|
do {
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
draw_fn();
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
FPS10++;
|
||||||
|
flip_color = flip_color ^ 1;
|
||||||
|
} while( millis() < time );
|
||||||
|
return FPS10;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *convert_FPS(uint16_t fps) {
|
||||||
|
static char buf[6];
|
||||||
|
strcpy(buf, u8g_u8toa( (uint8_t)(fps/10), 3));
|
||||||
|
buf[3] = '.';
|
||||||
|
buf[4] = (fps % 10) + '0';
|
||||||
|
buf[5] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void show_result(const char *s, uint16_t fps) {
|
||||||
|
// assign default color value
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
u8g.setColorIndex(draw_color);
|
||||||
|
}
|
||||||
|
u8g.setFont(u8g_font_8x13B);
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
u8g.drawStr(0,12, s);
|
||||||
|
u8g.drawStr(0,24, convert_FPS(fps));
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void) {
|
||||||
|
// flip screen, if required
|
||||||
|
// u8g.setRot180();
|
||||||
|
|
||||||
|
// assign default color value
|
||||||
|
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
|
||||||
|
draw_color = 255; // white
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
|
||||||
|
draw_color = 3; // max intensity
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_BW )
|
||||||
|
draw_color = 1; // pixel on
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
uint16_t fps;
|
||||||
|
fps = picture_loop_with_fps(draw_clip_test);
|
||||||
|
show_result("draw clip test", fps);
|
||||||
|
delay(5000);
|
||||||
|
fps = picture_loop_with_fps(draw_set_screen);
|
||||||
|
show_result("clear screen", fps);
|
||||||
|
delay(5000);
|
||||||
|
fps = picture_loop_with_fps(draw_char);
|
||||||
|
show_result("draw @", fps);
|
||||||
|
delay(5000);
|
||||||
|
fps = picture_loop_with_fps(draw_pixel);
|
||||||
|
show_result("draw pixel", fps);
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
|
|
@ -41,8 +41,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -51,9 +51,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -83,19 +84,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
void u8g_prepare(void) {
|
void u8g_prepare(void) {
|
||||||
u8g.setFont(u8g_font_6x10);
|
u8g.setFont(u8g_font_6x10);
|
||||||
|
@ -143,6 +179,15 @@ void u8g_line(uint8_t a) {
|
||||||
u8g.drawLine(7+a*4, 10, 100, 55);
|
u8g.drawLine(7+a*4, 10, 100, 55);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_triangle(uint8_t a) {
|
||||||
|
uint16_t offset = a;
|
||||||
|
u8g.drawStr( 0, 0, "drawTriangle");
|
||||||
|
u8g.drawTriangle(14,7, 45,30, 10,40);
|
||||||
|
u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
|
||||||
|
u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
|
||||||
|
u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
|
||||||
|
}
|
||||||
|
|
||||||
void u8g_ascii_1() {
|
void u8g_ascii_1() {
|
||||||
char s[2] = " ";
|
char s[2] = " ";
|
||||||
uint8_t x, y;
|
uint8_t x, y;
|
||||||
|
@ -167,6 +212,45 @@ void u8g_ascii_2() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_extra_page(uint8_t a)
|
||||||
|
{
|
||||||
|
if ( u8g.getMode() == U8G_MODE_HICOLOR || u8g.getMode() == U8G_MODE_R3G3B2) {
|
||||||
|
/* draw background (area is 128x128) */
|
||||||
|
u8g_uint_t r, g, b;
|
||||||
|
b = a << 5;
|
||||||
|
for( g = 0; g < 64; g++ )
|
||||||
|
{
|
||||||
|
for( r = 0; r < 64; r++ )
|
||||||
|
{
|
||||||
|
u8g.setRGB(r<<2, g<<2, b );
|
||||||
|
u8g.drawPixel(g, r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u8g.setRGB(255,255,255);
|
||||||
|
u8g.drawStr( 66, 0, "Color Page");
|
||||||
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
|
||||||
|
{
|
||||||
|
u8g.drawStr( 66, 0, "Gray Level");
|
||||||
|
u8g.setColorIndex(1);
|
||||||
|
u8g.drawBox(0, 4, 64, 32);
|
||||||
|
u8g.drawBox(70, 20, 4, 12);
|
||||||
|
u8g.setColorIndex(2);
|
||||||
|
u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
|
||||||
|
u8g.drawBox(74, 20, 4, 12);
|
||||||
|
u8g.setColorIndex(3);
|
||||||
|
u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
|
||||||
|
u8g.drawBox(78, 20, 4, 12);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u8g.drawStr( 0, 12, "setScale2x2");
|
||||||
|
u8g.setScale2x2();
|
||||||
|
u8g.drawStr( 0, 6+a, "setScale2x2");
|
||||||
|
u8g.undoScale();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t draw_state = 0;
|
uint8_t draw_state = 0;
|
||||||
|
|
||||||
|
@ -178,8 +262,10 @@ void draw(void) {
|
||||||
case 2: u8g_r_frame(draw_state&7); break;
|
case 2: u8g_r_frame(draw_state&7); break;
|
||||||
case 3: u8g_string(draw_state&7); break;
|
case 3: u8g_string(draw_state&7); break;
|
||||||
case 4: u8g_line(draw_state&7); break;
|
case 4: u8g_line(draw_state&7); break;
|
||||||
case 5: u8g_ascii_1(); break;
|
case 5: u8g_triangle(draw_state&7); break;
|
||||||
case 6: u8g_ascii_2(); break;
|
case 6: u8g_ascii_1(); break;
|
||||||
|
case 7: u8g_ascii_2(); break;
|
||||||
|
case 8: u8g_extra_page(draw_state&7); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,15 +274,6 @@ void setup(void) {
|
||||||
// flip screen, if required
|
// flip screen, if required
|
||||||
//u8g.setRot180();
|
//u8g.setRot180();
|
||||||
|
|
||||||
// assign default color value
|
|
||||||
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
|
|
||||||
u8g.setColorIndex(255); // white
|
|
||||||
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
|
|
||||||
u8g.setColorIndex(3); // max intensity
|
|
||||||
else if ( u8g.getMode() == U8G_MODE_BW )
|
|
||||||
u8g.setColorIndex(1); // pixel on
|
|
||||||
|
|
||||||
//u8g.setContrast(0x30);
|
|
||||||
|
|
||||||
pinMode(13, OUTPUT);
|
pinMode(13, OUTPUT);
|
||||||
digitalWrite(13, HIGH);
|
digitalWrite(13, HIGH);
|
||||||
|
@ -212,11 +289,11 @@ void loop(void) {
|
||||||
|
|
||||||
// increase the state
|
// increase the state
|
||||||
draw_state++;
|
draw_state++;
|
||||||
if ( draw_state >= 7*8 )
|
if ( draw_state >= 9*8 )
|
||||||
draw_state = 0;
|
draw_state = 0;
|
||||||
|
|
||||||
// rebuild the picture after some delay
|
// rebuild the picture after some delay
|
||||||
delay(150);
|
//delay(150);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
void draw(void) {
|
void draw(void) {
|
||||||
|
@ -107,7 +143,6 @@ void draw(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(void) {
|
void setup(void) {
|
||||||
|
|
||||||
// flip screen, if required
|
// flip screen, if required
|
||||||
// u8g.setRot180();
|
// u8g.setRot180();
|
||||||
|
|
||||||
|
@ -115,12 +150,18 @@ void setup(void) {
|
||||||
//u8g.setHardwareBackup(u8g_backup_avr_spi);
|
//u8g.setHardwareBackup(u8g_backup_avr_spi);
|
||||||
|
|
||||||
// assign default color value
|
// assign default color value
|
||||||
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
|
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
|
||||||
u8g.setColorIndex(255); // white
|
u8g.setColorIndex(255); // white
|
||||||
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
|
||||||
u8g.setColorIndex(3); // max intensity
|
u8g.setColorIndex(3); // max intensity
|
||||||
else if ( u8g.getMode() == U8G_MODE_BW )
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_BW ) {
|
||||||
u8g.setColorIndex(1); // pixel on
|
u8g.setColorIndex(1); // pixel on
|
||||||
|
}
|
||||||
|
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
|
||||||
|
u8g.setHiColorByRGB(255,255,255);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop(void) {
|
void loop(void) {
|
||||||
|
@ -131,6 +172,6 @@ void loop(void) {
|
||||||
} while( u8g.nextPage() );
|
} while( u8g.nextPage() );
|
||||||
|
|
||||||
// rebuild the picture after some delay
|
// rebuild the picture after some delay
|
||||||
delay(500);
|
delay(50);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,9 @@
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -53,9 +56,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -85,19 +89,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
#define KEY_NONE 0
|
#define KEY_NONE 0
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
void draw(void) {
|
void draw(void) {
|
||||||
// graphic commands to redraw the complete screen should be placed here
|
// graphic commands to redraw the complete screen should be placed here
|
|
@ -1,8 +1,8 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
HelloWorld.pde
|
Rotation.pde
|
||||||
|
|
||||||
"Hello World!" example code.
|
Example code for RotXXX functions.
|
||||||
|
|
||||||
>>> Before compiling: Please remove comment from the constructor of the
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
>>> connected graphics display (see below).
|
>>> connected graphics display (see below).
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
uint8_t offset = 0;
|
uint8_t offset = 0;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
HelloWorld.pde
|
Scale.pde
|
||||||
|
|
||||||
"Hello World!" example code.
|
Example code for the 2x2 scale function.
|
||||||
|
|
||||||
>>> Before compiling: Please remove comment from the constructor of the
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
>>> connected graphics display (see below).
|
>>> connected graphics display (see below).
|
||||||
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
|
||||||
void draw(void) {
|
void draw(void) {
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
// graphic commands to redraw the complete screen should be placed here
|
// graphic commands to redraw the complete screen should be placed here
|
||||||
void draw(void) {
|
void draw(void) {
|
|
@ -0,0 +1,348 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Touch4WSetup.pde
|
||||||
|
|
||||||
|
Use this example to figure out the ranges for of the active area of a 4-wire resistive
|
||||||
|
touch panel.
|
||||||
|
|
||||||
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
|
>>> connected graphics display (see below).
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "U8glib.h"
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_LM6059 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_LM6063 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_BW u8g(10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
|
||||||
|
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// Setup 4-Wire Resistive Touch Panel
|
||||||
|
|
||||||
|
uint8_t tp_left = A3;
|
||||||
|
uint8_t tp_right = A5;
|
||||||
|
uint8_t tp_top = A4;
|
||||||
|
uint8_t tp_bottom = A2;
|
||||||
|
|
||||||
|
#define X_START 120
|
||||||
|
#define X_END 140
|
||||||
|
#define Y_START 120
|
||||||
|
#define Y_END 140
|
||||||
|
|
||||||
|
#define PULLUP_THRESHOLD 235
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// Touch Panel Code
|
||||||
|
|
||||||
|
/* touch panel dimension */
|
||||||
|
struct tpd_struct
|
||||||
|
{
|
||||||
|
/* raw value */
|
||||||
|
uint8_t raw;
|
||||||
|
|
||||||
|
/* calibration values */
|
||||||
|
uint8_t start;
|
||||||
|
uint8_t end;
|
||||||
|
|
||||||
|
/* user values */
|
||||||
|
uint8_t range; /* result will have range fron 0..range (including the value of range) */
|
||||||
|
|
||||||
|
uint8_t result; /* output value: position [0...range] */
|
||||||
|
uint8_t is_pressed; /* output value: pressed (=1) or not pressed (=0) */
|
||||||
|
uint8_t is_update; /* will be set to 1 if result or is_pressed has been updated */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tp_struct
|
||||||
|
{
|
||||||
|
struct tpd_struct x;
|
||||||
|
struct tpd_struct y;
|
||||||
|
uint8_t is_pressed; /* combination of x.is_pressed && y.is_pressed */
|
||||||
|
uint8_t is_update;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tp_struct tp;
|
||||||
|
|
||||||
|
/* map raw value to 0...range (result) */
|
||||||
|
void tpd_map_touch_position(struct tpd_struct *d, uint8_t raw)
|
||||||
|
{
|
||||||
|
uint8_t is_pressed;
|
||||||
|
uint16_t p;
|
||||||
|
uint8_t start, end;
|
||||||
|
|
||||||
|
d->raw = raw;
|
||||||
|
|
||||||
|
start = d->start;
|
||||||
|
end = d->end;
|
||||||
|
|
||||||
|
/* check if position is within active area; store result in "is_pressed" */
|
||||||
|
is_pressed = 1;
|
||||||
|
if ( raw >= PULLUP_THRESHOLD )
|
||||||
|
{
|
||||||
|
d->result = 0;
|
||||||
|
is_pressed = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* update start and end */
|
||||||
|
if ( raw < start )
|
||||||
|
{
|
||||||
|
start = raw;
|
||||||
|
d->start = raw;
|
||||||
|
}
|
||||||
|
if ( raw > end )
|
||||||
|
{
|
||||||
|
end = raw;
|
||||||
|
d->end = raw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* store "is_pressed" in the global structure, set update flag */
|
||||||
|
if ( d->is_pressed != is_pressed )
|
||||||
|
d->is_update = 1;
|
||||||
|
d->is_pressed = is_pressed;
|
||||||
|
|
||||||
|
/* map "raw" value into target range */
|
||||||
|
if ( is_pressed != 0 )
|
||||||
|
{
|
||||||
|
p = raw;
|
||||||
|
p -= start;
|
||||||
|
p *= d->range;
|
||||||
|
end -= start;
|
||||||
|
p /= end;
|
||||||
|
|
||||||
|
if ( d->result != p )
|
||||||
|
d->is_update = 1;
|
||||||
|
d->result = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tp_Init(uint8_t width, uint8_t height)
|
||||||
|
{
|
||||||
|
tp.x.start = X_START;
|
||||||
|
tp.x.end = X_END;
|
||||||
|
tp.x.range = width-1;
|
||||||
|
|
||||||
|
tp.y.start = Y_START;
|
||||||
|
tp.y.end = Y_END;
|
||||||
|
tp.y.range = height-1;
|
||||||
|
|
||||||
|
tp.is_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTouchRawValues(uint8_t x, uint8_t y)
|
||||||
|
{
|
||||||
|
tpd_map_touch_position(&(tp.x), x);
|
||||||
|
tpd_map_touch_position(&(tp.y), y);
|
||||||
|
|
||||||
|
tp.is_pressed = tp.x.is_pressed && tp.y.is_pressed;
|
||||||
|
if ( tp.x.is_update || tp.y.is_update )
|
||||||
|
tp.is_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t getTouchPos(uint8_t hiPin, uint8_t lowPin, uint8_t sensePin, uint8_t dcPin)
|
||||||
|
{
|
||||||
|
uint8_t val;
|
||||||
|
pinMode(dcPin, INPUT);
|
||||||
|
pinMode(sensePin, INPUT_PULLUP);
|
||||||
|
pinMode(hiPin, OUTPUT);
|
||||||
|
pinMode(lowPin, OUTPUT);
|
||||||
|
|
||||||
|
digitalWrite(hiPin, HIGH);
|
||||||
|
digitalWrite(lowPin, LOW);
|
||||||
|
delay(10);
|
||||||
|
val = analogRead(sensePin) >> 2;
|
||||||
|
pinMode(hiPin, INPUT);
|
||||||
|
pinMode(lowPin, INPUT);
|
||||||
|
delay(10);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateTouchPanel(void)
|
||||||
|
{
|
||||||
|
uint8_t tp_raw_x;
|
||||||
|
uint8_t tp_raw_y;
|
||||||
|
|
||||||
|
tp_raw_x = getTouchPos(tp_right, tp_left, tp_bottom, tp_top);
|
||||||
|
tp_raw_y = getTouchPos(tp_top, tp_bottom, tp_left, tp_right);
|
||||||
|
|
||||||
|
setTouchRawValues(tp_raw_x, tp_raw_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// graphics output and picture loop
|
||||||
|
|
||||||
|
void center(u8g_uint_t y, const char *str)
|
||||||
|
{
|
||||||
|
u8g_uint_t x;
|
||||||
|
x = u8g.getWidth();
|
||||||
|
x -= u8g.getStrWidth(str);
|
||||||
|
x /= 2;
|
||||||
|
u8g.drawStr(x, y, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void draw(void) {
|
||||||
|
u8g.setFont(u8g_font_6x10);
|
||||||
|
center( 10, "Touch Panel Setup");
|
||||||
|
u8g.setPrintPos(0, 20); u8g.print("x_start=");u8g.print((int)tp.x.start);u8g.print(" x_end=");u8g.print((int)tp.x.end);
|
||||||
|
u8g.setPrintPos(0, 30); u8g.print("y_start=");u8g.print((int)tp.y.start);u8g.print(" y_end=");u8g.print((int)tp.y.end);
|
||||||
|
u8g.setPrintPos(0, 40); u8g.print("x=");u8g.print((int)tp.x.raw);
|
||||||
|
u8g.setPrintPos(0, 50); u8g.print("y=");u8g.print((int)tp.y.raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void) {
|
||||||
|
|
||||||
|
// flip screen, if required
|
||||||
|
// u8g.setRot180();
|
||||||
|
u8g.setCursorFont(u8g_font_cursor);
|
||||||
|
u8g.setCursorStyle(32);
|
||||||
|
|
||||||
|
tp_Init(u8g.getWidth(), u8g.getHeight());
|
||||||
|
|
||||||
|
tp.is_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
|
||||||
|
// update touch panel and handle return values
|
||||||
|
updateTouchPanel();
|
||||||
|
|
||||||
|
if ( tp.is_pressed != 0 )
|
||||||
|
u8g.enableCursor();
|
||||||
|
else
|
||||||
|
u8g.disableCursor();
|
||||||
|
|
||||||
|
u8g.setCursorPos(tp.x.result, u8g.getHeight()-tp.y.result-1);
|
||||||
|
|
||||||
|
// picture loop
|
||||||
|
if ( tp.is_update != 0 )
|
||||||
|
{
|
||||||
|
tp.is_update = 0;
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
draw();
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,335 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Touch4WTest.pde
|
||||||
|
|
||||||
|
>>> Before compiling: Please remove comment from the constructor of the
|
||||||
|
>>> connected graphics display (see below).
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "U8glib.h"
|
||||||
|
|
||||||
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
|
||||||
|
//U8GLIB_ST7920_192X32_4X u8g(10); // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
|
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
//U8GLIB_LM6059 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_LM6063 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_BW u8g(10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
|
||||||
|
//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
|
||||||
|
//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
|
||||||
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// Setup 4-Wire Resistive Touch Panel
|
||||||
|
|
||||||
|
uint8_t tp_left = A3;
|
||||||
|
uint8_t tp_right = A5;
|
||||||
|
uint8_t tp_top = A4;
|
||||||
|
uint8_t tp_bottom = A2;
|
||||||
|
|
||||||
|
/* Run "Touch4WSetup" and enter values here */
|
||||||
|
#define X_START 64
|
||||||
|
#define X_END 200
|
||||||
|
#define Y_START 105
|
||||||
|
#define Y_END 160
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// Touch Panel Code
|
||||||
|
|
||||||
|
/* touch panel dimension */
|
||||||
|
struct tpd_struct
|
||||||
|
{
|
||||||
|
/* raw value */
|
||||||
|
uint8_t raw;
|
||||||
|
|
||||||
|
/* calibration values */
|
||||||
|
uint8_t start;
|
||||||
|
uint8_t end;
|
||||||
|
|
||||||
|
/* user values */
|
||||||
|
uint8_t range; /* result will have range fron 0..range (including the value of range) */
|
||||||
|
|
||||||
|
uint8_t result; /* output value: position [0...range] */
|
||||||
|
uint8_t is_pressed; /* output value: pressed (=1) or not pressed (=0) */
|
||||||
|
uint8_t is_update; /* will be set to 1 if result or is_pressed has been updated */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tp_struct
|
||||||
|
{
|
||||||
|
struct tpd_struct x;
|
||||||
|
struct tpd_struct y;
|
||||||
|
uint8_t is_pressed; /* combination of x.is_pressed && y.is_pressed */
|
||||||
|
uint8_t is_update;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tp_struct tp;
|
||||||
|
|
||||||
|
/* map raw value to 0...range (result) */
|
||||||
|
void tpd_map_touch_position(struct tpd_struct *d, uint8_t raw)
|
||||||
|
{
|
||||||
|
uint8_t is_pressed;
|
||||||
|
uint16_t p;
|
||||||
|
uint8_t start, end;
|
||||||
|
|
||||||
|
d->raw = raw;
|
||||||
|
|
||||||
|
start = d->start;
|
||||||
|
end = d->end;
|
||||||
|
|
||||||
|
/* check if position is within active area; store result in "is_pressed" */
|
||||||
|
is_pressed = 1;
|
||||||
|
if ( raw < start )
|
||||||
|
{
|
||||||
|
d->result = 0;
|
||||||
|
is_pressed = 0;
|
||||||
|
}
|
||||||
|
if ( raw >= end )
|
||||||
|
{
|
||||||
|
d->result = d->range;
|
||||||
|
is_pressed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* store "is_pressed" in the global structure, set update flag */
|
||||||
|
if ( d->is_pressed != is_pressed )
|
||||||
|
d->is_update = 1;
|
||||||
|
d->is_pressed = is_pressed;
|
||||||
|
|
||||||
|
/* map "raw" value into target range */
|
||||||
|
if ( is_pressed != 0 )
|
||||||
|
{
|
||||||
|
p = raw;
|
||||||
|
p -= start;
|
||||||
|
p *= d->range;
|
||||||
|
end -= start;
|
||||||
|
p /= end;
|
||||||
|
|
||||||
|
if ( d->result != p )
|
||||||
|
d->is_update = 1;
|
||||||
|
d->result = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tp_Init(uint8_t width, uint8_t height)
|
||||||
|
{
|
||||||
|
tp.x.start = X_START;
|
||||||
|
tp.x.end = X_END;
|
||||||
|
tp.x.range = width-1;
|
||||||
|
|
||||||
|
tp.y.start = Y_START;
|
||||||
|
tp.y.end = Y_END;
|
||||||
|
tp.y.range = height-1;
|
||||||
|
|
||||||
|
tp.is_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setTouchRawValues(uint8_t x, uint8_t y)
|
||||||
|
{
|
||||||
|
tpd_map_touch_position(&(tp.x), x);
|
||||||
|
tpd_map_touch_position(&(tp.y), y);
|
||||||
|
|
||||||
|
tp.is_pressed = tp.x.is_pressed && tp.y.is_pressed;
|
||||||
|
if ( tp.x.is_update || tp.y.is_update )
|
||||||
|
tp.is_update = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t getTouchPos(uint8_t hiPin, uint8_t lowPin, uint8_t sensePin, uint8_t dcPin)
|
||||||
|
{
|
||||||
|
uint8_t val;
|
||||||
|
pinMode(dcPin, INPUT);
|
||||||
|
pinMode(sensePin, INPUT_PULLUP);
|
||||||
|
pinMode(hiPin, OUTPUT);
|
||||||
|
pinMode(lowPin, OUTPUT);
|
||||||
|
|
||||||
|
digitalWrite(hiPin, HIGH);
|
||||||
|
digitalWrite(lowPin, LOW);
|
||||||
|
delay(10);
|
||||||
|
val = analogRead(sensePin) >> 2;
|
||||||
|
pinMode(hiPin, INPUT);
|
||||||
|
pinMode(lowPin, INPUT);
|
||||||
|
delay(10);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateTouchPanel(void)
|
||||||
|
{
|
||||||
|
uint8_t tp_raw_x;
|
||||||
|
uint8_t tp_raw_y;
|
||||||
|
|
||||||
|
tp_raw_x = getTouchPos(tp_right, tp_left, tp_bottom, tp_top);
|
||||||
|
tp_raw_y = getTouchPos(tp_top, tp_bottom, tp_left, tp_right);
|
||||||
|
|
||||||
|
setTouchRawValues(tp_raw_x, tp_raw_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// graphics output and picture loop
|
||||||
|
|
||||||
|
void center(u8g_uint_t y, const char *str)
|
||||||
|
{
|
||||||
|
u8g_uint_t x;
|
||||||
|
x = u8g.getWidth();
|
||||||
|
x -= u8g.getStrWidth(str);
|
||||||
|
x /= 2;
|
||||||
|
u8g.drawStr(x, y, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void draw(void) {
|
||||||
|
u8g.setFont(u8g_font_6x10);
|
||||||
|
center( 10, "Touch Panel Test");
|
||||||
|
if ( tp.is_pressed != 0 )
|
||||||
|
{
|
||||||
|
u8g.setPrintPos(0, 20); u8g.print("x=");u8g.print((int)tp.x.result);
|
||||||
|
u8g.setPrintPos(0, 30); u8g.print("y=");u8g.print((int)(u8g.getHeight()-tp.y.result-1));
|
||||||
|
//u8g.setPrintPos(0, 40); u8g.print("x: ");u8g.print((int)tp.x.start);u8g.print("..");u8g.print((int)tp.x.end);
|
||||||
|
//u8g.setPrintPos(0, 50); u8g.print("y: ");u8g.print((int)tp.y.start);u8g.print("..");u8g.print((int)tp.y.end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void) {
|
||||||
|
|
||||||
|
// flip screen, if required
|
||||||
|
// u8g.setRot180();
|
||||||
|
u8g.setCursorFont(u8g_font_cursor);
|
||||||
|
u8g.setCursorStyle(32);
|
||||||
|
|
||||||
|
tp_Init(u8g.getWidth(), u8g.getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
|
||||||
|
// update touch panel and handle return values
|
||||||
|
updateTouchPanel();
|
||||||
|
|
||||||
|
if ( tp.is_pressed != 0 )
|
||||||
|
u8g.enableCursor();
|
||||||
|
else
|
||||||
|
u8g.disableCursor();
|
||||||
|
|
||||||
|
u8g.setCursorPos(tp.x.result, u8g.getHeight()-tp.y.result-1);
|
||||||
|
|
||||||
|
// picture loop
|
||||||
|
if ( tp.is_update != 0 ) {
|
||||||
|
tp.is_update = 0;
|
||||||
|
u8g.firstPage();
|
||||||
|
do {
|
||||||
|
draw();
|
||||||
|
} while( u8g.nextPage() );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,20 +85,56 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
|
//#define MINI_LOGO
|
||||||
|
|
||||||
void drawColorBox(void)
|
void drawColorBox(void)
|
||||||
{
|
{
|
||||||
|
@ -117,6 +154,17 @@ void drawColorBox(void)
|
||||||
|
|
||||||
void drawLogo(uint8_t d)
|
void drawLogo(uint8_t d)
|
||||||
{
|
{
|
||||||
|
#ifdef MINI_LOGO
|
||||||
|
u8g.setFont(u8g_font_gdr17r);
|
||||||
|
u8g.drawStr(0+d, 22+d, "U");
|
||||||
|
u8g.setFont(u8g_font_gdr20n);
|
||||||
|
u8g.drawStr90(17+d,8+d,"8");
|
||||||
|
u8g.setFont(u8g_font_gdr17r);
|
||||||
|
u8g.drawStr(39+d,22+d,"g");
|
||||||
|
|
||||||
|
u8g.drawHLine(2+d, 25+d, 34);
|
||||||
|
u8g.drawVLine(32+d, 22+d, 12);
|
||||||
|
#else
|
||||||
u8g.setFont(u8g_font_gdr25r);
|
u8g.setFont(u8g_font_gdr25r);
|
||||||
u8g.drawStr(0+d, 30+d, "U");
|
u8g.drawStr(0+d, 30+d, "U");
|
||||||
u8g.setFont(u8g_font_gdr30n);
|
u8g.setFont(u8g_font_gdr30n);
|
||||||
|
@ -126,10 +174,12 @@ void drawLogo(uint8_t d)
|
||||||
|
|
||||||
u8g.drawHLine(2+d, 35+d, 47);
|
u8g.drawHLine(2+d, 35+d, 47);
|
||||||
u8g.drawVLine(45+d, 32+d, 12);
|
u8g.drawVLine(45+d, 32+d, 12);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawURL(void)
|
void drawURL(void)
|
||||||
{
|
{
|
||||||
|
#ifndef MINI_LOGO
|
||||||
u8g.setFont(u8g_font_4x6);
|
u8g.setFont(u8g_font_4x6);
|
||||||
if ( u8g.getHeight() < 59 )
|
if ( u8g.getHeight() < 59 )
|
||||||
{
|
{
|
||||||
|
@ -140,6 +190,7 @@ void drawURL(void)
|
||||||
{
|
{
|
||||||
u8g.drawStr(1,54,"code.google.com/p/u8glib");
|
u8g.drawStr(1,54,"code.google.com/p/u8glib");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
#include "U8glib.h"
|
#include "U8glib.h"
|
||||||
|
|
||||||
// setup u8g object, please remove comment from one of the following constructor calls
|
// setup u8g object, please remove comment from one of the following constructor calls
|
||||||
// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
|
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
|
||||||
|
// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device
|
||||||
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
@ -52,9 +52,10 @@
|
||||||
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGS102 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGS102 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM132 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_DOGM128 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_DOGM128_2X u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
|
||||||
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
|
||||||
|
@ -84,19 +85,54 @@
|
||||||
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 ); // 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
|
||||||
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
|
||||||
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||||||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||||||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||||||
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||||||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||||||
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||||||
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_T6963_128X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
|
||||||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||||||
|
|
||||||
#define u8g_logo_width 38
|
#define u8g_logo_width 38
|
||||||
#define u8g_logo_height 24
|
#define u8g_logo_height 24
|
|
@ -78,3 +78,4 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
- Castling: Need to check for fields under attack
|
- Castling: Need to check for fields under attack
|
||||||
--> done
|
--> done
|
||||||
|
|
||||||
- Check for WIN / LOSE situation, perhaps call ce_Eval() once on the top-level board setup
|
- Check for WIN / LOOSE situation, perhaps call ce_Eval() once on the top-level board setup
|
||||||
just after the real move
|
just after the real move
|
||||||
- cleanup cu_Move
|
- cleanup cu_Move
|
||||||
--> almost done
|
--> almost done
|
||||||
|
|
|
@ -36,8 +36,13 @@
|
||||||
#ifndef _U8G_H
|
#ifndef _U8G_H
|
||||||
#define _U8G_H
|
#define _U8G_H
|
||||||
|
|
||||||
|
/* uncomment the following line to support displays larger than 240x240 */
|
||||||
//#define U8G_16BIT 1
|
//#define U8G_16BIT 1
|
||||||
|
|
||||||
|
/* comment the following line to generate more compact but interrupt unsafe code */
|
||||||
|
#define U8G_INTERRUPT_SAFE 1
|
||||||
|
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#ifdef __18CXX
|
#ifdef __18CXX
|
||||||
|
@ -53,6 +58,15 @@ typedef signed short int16_t;
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
use the com interface directly on any systems which are not AVR or ARDUINO
|
||||||
|
*/
|
||||||
|
#if defined(__AVR__) || defined(ARDUINO)
|
||||||
|
#define U8G_WITH_PINLIST
|
||||||
|
#endif
|
||||||
|
#define U8G_WITH_PINLIST
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -60,17 +74,30 @@ extern "C" {
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define U8G_NOINLINE __attribute__((noinline))
|
# define U8G_NOINLINE __attribute__((noinline))
|
||||||
#define U8G_PURE __attribute__ ((pure))
|
# define U8G_PURE __attribute__ ((pure))
|
||||||
#define U8G_NOCOMMON __attribute__ ((nocommon))
|
# define U8G_NOCOMMON __attribute__ ((nocommon))
|
||||||
#define U8G_SECTION(name) __attribute__ ((section (name)))
|
# define U8G_SECTION(name) __attribute__ ((section (name)))
|
||||||
|
# if defined(__MSPGCC__)
|
||||||
|
/* mspgcc does not have .progmem sections. Use -fdata-sections. */
|
||||||
|
# define U8G_FONT_SECTION(name)
|
||||||
|
# endif
|
||||||
|
# if defined(__AVR__)
|
||||||
|
# define U8G_FONT_SECTION(name) U8G_SECTION(".progmem." name)
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
#define U8G_NOINLINE
|
# define U8G_NOINLINE
|
||||||
#define U8G_PURE
|
# define U8G_PURE
|
||||||
#define U8G_NOCOMMON
|
# define U8G_NOCOMMON
|
||||||
#define U8G_SECTION(name)
|
# define U8G_SECTION(name)
|
||||||
|
# define U8G_FONT_SECTION(name)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef U8G_FONT_SECTION
|
||||||
|
# define U8G_FONT_SECTION(name)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* flash memory access */
|
/* flash memory access */
|
||||||
|
|
||||||
|
@ -81,15 +108,41 @@ typedef uint8_t PROGMEM u8g_pgm_uint8_t;
|
||||||
typedef uint8_t u8g_fntpgm_uint8_t;
|
typedef uint8_t u8g_fntpgm_uint8_t;
|
||||||
#define u8g_pgm_read(adr) pgm_read_byte_near(adr)
|
#define u8g_pgm_read(adr) pgm_read_byte_near(adr)
|
||||||
#define U8G_PSTR(s) ((u8g_pgm_uint8_t *)PSTR(s))
|
#define U8G_PSTR(s) ((u8g_pgm_uint8_t *)PSTR(s))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define U8G_PROGMEM
|
#define U8G_PROGMEM
|
||||||
#define PROGMEM
|
#define PROGMEM
|
||||||
typedef uint8_t u8g_pgm_uint8_t;
|
typedef uint8_t u8g_pgm_uint8_t;
|
||||||
typedef uint8_t u8g_fntpgm_uint8_t;
|
typedef uint8_t u8g_fntpgm_uint8_t;
|
||||||
#define u8g_pgm_read(adr) (*(const u8g_pgm_uint8_t *)(adr))
|
#define u8g_pgm_read(adr) (*(const u8g_pgm_uint8_t *)(adr))
|
||||||
#define U8G_PSTR(s) ((u8g_pgm_uint8_t *)(s))
|
#define U8G_PSTR(s) ((u8g_pgm_uint8_t *)(s))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*===============================================================*/
|
||||||
|
/* interrupt safe code */
|
||||||
|
#if defined(U8G_INTERRUPT_SAFE)
|
||||||
|
# if defined(__AVR__)
|
||||||
|
extern uint8_t global_SREG_backup; /* u8g_state.c */
|
||||||
|
# define U8G_ATOMIC_START() do { global_SREG_backup = SREG; cli(); } while(0)
|
||||||
|
# define U8G_ATOMIC_END() SREG = global_SREG_backup
|
||||||
|
# define U8G_ATOMIC_OR(ptr, val) do { uint8_t tmpSREG = SREG; cli(); (*(ptr) |= (val)); SREG = tmpSREG; } while(0)
|
||||||
|
# define U8G_ATOMIC_AND(ptr, val) do { uint8_t tmpSREG = SREG; cli(); (*(ptr) &= (val)); SREG = tmpSREG; } while(0)
|
||||||
|
# else
|
||||||
|
# define U8G_ATOMIC_OR(ptr, val) (*(ptr) |= (val))
|
||||||
|
# define U8G_ATOMIC_AND(ptr, val) (*(ptr) &= (val))
|
||||||
|
# define U8G_ATOMIC_START()
|
||||||
|
# define U8G_ATOMIC_END()
|
||||||
|
# endif /* __AVR__ */
|
||||||
|
#else
|
||||||
|
# define U8G_ATOMIC_OR(ptr, val) (*(ptr) |= (val))
|
||||||
|
# define U8G_ATOMIC_AND(ptr, val) (*(ptr) &= (val))
|
||||||
|
# define U8G_ATOMIC_START()
|
||||||
|
# define U8G_ATOMIC_END()
|
||||||
|
#endif /* U8G_INTERRUPT_SAFE */
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* forward */
|
/* forward */
|
||||||
typedef struct _u8g_t u8g_t;
|
typedef struct _u8g_t u8g_t;
|
||||||
|
@ -98,6 +151,7 @@ typedef struct _u8g_dev_t u8g_dev_t;
|
||||||
typedef struct _u8g_dev_arg_pixel_t u8g_dev_arg_pixel_t;
|
typedef struct _u8g_dev_arg_pixel_t u8g_dev_arg_pixel_t;
|
||||||
typedef struct _u8g_dev_arg_bbx_t u8g_dev_arg_bbx_t;
|
typedef struct _u8g_dev_arg_bbx_t u8g_dev_arg_bbx_t;
|
||||||
typedef struct _u8g_box_t u8g_box_t;
|
typedef struct _u8g_box_t u8g_box_t;
|
||||||
|
typedef struct _u8g_dev_arg_irgb_t u8g_dev_arg_irgb_t;
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
|
@ -155,6 +209,8 @@ extern u8g_dev_t u8g_dev_sdl_1bit_h;
|
||||||
extern u8g_dev_t u8g_dev_sdl_2bit;
|
extern u8g_dev_t u8g_dev_sdl_2bit;
|
||||||
extern u8g_dev_t u8g_dev_sdl_2bit_double_mem;
|
extern u8g_dev_t u8g_dev_sdl_2bit_double_mem;
|
||||||
extern u8g_dev_t u8g_dev_sdl_8bit;
|
extern u8g_dev_t u8g_dev_sdl_8bit;
|
||||||
|
extern u8g_dev_t u8g_dev_sdl_hicolor;
|
||||||
|
extern u8g_dev_t u8g_dev_sdl_fullcolor;
|
||||||
int u8g_sdl_get_key(void);
|
int u8g_sdl_get_key(void);
|
||||||
|
|
||||||
/* Size: 70x30 monochrom, stdout */
|
/* Size: 70x30 monochrom, stdout */
|
||||||
|
@ -172,10 +228,16 @@ extern u8g_dev_t u8g_dev_gprof;
|
||||||
extern u8g_dev_t u8g_dev_uc1701_dogs102_sw_spi;
|
extern u8g_dev_t u8g_dev_uc1701_dogs102_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_uc1701_dogs102_hw_spi;
|
extern u8g_dev_t u8g_dev_uc1701_dogs102_hw_spi;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_uc1701_dogs102_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1701_dogs102_2x_hw_spi;
|
||||||
|
|
||||||
/* Display: Mini12864 (dealextreme), Size: 128x64 monochrom */
|
/* Display: Mini12864 (dealextreme), Size: 128x64 monochrom */
|
||||||
extern u8g_dev_t u8g_dev_uc1701_mini12864_sw_spi;
|
extern u8g_dev_t u8g_dev_uc1701_mini12864_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_uc1701_mini12864_hw_spi;
|
extern u8g_dev_t u8g_dev_uc1701_mini12864_hw_spi;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_uc1701_mini12864_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1701_mini12864_2x_hw_spi;
|
||||||
|
|
||||||
/* Display: EA DOGM132, Size: 128x32 monochrom */
|
/* Display: EA DOGM132, Size: 128x32 monochrom */
|
||||||
extern u8g_dev_t u8g_dev_st7565_dogm132_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_dogm132_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_dogm132_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_dogm132_hw_spi;
|
||||||
|
@ -183,31 +245,84 @@ extern u8g_dev_t u8g_dev_st7565_dogm132_hw_spi;
|
||||||
/* Display: EA DOGM128, Size: 128x64 monochrom */
|
/* Display: EA DOGM128, Size: 128x64 monochrom */
|
||||||
extern u8g_dev_t u8g_dev_st7565_dogm128_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_dogm128_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_dogm128_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_dogm128_hw_spi;
|
||||||
/* Display: Topway LM6063 128x64 */
|
extern u8g_dev_t u8g_dev_st7565_dogm128_parallel;
|
||||||
extern u8g_dev_t u8g_dev_st7565_lm6063_sw_spi;
|
|
||||||
extern u8g_dev_t u8g_dev_st7565_lm6063_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_dogm128_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_dogm128_2x_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_dogm128_2x_parallel;
|
||||||
|
|
||||||
|
/* EA DOGM 240-6 */
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogm240_i2c;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogm240_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogm240_sw_spi;
|
||||||
|
|
||||||
|
/* EA DOGXL 240 */
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogxl240_i2c;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogxl240_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1611_dogxl240_sw_spi;
|
||||||
|
|
||||||
/* Display: Topway LM6059 128x64 (Adafruit) */
|
/* Display: Topway LM6059 128x64 (Adafruit) */
|
||||||
extern u8g_dev_t u8g_dev_st7565_lm6059_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_lm6059_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_lm6059_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_lm6059_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6059_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6059_2x_hw_spi;
|
||||||
|
/* Display: Topway LM6063 128x64 */
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6063_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6063_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6063_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_lm6063_2x_hw_spi;
|
||||||
/* Display: Newhaven NHD-C12864 */
|
/* Display: Newhaven NHD-C12864 */
|
||||||
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_hw_spi;
|
||||||
|
|
||||||
/* Display: Newhaven NHD-C12832 */
|
/* Display: Newhaven NHD-C12832 */
|
||||||
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_parallel;
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_parallel;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_nhd_c12832_hw_usart_spi;
|
||||||
|
|
||||||
/* Display: Displaytech 64128N */
|
/* Display: Displaytech 64128N */
|
||||||
extern u8g_dev_t u8g_dev_st7565_64128n_sw_spi;
|
extern u8g_dev_t u8g_dev_st7565_64128n_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7565_64128n_hw_spi;
|
extern u8g_dev_t u8g_dev_st7565_64128n_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_64128n_parallel;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_64128n_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_64128n_2x_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_st7565_64128n_2x_parallel;
|
||||||
|
|
||||||
|
/* Display: LCD-AG-C128032R-DIW W/KK E6 PBF */
|
||||||
|
extern u8g_dev_t u8g_dev_uc1601_c128032_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1601_c128032_hw_spi;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_uc1601_c128032_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1601_c128032_2x_hw_spi;
|
||||||
|
|
||||||
|
/* East Rising/buy-display.com ERC24064-1 */
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x64_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x64_hw_spi;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x64_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x64_2x_hw_spi;
|
||||||
|
|
||||||
|
/* UC1608 240x128 */
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x128_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x128_hw_spi;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x128_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_uc1608_240x128_2x_hw_spi;
|
||||||
|
|
||||||
/* dfrobot 128x64 Graphic LCD (SKU:FIT0021) */
|
/* dfrobot 128x64 Graphic LCD (SKU:FIT0021) */
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_sw_spi;
|
extern u8g_dev_t u8g_dev_st7920_128x64_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_hw_spi;
|
extern u8g_dev_t u8g_dev_st7920_128x64_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_8bit;
|
extern u8g_dev_t u8g_dev_st7920_128x64_8bit;
|
||||||
|
extern u8g_dev_t u8g_dev_st7920_128x64_custom;
|
||||||
|
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_4x_sw_spi;
|
extern u8g_dev_t u8g_dev_st7920_128x64_4x_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_4x_hw_spi;
|
extern u8g_dev_t u8g_dev_st7920_128x64_4x_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7920_128x64_4x_8bit;
|
extern u8g_dev_t u8g_dev_st7920_128x64_4x_8bit;
|
||||||
|
extern u8g_dev_t u8g_dev_st7920_128x64_4x_custom;
|
||||||
|
|
||||||
/* NHD-19232WG */
|
/* NHD-19232WG */
|
||||||
extern u8g_dev_t u8g_dev_st7920_192x32_sw_spi;
|
extern u8g_dev_t u8g_dev_st7920_192x32_sw_spi;
|
||||||
|
@ -238,6 +353,7 @@ extern u8g_dev_t u8g_dev_lc7981_320x64_8bit;
|
||||||
|
|
||||||
/* T6963, all t6963 devices have double page (2x) */
|
/* T6963, all t6963 devices have double page (2x) */
|
||||||
extern u8g_dev_t u8g_dev_t6963_240x128_8bit;
|
extern u8g_dev_t u8g_dev_t6963_240x128_8bit;
|
||||||
|
extern u8g_dev_t u8g_dev_t6963_128x128_8bit;
|
||||||
extern u8g_dev_t u8g_dev_t6963_240x64_8bit;
|
extern u8g_dev_t u8g_dev_t6963_240x64_8bit;
|
||||||
extern u8g_dev_t u8g_dev_t6963_128x64_8bit;
|
extern u8g_dev_t u8g_dev_t6963_128x64_8bit;
|
||||||
|
|
||||||
|
@ -258,10 +374,12 @@ extern u8g_dev_t u8g_dev_ks0108_128x64_fast; /* faster, but uses private tabl
|
||||||
|
|
||||||
/* Nokia 84x48 Display with PCD8544 */
|
/* Nokia 84x48 Display with PCD8544 */
|
||||||
extern u8g_dev_t u8g_dev_pcd8544_84x48_sw_spi;
|
extern u8g_dev_t u8g_dev_pcd8544_84x48_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_pcd8544_84x48_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_tls8204_84x48_sw_spi;
|
extern u8g_dev_t u8g_dev_tls8204_84x48_sw_spi;
|
||||||
|
|
||||||
/* Nokia 96x65 Display with PCF8812 */
|
/* Nokia 96x65 Display with PCF8812 */
|
||||||
extern u8g_dev_t u8g_dev_pcf8812_96x65_sw_spi;
|
extern u8g_dev_t u8g_dev_pcf8812_96x65_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_pcf8812_96x65_hw_spi;
|
||||||
|
|
||||||
/* NHD-2.7-12864UCY3 OLED Display with SSD1325 Controller */
|
/* NHD-2.7-12864UCY3 OLED Display with SSD1325 Controller */
|
||||||
extern u8g_dev_t u8g_dev_ssd1325_nhd27oled_bw_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1325_nhd27oled_bw_sw_spi;
|
||||||
|
@ -288,11 +406,13 @@ extern u8g_dev_t u8g_dev_ssd1327_96x96_2x_gr_i2c;
|
||||||
/* NHD-3.12-25664 OLED Display with SSD1322 Controller */
|
/* NHD-3.12-25664 OLED Display with SSD1322 Controller */
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_bw_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_bw_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_bw_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_bw_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_bw_parallel;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_hw_spi;
|
||||||
|
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_gr_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_gr_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_gr_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_gr_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_gr_parallel;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_hw_spi;
|
||||||
|
|
||||||
|
@ -301,6 +421,23 @@ extern u8g_dev_t u8g_dev_ssd1306_128x64_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1306_128x64_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1306_128x64_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1306_128x64_i2c;
|
extern u8g_dev_t u8g_dev_ssd1306_128x64_i2c;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_adafruit_128x64_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_adafruit_128x64_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_adafruit_128x64_i2c;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x64_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x64_2x_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x64_2x_i2c;
|
||||||
|
|
||||||
|
/* OLED 128x64 Display with SH1106 Controller */
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_i2c;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_2x_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_sh1106_128x64_2x_i2c;
|
||||||
|
|
||||||
/* OLED 128x64 Display with SSD1309 Controller */
|
/* OLED 128x64 Display with SSD1309 Controller */
|
||||||
extern u8g_dev_t u8g_dev_ssd1309_128x64_sw_spi;
|
extern u8g_dev_t u8g_dev_ssd1309_128x64_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1309_128x64_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1309_128x64_hw_spi;
|
||||||
|
@ -311,6 +448,15 @@ extern u8g_dev_t u8g_dev_ssd1306_128x32_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1306_128x32_hw_spi;
|
extern u8g_dev_t u8g_dev_ssd1306_128x32_hw_spi;
|
||||||
extern u8g_dev_t u8g_dev_ssd1306_128x32_i2c;
|
extern u8g_dev_t u8g_dev_ssd1306_128x32_i2c;
|
||||||
|
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x32_2x_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x32_2x_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1306_128x32_2x_i2c;
|
||||||
|
|
||||||
|
/* OLED 60x32 Display with LD7032 Controller */
|
||||||
|
extern u8g_dev_t u8g_dev_ld7032_60x32_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ld7032_60x32_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ld7032_60x32_parallel;
|
||||||
|
|
||||||
/* experimental 65K TFT with st7687 controller */
|
/* experimental 65K TFT with st7687 controller */
|
||||||
extern u8g_dev_t u8g_dev_st7687_c144mvgd_sw_spi;
|
extern u8g_dev_t u8g_dev_st7687_c144mvgd_sw_spi;
|
||||||
extern u8g_dev_t u8g_dev_st7687_c144mvgd_8bit;
|
extern u8g_dev_t u8g_dev_st7687_c144mvgd_8bit;
|
||||||
|
@ -325,6 +471,38 @@ void u8g_SetFlipDiscCallback(u8g_t *u8g, void (*cb)(uint8_t id, uint8_t page, ui
|
||||||
/* ILI9325D based TFT */
|
/* ILI9325D based TFT */
|
||||||
extern u8g_dev_t u8g_dev_ili9325d_320x240_8bit;
|
extern u8g_dev_t u8g_dev_ili9325d_320x240_8bit;
|
||||||
|
|
||||||
|
|
||||||
|
/* SSD1351 OLED (breakout board from http://www.kickstarter.com/projects/ilsoftltd/colour-oled-breakout-board) */
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_332_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_332_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_4x_332_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_4x_332_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_idx_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_idx_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_hicolor_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_hicolor_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_4x_hicolor_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128_4x_hicolor_hw_spi;
|
||||||
|
|
||||||
|
/* SSD1351 OLED (Freetronics, GPIOs set to high level) */
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_332_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_332_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_332_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_332_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_hicolor_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_hicolor_hw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_hicolor_sw_spi;
|
||||||
|
extern u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_hicolor_hw_spi;
|
||||||
|
|
||||||
|
/* HT1632 */
|
||||||
|
extern u8g_dev_t u8g_dev_ht1632_24x16;
|
||||||
|
|
||||||
|
/* A2 Micro Printer */
|
||||||
|
extern u8g_dev_t u8g_dev_a2_micro_printer_384x240;
|
||||||
|
extern u8g_dev_t u8g_dev_a2_micro_printer_192x120_ds;
|
||||||
|
extern u8g_dev_t u8g_dev_a2_micro_printer_192x360_ds;
|
||||||
|
extern u8g_dev_t u8g_dev_a2_micro_printer_192x720_ds;
|
||||||
|
|
||||||
/* u8g_virtual_screen.c */
|
/* u8g_virtual_screen.c */
|
||||||
extern u8g_dev_t u8g_dev_vs;
|
extern u8g_dev_t u8g_dev_vs;
|
||||||
|
|
||||||
|
@ -335,12 +513,17 @@ extern u8g_dev_t u8g_dev_vs;
|
||||||
struct _u8g_dev_arg_pixel_t
|
struct _u8g_dev_arg_pixel_t
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y; /* will be modified */
|
u8g_uint_t x, y; /* will be modified */
|
||||||
uint8_t pixel; /* will be modified */
|
uint8_t pixel; /* will be modified, pixel sequence or transparency value */
|
||||||
uint8_t dir;
|
uint8_t dir;
|
||||||
uint8_t color;
|
uint8_t color; /* color or index value, red value for true color mode */
|
||||||
|
uint8_t hi_color; /* high byte for 64K color mode, low byte is in "color", green value for true color mode */
|
||||||
|
uint8_t blue; /* blue value in true color mode */
|
||||||
};
|
};
|
||||||
/* typedef struct _u8g_dev_arg_pixel_t u8g_dev_arg_pixel_t; */ /* forward decl */
|
/* typedef struct _u8g_dev_arg_pixel_t u8g_dev_arg_pixel_t; */ /* forward decl */
|
||||||
|
|
||||||
|
/* range for r,g,b: 0..255 */
|
||||||
|
#define U8G_GET_HICOLOR_BY_RGB(r,g,b) (((uint16_t)((r)&0x0f8))<<8)|(((uint16_t)((g)&0x0fc))<<3)|(((uint16_t)((b)>>3)))
|
||||||
|
|
||||||
struct _u8g_dev_arg_bbx_t
|
struct _u8g_dev_arg_bbx_t
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y, w, h;
|
u8g_uint_t x, y, w, h;
|
||||||
|
@ -353,6 +536,13 @@ struct _u8g_box_t
|
||||||
};
|
};
|
||||||
/* typedef struct _u8g_box_t u8g_box_t; */ /* forward decl */
|
/* typedef struct _u8g_box_t u8g_box_t; */ /* forward decl */
|
||||||
|
|
||||||
|
struct _u8g_dev_arg_irgb_t
|
||||||
|
{
|
||||||
|
u8g_uint_t idx, r, g, b; /* index with rgb value */
|
||||||
|
};
|
||||||
|
/* typedef struct _u8g_dev_arg_irgb_t u8g_dev_arg_irgb_t; */ /* forward decl */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define U8G_DEV_MSG_INIT 10
|
#define U8G_DEV_MSG_INIT 10
|
||||||
#define U8G_DEV_MSG_STOP 11
|
#define U8G_DEV_MSG_STOP 11
|
||||||
|
@ -379,10 +569,13 @@ struct _u8g_box_t
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* arg: u8g_dev_arg_pixel_t * */
|
/* arg: u8g_dev_arg_pixel_t * */
|
||||||
|
#define U8G_DEV_MSG_SET_TPIXEL 44
|
||||||
|
#define U8G_DEV_MSG_SET_4TPIXEL 45
|
||||||
|
|
||||||
#define U8G_DEV_MSG_SET_PIXEL 50
|
#define U8G_DEV_MSG_SET_PIXEL 50
|
||||||
#define U8G_DEV_MSG_SET_8PIXEL 59
|
#define U8G_DEV_MSG_SET_8PIXEL 59
|
||||||
|
|
||||||
#define U8G_DEV_MSG_SET_COLOR_INDEX 60
|
#define U8G_DEV_MSG_SET_COLOR_ENTRY 60
|
||||||
|
|
||||||
#define U8G_DEV_MSG_SET_XY_CB 61
|
#define U8G_DEV_MSG_SET_XY_CB 61
|
||||||
|
|
||||||
|
@ -392,15 +585,22 @@ struct _u8g_box_t
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* device modes */
|
/* device modes */
|
||||||
#define U8G_MODE(is_color, bits_per_pixel) (((is_color)<<4)|(bits_per_pixel))
|
#define U8G_MODE(is_index_mode, is_color, bits_per_pixel) (((is_index_mode)<<6) | ((is_color)<<5)|(bits_per_pixel))
|
||||||
|
|
||||||
#define U8G_MODE_UNKNOWN 0
|
#define U8G_MODE_UNKNOWN 0
|
||||||
#define U8G_MODE_BW U8G_MODE(0, 1)
|
#define U8G_MODE_BW U8G_MODE(0, 0, 1)
|
||||||
#define U8G_MODE_GRAY2BIT U8G_MODE(0, 2)
|
#define U8G_MODE_GRAY2BIT U8G_MODE(0, 0, 2)
|
||||||
#define U8G_MODE_R3G3B2 U8G_MODE(1, 8)
|
#define U8G_MODE_R3G3B2 U8G_MODE(0, 1, 8)
|
||||||
|
#define U8G_MODE_INDEX U8G_MODE(1, 1, 8)
|
||||||
|
/* hicolor is R5G6B5 */
|
||||||
|
#define U8G_MODE_HICOLOR U8G_MODE(0, 1, 16)
|
||||||
|
/* truecolor */
|
||||||
|
#define U8G_MODE_TRUECOLOR U8G_MODE(0, 1, 24)
|
||||||
|
|
||||||
#define U8G_MODE_GET_BITS_PER_PIXEL(mode) ((mode)&15)
|
|
||||||
#define U8G_MODE_IS_COLOR(mode) (((mode)&16)==0?0:1)
|
#define U8G_MODE_GET_BITS_PER_PIXEL(mode) ((mode)&31)
|
||||||
|
#define U8G_MODE_IS_COLOR(mode) (((mode)&32)==0?0:1)
|
||||||
|
#define U8G_MODE_IS_INDEX_MODE(mode) (((mode)&64)==0?0:1)
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
|
@ -429,15 +629,19 @@ struct _u8g_box_t
|
||||||
/* com driver */
|
/* com driver */
|
||||||
uint8_t u8g_com_null_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_null.c */
|
uint8_t u8g_com_null_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_null.c */
|
||||||
uint8_t u8g_com_arduino_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_std_sw_spi.c */
|
uint8_t u8g_com_arduino_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_std_sw_spi.c */
|
||||||
|
uint8_t u8g_com_arduino_hw_usart_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_atmega_hw_usart_spi.c */
|
||||||
uint8_t u8g_com_arduino_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_sw_spi.c */
|
uint8_t u8g_com_arduino_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_sw_spi.c */
|
||||||
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_hw_spi.c */
|
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_hw_spi.c */
|
||||||
|
uint8_t u8g_com_arduino_ATtiny85_std_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_arduino_ATTiny85_std_hw_spi.c */
|
||||||
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_st7920_spi.c */
|
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_st7920_spi.c */
|
||||||
|
uint8_t u8g_com_arduino_st7920_custom_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_st7920_custom.c */
|
||||||
uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_st7920_hw_spi.c */
|
uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_st7920_hw_spi.c */
|
||||||
uint8_t u8g_com_arduino_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_parallel.c */
|
uint8_t u8g_com_arduino_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_parallel.c */
|
||||||
uint8_t u8g_com_arduino_fast_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_fast_parallel.c */
|
uint8_t u8g_com_arduino_fast_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_fast_parallel.c */
|
||||||
uint8_t u8g_com_arduino_port_d_wr_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_port_d_wr.c */
|
uint8_t u8g_com_arduino_port_d_wr_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_port_d_wr.c */
|
||||||
uint8_t u8g_com_arduino_no_en_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_no_en_parallel.c */
|
uint8_t u8g_com_arduino_no_en_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_no_en_parallel.c */
|
||||||
uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_ssd_i2c.c */
|
uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_ssd_i2c.c */
|
||||||
|
uint8_t u8g_com_arduino_uc_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
uint8_t u8g_com_arduino_t6963_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_t6963.c */
|
uint8_t u8g_com_arduino_t6963_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_arduino_t6963.c */
|
||||||
|
|
||||||
|
|
||||||
|
@ -447,6 +651,9 @@ uint8_t u8g_com_atmega_st7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val
|
||||||
uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
uint8_t u8g_com_atmega_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_atmega_parallel.c */
|
uint8_t u8g_com_atmega_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_atmega_parallel.c */
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_rasperrypi_hw_spi.c */
|
||||||
|
uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); /* u8g_com_raspberrypi_ssd_i2c.c */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Translation of system specific com drives to generic com names
|
Translation of system specific com drives to generic com names
|
||||||
|
@ -457,18 +664,44 @@ uint8_t u8g_com_atmega_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, voi
|
||||||
U8G_COM_T6963
|
U8G_COM_T6963
|
||||||
U8G_COM_FAST_PARALLEL
|
U8G_COM_FAST_PARALLEL
|
||||||
U8G_COM_SSD_I2C
|
U8G_COM_SSD_I2C
|
||||||
|
U8G_COM_UC_I2C
|
||||||
|
|
||||||
defined(__18CXX) || defined(__PIC32MX)
|
defined(__18CXX) || defined(__PIC32MX)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* ==== HW SPI, Raspberry PI ====*/
|
||||||
|
#if defined(U8G_RASPBERRY_PI)
|
||||||
|
#define U8G_COM_HW_SPI u8g_com_raspberrypi_hw_spi_fn
|
||||||
|
#define U8G_COM_SW_SPI u8g_com_null_fn
|
||||||
|
|
||||||
|
/* I'm sure there must be some mad reason for needing this */
|
||||||
|
#define U8G_COM_ST7920_SW_SPI u8g_com_null_fn
|
||||||
|
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ==== HW SPI, Arduino ====*/
|
/* ==== HW SPI, Arduino ====*/
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
|
|
||||||
|
#if defined(__AVR_ATtiny85__)
|
||||||
|
#define U8G_COM_HW_SPI u8g_com_arduino_ATtiny85_std_hw_spi_fn
|
||||||
|
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
||||||
|
#else
|
||||||
|
|
||||||
#define U8G_COM_HW_SPI u8g_com_arduino_hw_spi_fn
|
#define U8G_COM_HW_SPI u8g_com_arduino_hw_spi_fn
|
||||||
|
#if defined(__AVR_ATmega32U4__)
|
||||||
|
#define U8G_COM_HW_USART_SPI u8g_com_arduino_hw_usart_spi_fn
|
||||||
|
#endif /* __AVR_ATmega32U4__ */
|
||||||
#define U8G_COM_ST7920_HW_SPI u8g_com_arduino_st7920_hw_spi_fn
|
#define U8G_COM_ST7920_HW_SPI u8g_com_arduino_st7920_hw_spi_fn
|
||||||
|
#endif /* __AVR_ATtiny85__ */
|
||||||
|
|
||||||
#elif defined(__18CXX) || defined(__PIC32MX)
|
#elif defined(__18CXX) || defined(__PIC32MX)
|
||||||
#define U8G_COM_HW_SPI u8g_com_null_fn
|
#define U8G_COM_HW_SPI u8g_com_null_fn
|
||||||
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
||||||
|
#elif defined(__SAM3X8E__) /* Arduino Due */
|
||||||
|
#define U8G_COM_HW_SPI u8g_com_arduino_hw_spi_fn
|
||||||
|
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* ==== HW SPI, not Arduino ====*/
|
/* ==== HW SPI, not Arduino ====*/
|
||||||
|
@ -482,6 +715,10 @@ defined(__18CXX) || defined(__PIC32MX)
|
||||||
#define U8G_COM_HW_SPI u8g_com_null_fn
|
#define U8G_COM_HW_SPI u8g_com_null_fn
|
||||||
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
#define U8G_COM_ST7920_HW_SPI u8g_com_null_fn
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef U8G_COM_HW_USART_SPI
|
||||||
|
#define U8G_COM_HW_USART_SPI u8g_com_null_fn
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* ==== SW SPI, Arduino ====*/
|
/* ==== SW SPI, Arduino ====*/
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
|
@ -491,7 +728,11 @@ defined(__18CXX) || defined(__PIC32MX)
|
||||||
#elif defined(__18CXX) || defined(__PIC32MX)
|
#elif defined(__18CXX) || defined(__PIC32MX)
|
||||||
#define U8G_COM_SW_SPI u8g_com_arduino_sw_spi_fn
|
#define U8G_COM_SW_SPI u8g_com_arduino_sw_spi_fn
|
||||||
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn
|
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn
|
||||||
#elif defined(__arm__) /* Arduino Due */
|
#elif defined(__SAM3X8E__) /* Arduino Due */
|
||||||
|
//#define U8G_COM_SW_SPI u8g_com_arduino_std_sw_spi_fn
|
||||||
|
#define U8G_COM_SW_SPI u8g_com_arduino_sw_spi_fn
|
||||||
|
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn
|
||||||
|
#elif defined(__arm__) /* Teensy */
|
||||||
#define U8G_COM_SW_SPI u8g_com_arduino_std_sw_spi_fn
|
#define U8G_COM_SW_SPI u8g_com_arduino_std_sw_spi_fn
|
||||||
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn
|
#define U8G_COM_ST7920_SW_SPI u8g_com_arduino_st7920_spi_fn
|
||||||
#endif
|
#endif
|
||||||
|
@ -509,7 +750,7 @@ defined(__18CXX) || defined(__PIC32MX)
|
||||||
#define U8G_COM_ST7920_SW_SPI u8g_com_null_fn
|
#define U8G_COM_ST7920_SW_SPI u8g_com_null_fn
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ==== Parallel iinterface, Arduino ====*/
|
/* ==== Parallel interface, Arduino ====*/
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
#define U8G_COM_PARALLEL u8g_com_arduino_parallel_fn
|
#define U8G_COM_PARALLEL u8g_com_arduino_parallel_fn
|
||||||
|
@ -537,24 +778,47 @@ defined(__18CXX) || defined(__PIC32MX)
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
#define U8G_COM_SSD_I2C u8g_com_arduino_ssd_i2c_fn
|
#define U8G_COM_SSD_I2C u8g_com_arduino_ssd_i2c_fn
|
||||||
|
#define U8G_COM_UC_I2C u8g_com_arduino_uc_i2c_fn
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef U8G_COM_SSD_I2C
|
#ifndef U8G_COM_SSD_I2C
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__) || defined(__SAM3X8E__)
|
||||||
/* AVR variant can use the arduino version at the moment */
|
/* AVR variant and also DUE can use the arduino version at the moment */
|
||||||
#define U8G_COM_SSD_I2C u8g_com_arduino_ssd_i2c_fn
|
#define U8G_COM_SSD_I2C u8g_com_arduino_ssd_i2c_fn
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef U8G_COM_SSD_I2C
|
||||||
|
#if defined(U8G_RASPBERRY_PI)
|
||||||
|
#define U8G_COM_SSD_I2C u8g_com_raspberrypi_ssd_i2c_fn
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef U8G_COM_SSD_I2C
|
#ifndef U8G_COM_SSD_I2C
|
||||||
#define U8G_COM_SSD_I2C u8g_com_null_fn
|
#define U8G_COM_SSD_I2C u8g_com_null_fn
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef U8G_COM_UC_I2C
|
||||||
|
#if defined(__AVR__)
|
||||||
|
/* AVR variant can use the arduino version at the moment */
|
||||||
|
#define U8G_COM_UC_I2C u8g_com_arduino_uc_i2c_fn
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifndef U8G_COM_UC_I2C
|
||||||
|
#define U8G_COM_UC_I2C u8g_com_null_fn
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* com api */
|
/* com api */
|
||||||
uint8_t u8g_InitCom(u8g_t *u8g, u8g_dev_t *dev);
|
|
||||||
|
#define U8G_SPI_CLK_CYCLE_50NS 1
|
||||||
|
#define U8G_SPI_CLK_CYCLE_300NS 2
|
||||||
|
#define U8G_SPI_CLK_CYCLE_400NS 3
|
||||||
|
#define U8G_SPI_CLK_CYCLE_NONE 255
|
||||||
|
|
||||||
|
uint8_t u8g_InitCom(u8g_t *u8g, u8g_dev_t *dev, uint8_t clk_cycle_time);
|
||||||
void u8g_StopCom(u8g_t *u8g, u8g_dev_t *dev);
|
void u8g_StopCom(u8g_t *u8g, u8g_dev_t *dev);
|
||||||
void u8g_EnableCom(u8g_t *u8g, u8g_dev_t *dev); /* obsolete */
|
void u8g_EnableCom(u8g_t *u8g, u8g_dev_t *dev); /* obsolete */
|
||||||
void u8g_DisableCom(u8g_t *u8g, u8g_dev_t *dev); /* obsolete */
|
void u8g_DisableCom(u8g_t *u8g, u8g_dev_t *dev); /* obsolete */
|
||||||
|
@ -711,6 +975,11 @@ uint8_t u8g_dev_pb8h1f_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
/* u8g_pb8h8.c */
|
/* u8g_pb8h8.c */
|
||||||
uint8_t u8g_dev_pb8h8_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
uint8_t u8g_dev_pb8h8_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
|
|
||||||
|
/* u8g_pbxh16.c */
|
||||||
|
uint8_t u8g_dev_pbxh16_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
|
|
||||||
|
/* u8g_pbxh24.c */
|
||||||
|
uint8_t u8g_dev_pbxh24_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
|
@ -772,6 +1041,7 @@ typedef void (*u8g_state_cb)(uint8_t msg);
|
||||||
#define U8G_PIN_LIST_LEN 14
|
#define U8G_PIN_LIST_LEN 14
|
||||||
|
|
||||||
|
|
||||||
|
#define U8G_PIN_DUMMY 254
|
||||||
#define U8G_PIN_NONE 255
|
#define U8G_PIN_NONE 255
|
||||||
|
|
||||||
#define U8G_FONT_HEIGHT_MODE_TEXT 0
|
#define U8G_FONT_HEIGHT_MODE_TEXT 0
|
||||||
|
@ -810,7 +1080,9 @@ struct _u8g_t
|
||||||
u8g_dev_arg_pixel_t arg_pixel;
|
u8g_dev_arg_pixel_t arg_pixel;
|
||||||
/* uint8_t color_index; */
|
/* uint8_t color_index; */
|
||||||
|
|
||||||
|
#ifdef U8G_WITH_PINLIST
|
||||||
uint8_t pin_list[U8G_PIN_LIST_LEN];
|
uint8_t pin_list[U8G_PIN_LIST_LEN];
|
||||||
|
#endif
|
||||||
|
|
||||||
u8g_state_cb state_cb;
|
u8g_state_cb state_cb;
|
||||||
|
|
||||||
|
@ -830,6 +1102,7 @@ uint8_t u8g_NextPageLL(u8g_t *u8g, u8g_dev_t *dev);
|
||||||
uint8_t u8g_SetContrastLL(u8g_t *u8g, u8g_dev_t *dev, uint8_t contrast);
|
uint8_t u8g_SetContrastLL(u8g_t *u8g, u8g_dev_t *dev, uint8_t contrast);
|
||||||
void u8g_DrawPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y);
|
void u8g_DrawPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y);
|
||||||
void u8g_Draw8PixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
void u8g_Draw8PixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
||||||
|
void u8g_Draw4TPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
||||||
uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h); /* obsolete */
|
uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h); /* obsolete */
|
||||||
u8g_uint_t u8g_GetWidthLL(u8g_t *u8g, u8g_dev_t *dev);
|
u8g_uint_t u8g_GetWidthLL(u8g_t *u8g, u8g_dev_t *dev);
|
||||||
u8g_uint_t u8g_GetHeightLL(u8g_t *u8g, u8g_dev_t *dev);
|
u8g_uint_t u8g_GetHeightLL(u8g_t *u8g, u8g_dev_t *dev);
|
||||||
|
@ -837,6 +1110,7 @@ u8g_uint_t u8g_GetHeightLL(u8g_t *u8g, u8g_dev_t *dev);
|
||||||
void u8g_UpdateDimension(u8g_t *u8g);
|
void u8g_UpdateDimension(u8g_t *u8g);
|
||||||
uint8_t u8g_Begin(u8g_t *u8g); /* reset device, put it into default state and call u8g_UpdateDimension() */
|
uint8_t u8g_Begin(u8g_t *u8g); /* reset device, put it into default state and call u8g_UpdateDimension() */
|
||||||
uint8_t u8g_Init(u8g_t *u8g, u8g_dev_t *dev); /* only usefull if the device only as hardcoded ports */
|
uint8_t u8g_Init(u8g_t *u8g, u8g_dev_t *dev); /* only usefull if the device only as hardcoded ports */
|
||||||
|
uint8_t u8g_InitComFn(u8g_t *u8g, u8g_dev_t *dev, u8g_com_fnptr com_fn); /* Init procedure for anything which is not Arduino or AVR (e.g. ARM, but not Due, which is Arduino) */
|
||||||
uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset);
|
uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset);
|
||||||
uint8_t u8g_InitHWSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset);
|
uint8_t u8g_InitHWSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset);
|
||||||
uint8_t u8g_InitI2C(u8g_t *u8g, u8g_dev_t *dev, uint8_t options); /* use U8G_I2C_OPT_NONE as options */
|
uint8_t u8g_InitI2C(u8g_t *u8g, u8g_dev_t *dev, uint8_t options); /* use U8G_I2C_OPT_NONE as options */
|
||||||
|
@ -852,9 +1126,14 @@ void u8g_SleepOn(u8g_t *u8g);
|
||||||
void u8g_SleepOff(u8g_t *u8g);
|
void u8g_SleepOff(u8g_t *u8g);
|
||||||
void u8g_DrawPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y);
|
void u8g_DrawPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y);
|
||||||
void u8g_Draw8Pixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
void u8g_Draw8Pixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
||||||
|
void u8g_Draw4TPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel);
|
||||||
|
|
||||||
uint8_t u8g_Stop(u8g_t *u8g);
|
uint8_t u8g_Stop(u8g_t *u8g);
|
||||||
|
void u8g_SetColorEntry(u8g_t *u8g, uint8_t idx, uint8_t r, uint8_t g, uint8_t b);
|
||||||
void u8g_SetColorIndex(u8g_t *u8g, uint8_t idx);
|
void u8g_SetColorIndex(u8g_t *u8g, uint8_t idx);
|
||||||
|
void u8g_SetHiColor(u8g_t *u8g, uint16_t rgb);
|
||||||
|
void u8g_SetHiColorByRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b);
|
||||||
|
void u8g_SetRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b);
|
||||||
uint8_t u8g_GetColorIndex(u8g_t *u8g);
|
uint8_t u8g_GetColorIndex(u8g_t *u8g);
|
||||||
|
|
||||||
uint8_t u8g_GetDefaultForegroundColor(u8g_t *u8g);
|
uint8_t u8g_GetDefaultForegroundColor(u8g_t *u8g);
|
||||||
|
@ -892,7 +1171,9 @@ void u8g_SetDefaultMidColor(u8g_t *u8g);
|
||||||
|
|
||||||
|
|
||||||
void u8g_state_dummy_cb(uint8_t msg);
|
void u8g_state_dummy_cb(uint8_t msg);
|
||||||
void u8g_backup_avr_spi(uint8_t msg); /* backup SPI state on atmel avr controller */
|
void u8g_backup_spi(uint8_t msg); /* backup SPI state controller */
|
||||||
|
/* backward compatible definition */
|
||||||
|
#define u8g_backup_avr_spi u8g_backup_spi
|
||||||
|
|
||||||
void u8g_SetHardwareBackup(u8g_t *u8g, u8g_state_cb backup_cb);
|
void u8g_SetHardwareBackup(u8g_t *u8g, u8g_state_cb backup_cb);
|
||||||
|
|
||||||
|
@ -974,7 +1255,7 @@ u8g_uint_t u8g_GetStrPixelWidth(u8g_t *u8g, const char *s);
|
||||||
u8g_uint_t u8g_GetStrPixelWidthP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
u8g_uint_t u8g_GetStrPixelWidthP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
||||||
int8_t u8g_GetStrX(u8g_t *u8g, const char *s);
|
int8_t u8g_GetStrX(u8g_t *u8g, const char *s);
|
||||||
int8_t u8g_GetStrXP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
int8_t u8g_GetStrXP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
||||||
u8g_uint_t u8g_GetStrWidth(u8g_t *u8g, const char *s);
|
u8g_uint_t u8g_GetStrWidth(u8g_t *u8g, const char *s) U8G_NOINLINE;
|
||||||
u8g_uint_t u8g_GetStrWidthP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
u8g_uint_t u8g_GetStrWidthP(u8g_t *u8g, const u8g_pgm_uint8_t *s);
|
||||||
|
|
||||||
u8g_uint_t u8g_DrawStrFontBBX(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, const char *s);
|
u8g_uint_t u8g_DrawStrFontBBX(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, const char *s);
|
||||||
|
@ -982,17 +1263,20 @@ u8g_uint_t u8g_DrawStrFontBBX(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t di
|
||||||
void u8g_GetStrMinBox(u8g_t *u8g, const char *s, u8g_uint_t *x, u8g_uint_t *y, u8g_uint_t *width, u8g_uint_t *height);
|
void u8g_GetStrMinBox(u8g_t *u8g, const char *s, u8g_uint_t *x, u8g_uint_t *y, u8g_uint_t *width, u8g_uint_t *height);
|
||||||
void u8g_GetStrAMinBox(u8g_t *u8g, const char *s, u8g_uint_t *x, u8g_uint_t *y, u8g_uint_t *width, u8g_uint_t *height);
|
void u8g_GetStrAMinBox(u8g_t *u8g, const char *s, u8g_uint_t *x, u8g_uint_t *y, u8g_uint_t *width, u8g_uint_t *height);
|
||||||
|
|
||||||
|
|
||||||
|
u8g_uint_t u8g_DrawAAStr(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, const char *s);
|
||||||
|
|
||||||
/* u8g_rect.c */
|
/* u8g_rect.c */
|
||||||
|
|
||||||
void u8g_draw_box(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) U8G_NOINLINE;
|
void u8g_draw_box(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) U8G_NOINLINE;
|
||||||
|
|
||||||
void u8g_DrawHLine(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w);
|
void u8g_DrawHLine(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w) U8G_NOINLINE;
|
||||||
void u8g_DrawVLine(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w);
|
void u8g_DrawVLine(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w) U8G_NOINLINE;
|
||||||
void u8g_DrawFrame(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h);
|
void u8g_DrawFrame(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) U8G_NOINLINE;
|
||||||
void u8g_DrawBox(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h);
|
void u8g_DrawBox(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) U8G_NOINLINE;
|
||||||
|
|
||||||
void u8g_DrawRFrame(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r);
|
void u8g_DrawRFrame(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r) U8G_NOINLINE;
|
||||||
void u8g_DrawRBox(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r);
|
void u8g_DrawRBox(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r) U8G_NOINLINE;
|
||||||
|
|
||||||
/* u8g_bitmap.c */
|
/* u8g_bitmap.c */
|
||||||
|
|
||||||
|
@ -1034,6 +1318,10 @@ void u8g_draw_disc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uin
|
||||||
void u8g_DrawCircle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option);
|
void u8g_DrawCircle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option);
|
||||||
void u8g_DrawDisc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option);
|
void u8g_DrawDisc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option);
|
||||||
|
|
||||||
|
/* u8g_ellipse.c */
|
||||||
|
void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option);
|
||||||
|
void u8g_DrawFilledEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option);
|
||||||
|
|
||||||
/* u8g_clip.c */
|
/* u8g_clip.c */
|
||||||
uint8_t u8g_is_box_bbx_intersection(u8g_box_t *box, u8g_dev_arg_bbx_t *bbx);
|
uint8_t u8g_is_box_bbx_intersection(u8g_box_t *box, u8g_dev_arg_bbx_t *bbx);
|
||||||
|
|
||||||
|
@ -1047,6 +1335,63 @@ void u8g_EnableCursor(u8g_t *u8g);
|
||||||
void u8g_DisableCursor(u8g_t *u8g);
|
void u8g_DisableCursor(u8g_t *u8g);
|
||||||
void u8g_DrawCursor(u8g_t *u8g);
|
void u8g_DrawCursor(u8g_t *u8g);
|
||||||
|
|
||||||
|
/* u8g_polygon.c */
|
||||||
|
|
||||||
|
typedef int16_t pg_word_t;
|
||||||
|
|
||||||
|
#define PG_NOINLINE U8G_NOINLINE
|
||||||
|
|
||||||
|
struct pg_point_struct
|
||||||
|
{
|
||||||
|
pg_word_t x;
|
||||||
|
pg_word_t y;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _pg_struct pg_struct; /* forward declaration */
|
||||||
|
|
||||||
|
struct pg_edge_struct
|
||||||
|
{
|
||||||
|
pg_word_t x_direction; /* 1, if x2 is greater than x1, -1 otherwise */
|
||||||
|
pg_word_t height;
|
||||||
|
pg_word_t current_x_offset;
|
||||||
|
pg_word_t error_offset;
|
||||||
|
|
||||||
|
/* --- line loop --- */
|
||||||
|
pg_word_t current_y;
|
||||||
|
pg_word_t max_y;
|
||||||
|
pg_word_t current_x;
|
||||||
|
pg_word_t error;
|
||||||
|
|
||||||
|
/* --- outer loop --- */
|
||||||
|
uint8_t (*next_idx_fn)(pg_struct *pg, uint8_t i);
|
||||||
|
uint8_t curr_idx;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* maximum number of points in the polygon */
|
||||||
|
/* can be redefined, but highest possible value is 254 */
|
||||||
|
#define PG_MAX_POINTS 6
|
||||||
|
|
||||||
|
/* index numbers for the pge structures below */
|
||||||
|
#define PG_LEFT 0
|
||||||
|
#define PG_RIGHT 1
|
||||||
|
|
||||||
|
|
||||||
|
struct _pg_struct
|
||||||
|
{
|
||||||
|
struct pg_point_struct list[PG_MAX_POINTS];
|
||||||
|
uint8_t cnt;
|
||||||
|
uint8_t is_min_y_not_flat;
|
||||||
|
pg_word_t total_scan_line_cnt;
|
||||||
|
struct pg_edge_struct pge[2]; /* left and right line draw structures */
|
||||||
|
};
|
||||||
|
|
||||||
|
void pg_ClearPolygonXY(pg_struct *pg);
|
||||||
|
void pg_AddPolygonXY(pg_struct *pg, u8g_t *u8g, int16_t x, int16_t y);
|
||||||
|
void pg_DrawPolygon(pg_struct *pg, u8g_t *u8g);
|
||||||
|
void u8g_ClearPolygonXY(void);
|
||||||
|
void u8g_AddPolygonXY(u8g_t *u8g, int16_t x, int16_t y);
|
||||||
|
void u8g_DrawPolygon(u8g_t *u8g);
|
||||||
|
void u8g_DrawTriangle(u8g_t *u8g, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2);
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
|
@ -1063,6 +1408,10 @@ void st_Step(uint8_t player_pos, uint8_t is_auto_fire, uint8_t is_fire);
|
||||||
|
|
||||||
/* options for u8g_i2c_init() */
|
/* options for u8g_i2c_init() */
|
||||||
#define U8G_I2C_OPT_NONE 0
|
#define U8G_I2C_OPT_NONE 0
|
||||||
|
#define U8G_I2C_OPT_NO_ACK 2
|
||||||
|
#define U8G_I2C_OPT_DEV_0 0
|
||||||
|
#define U8G_I2C_OPT_DEV_1 4
|
||||||
|
#define U8G_I2C_OPT_FAST 16
|
||||||
|
|
||||||
/* retrun values from u8g_twi_get_error() */
|
/* retrun values from u8g_twi_get_error() */
|
||||||
#define U8G_I2C_ERR_NONE 0x00
|
#define U8G_I2C_ERR_NONE 0x00
|
||||||
|
@ -1077,6 +1426,7 @@ void u8g_i2c_init(uint8_t options) U8G_NOINLINE; /* use U8G_I2C_OPT_NONE as opt
|
||||||
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos) U8G_NOINLINE;
|
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos) U8G_NOINLINE;
|
||||||
uint8_t u8g_i2c_start(uint8_t sla) U8G_NOINLINE;
|
uint8_t u8g_i2c_start(uint8_t sla) U8G_NOINLINE;
|
||||||
uint8_t u8g_i2c_send_byte(uint8_t data) U8G_NOINLINE;
|
uint8_t u8g_i2c_send_byte(uint8_t data) U8G_NOINLINE;
|
||||||
|
uint8_t u8g_i2c_send_mode(uint8_t mode) U8G_NOINLINE;
|
||||||
void u8g_i2c_stop(void) U8G_NOINLINE;
|
void u8g_i2c_stop(void) U8G_NOINLINE;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1115,91 +1465,90 @@ void chess_Step(uint8_t keycode);
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* font definitions */
|
/* font definitions */
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_5[] U8G_FONT_SECTION("u8g_font_m2icon_5");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_7[] U8G_FONT_SECTION("u8g_font_m2icon_7");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_9[] U8G_FONT_SECTION("u8g_font_m2icon_9");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_5[] U8G_SECTION(".progmem.u8g_font_m2icon_5");
|
extern const u8g_fntpgm_uint8_t u8g_font_u8glib_4[] U8G_FONT_SECTION("u8g_font_u8glib_4");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_7[] U8G_SECTION(".progmem.u8g_font_m2icon_7");
|
extern const u8g_fntpgm_uint8_t u8g_font_u8glib_4r[] U8G_FONT_SECTION("u8g_font_u8glib_4r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_m2icon_9[] U8G_SECTION(".progmem.u8g_font_m2icon_9");
|
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_u8glib_4[] U8G_SECTION(".progmem.u8g_font_u8glib_4");
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_u8glib_4r[] U8G_SECTION(".progmem.u8g_font_u8glib_4r");
|
|
||||||
|
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x12_75r[] U8G_SECTION(".progmem.u8g_font_6x12_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x12_75r[] U8G_FONT_SECTION("u8g_font_6x12_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13_75r[] U8G_SECTION(".progmem.u8g_font_6x13_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13_75r[] U8G_FONT_SECTION("u8g_font_6x13_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13_75r[] U8G_SECTION(".progmem.u8g_font_7x13_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13_75r[] U8G_FONT_SECTION("u8g_font_7x13_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13_75r[] U8G_SECTION(".progmem.u8g_font_8x13_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13_75r[] U8G_FONT_SECTION("u8g_font_8x13_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15_75r[] U8G_SECTION(".progmem.u8g_font_9x15_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15_75r[] U8G_FONT_SECTION("u8g_font_9x15_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18_75r[] U8G_SECTION(".progmem.u8g_font_9x18_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18_75r[] U8G_FONT_SECTION("u8g_font_9x18_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cu12_75r[] U8G_SECTION(".progmem.u8g_font_cu12_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_cu12_75r[] U8G_FONT_SECTION("u8g_font_cu12_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_75r[] U8G_SECTION(".progmem.u8g_font_unifont_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_75r[] U8G_FONT_SECTION("u8g_font_unifont_75r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_10x20_75r[] U8G_SECTION(".progmem.u8g_font_10x20_75r");
|
extern const u8g_fntpgm_uint8_t u8g_font_10x20_75r[] U8G_FONT_SECTION("u8g_font_10x20_75r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_10x20_67_75[] U8G_SECTION(".progmem.u8g_font_10x20_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_10x20_67_75[] U8G_FONT_SECTION("u8g_font_10x20_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_10x20_78_79[] U8G_SECTION(".progmem.u8g_font_10x20_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_10x20_78_79[] U8G_FONT_SECTION("u8g_font_10x20_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_10x20[] U8G_SECTION(".progmem.u8g_font_10x20");
|
extern const u8g_fntpgm_uint8_t u8g_font_10x20[] U8G_FONT_SECTION("u8g_font_10x20");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_10x20r[] U8G_SECTION(".progmem.u8g_font_10x20r");
|
extern const u8g_fntpgm_uint8_t u8g_font_10x20r[] U8G_FONT_SECTION("u8g_font_10x20r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_4x6[] U8G_SECTION(".progmem.u8g_font_4x6");
|
extern const u8g_fntpgm_uint8_t u8g_font_4x6[] U8G_FONT_SECTION("u8g_font_4x6");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_4x6r[] U8G_SECTION(".progmem.u8g_font_4x6r");
|
extern const u8g_fntpgm_uint8_t u8g_font_4x6r[] U8G_FONT_SECTION("u8g_font_4x6r");
|
||||||
//extern const u8g_fntpgm_uint8_t u8g_font_4x6n[] U8G_SECTION(".progmem.u8g_font_4x6n");
|
//extern const u8g_fntpgm_uint8_t u8g_font_4x6n[] U8G_FONT_SECTION("u8g_font_4x6n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_5x7[] U8G_SECTION(".progmem.u8g_font_5x7");
|
extern const u8g_fntpgm_uint8_t u8g_font_5x7[] U8G_FONT_SECTION("u8g_font_5x7");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_5x7r[] U8G_SECTION(".progmem.u8g_font_5x7r");
|
extern const u8g_fntpgm_uint8_t u8g_font_5x7r[] U8G_FONT_SECTION("u8g_font_5x7r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_5x8[] U8G_SECTION(".progmem.u8g_font_5x8");
|
extern const u8g_fntpgm_uint8_t u8g_font_5x8[] U8G_FONT_SECTION("u8g_font_5x8");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_5x8r[] U8G_SECTION(".progmem.u8g_font_5x8r");
|
extern const u8g_fntpgm_uint8_t u8g_font_5x8r[] U8G_FONT_SECTION("u8g_font_5x8r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x10[] U8G_SECTION(".progmem.u8g_font_6x10");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x10[] U8G_FONT_SECTION("u8g_font_6x10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x10r[] U8G_SECTION(".progmem.u8g_font_6x10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x10r[] U8G_FONT_SECTION("u8g_font_6x10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x12_67_75[] U8G_SECTION(".progmem.u8g_font_6x12_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x12_67_75[] U8G_FONT_SECTION("u8g_font_6x12_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x12_78_79[] U8G_SECTION(".progmem.u8g_font_6x12_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x12_78_79[] U8G_FONT_SECTION("u8g_font_6x12_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x12[] U8G_SECTION(".progmem.u8g_font_6x12");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x12[] U8G_FONT_SECTION("u8g_font_6x12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x12r[] U8G_SECTION(".progmem.u8g_font_6x12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x12r[] U8G_FONT_SECTION("u8g_font_6x12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13_67_75[] U8G_SECTION(".progmem.u8g_font_6x13_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13_67_75[] U8G_FONT_SECTION("u8g_font_6x13_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13_78_79[] U8G_SECTION(".progmem.u8g_font_6x13_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13_78_79[] U8G_FONT_SECTION("u8g_font_6x13_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13B[] U8G_SECTION(".progmem.u8g_font_6x13B");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13B[] U8G_FONT_SECTION("u8g_font_6x13B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13Br[] U8G_SECTION(".progmem.u8g_font_6x13Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13Br[] U8G_FONT_SECTION("u8g_font_6x13Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13[] U8G_SECTION(".progmem.u8g_font_6x13");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13[] U8G_FONT_SECTION("u8g_font_6x13");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13r[] U8G_SECTION(".progmem.u8g_font_6x13r");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13r[] U8G_FONT_SECTION("u8g_font_6x13r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13O[] U8G_SECTION(".progmem.u8g_font_6x13O");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13O[] U8G_FONT_SECTION("u8g_font_6x13O");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x13Or[] U8G_SECTION(".progmem.u8g_font_6x13Or");
|
extern const u8g_fntpgm_uint8_t u8g_font_6x13Or[] U8G_FONT_SECTION("u8g_font_6x13Or");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13_67_75[] U8G_SECTION(".progmem.u8g_font_7x13_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13_67_75[] U8G_FONT_SECTION("u8g_font_7x13_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13_78_79[] U8G_SECTION(".progmem.u8g_font_7x13_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13_78_79[] U8G_FONT_SECTION("u8g_font_7x13_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13B[] U8G_SECTION(".progmem.u8g_font_7x13B");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13B[] U8G_FONT_SECTION("u8g_font_7x13B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13Br[] U8G_SECTION(".progmem.u8g_font_7x13Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13Br[] U8G_FONT_SECTION("u8g_font_7x13Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13[] U8G_SECTION(".progmem.u8g_font_7x13");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13[] U8G_FONT_SECTION("u8g_font_7x13");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13r[] U8G_SECTION(".progmem.u8g_font_7x13r");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13r[] U8G_FONT_SECTION("u8g_font_7x13r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13O[] U8G_SECTION(".progmem.u8g_font_7x13O");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13O[] U8G_FONT_SECTION("u8g_font_7x13O");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x13Or[] U8G_SECTION(".progmem.u8g_font_7x13Or");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x13Or[] U8G_FONT_SECTION("u8g_font_7x13Or");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x14B[] U8G_SECTION(".progmem.u8g_font_7x14B");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x14B[] U8G_FONT_SECTION("u8g_font_7x14B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x14Br[] U8G_SECTION(".progmem.u8g_font_7x14Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x14Br[] U8G_FONT_SECTION("u8g_font_7x14Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x14[] U8G_SECTION(".progmem.u8g_font_7x14");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x14[] U8G_FONT_SECTION("u8g_font_7x14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_7x14r[] U8G_SECTION(".progmem.u8g_font_7x14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_7x14r[] U8G_FONT_SECTION("u8g_font_7x14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13_67_75[] U8G_SECTION(".progmem.u8g_font_8x13_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13_67_75[] U8G_FONT_SECTION("u8g_font_8x13_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13B[] U8G_SECTION(".progmem.u8g_font_8x13B");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13B[] U8G_FONT_SECTION("u8g_font_8x13B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13Br[] U8G_SECTION(".progmem.u8g_font_8x13Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13Br[] U8G_FONT_SECTION("u8g_font_8x13Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13[] U8G_SECTION(".progmem.u8g_font_8x13");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13[] U8G_FONT_SECTION("u8g_font_8x13");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13r[] U8G_SECTION(".progmem.u8g_font_8x13r");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13r[] U8G_FONT_SECTION("u8g_font_8x13r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13O[] U8G_SECTION(".progmem.u8g_font_8x13O");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13O[] U8G_FONT_SECTION("u8g_font_8x13O");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_8x13Or[] U8G_SECTION(".progmem.u8g_font_8x13Or");
|
extern const u8g_fntpgm_uint8_t u8g_font_8x13Or[] U8G_FONT_SECTION("u8g_font_8x13Or");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15_67_75[] U8G_SECTION(".progmem.u8g_font_9x15_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15_67_75[] U8G_FONT_SECTION("u8g_font_9x15_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15_78_79[] U8G_SECTION(".progmem.u8g_font_9x15_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15_78_79[] U8G_FONT_SECTION("u8g_font_9x15_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15B[] U8G_SECTION(".progmem.u8g_font_9x15B");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15B[] U8G_FONT_SECTION("u8g_font_9x15B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15Br[] U8G_SECTION(".progmem.u8g_font_9x15Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15Br[] U8G_FONT_SECTION("u8g_font_9x15Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15[] U8G_SECTION(".progmem.u8g_font_9x15");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15[] U8G_FONT_SECTION("u8g_font_9x15");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x15r[] U8G_SECTION(".progmem.u8g_font_9x15r");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x15r[] U8G_FONT_SECTION("u8g_font_9x15r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18_67_75[] U8G_SECTION(".progmem.u8g_font_9x18_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18_67_75[] U8G_FONT_SECTION("u8g_font_9x18_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18_78_79[] U8G_SECTION(".progmem.u8g_font_9x18_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18_78_79[] U8G_FONT_SECTION("u8g_font_9x18_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18B[] U8G_SECTION(".progmem.u8g_font_9x18B");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18B[] U8G_FONT_SECTION("u8g_font_9x18B");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18[] U8G_SECTION(".progmem.u8g_font_9x18");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18[] U8G_FONT_SECTION("u8g_font_9x18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18Br[] U8G_SECTION(".progmem.u8g_font_9x18Br");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18Br[] U8G_FONT_SECTION("u8g_font_9x18Br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_9x18r[] U8G_SECTION(".progmem.u8g_font_9x18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_9x18r[] U8G_FONT_SECTION("u8g_font_9x18r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cursor[] U8G_SECTION(".progmem.u8g_font_cursor");
|
extern const u8g_fntpgm_uint8_t u8g_font_cursor[] U8G_FONT_SECTION("u8g_font_cursor");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cursorr[] U8G_SECTION(".progmem.u8g_font_cursorr");
|
extern const u8g_fntpgm_uint8_t u8g_font_cursorr[] U8G_FONT_SECTION("u8g_font_cursorr");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_micro[] U8G_SECTION(".progmem.u8g_font_micro");
|
extern const u8g_fntpgm_uint8_t u8g_font_micro[] U8G_FONT_SECTION("u8g_font_micro");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cu12_67_75[] U8G_SECTION(".progmem.u8g_font_cu12_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_cu12_67_75[] U8G_FONT_SECTION("u8g_font_cu12_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cu12_78_79[] U8G_SECTION(".progmem.u8g_font_cu12_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_cu12_78_79[] U8G_FONT_SECTION("u8g_font_cu12_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_cu12[] U8G_SECTION(".progmem.u8g_font_cu12");
|
extern const u8g_fntpgm_uint8_t u8g_font_cu12[] U8G_FONT_SECTION("u8g_font_cu12");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Free-Universal Bold
|
Free-Universal Bold
|
||||||
|
@ -1208,27 +1557,27 @@ extern const u8g_fntpgm_uint8_t u8g_font_cu12[] U8G_SECTION(".progmem.u8g_font_c
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub11[] U8G_SECTION(".progmem.u8g_font_fub11");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub11[] U8G_FONT_SECTION("u8g_font_fub11");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub11r[] U8G_SECTION(".progmem.u8g_font_fub11r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub11r[] U8G_FONT_SECTION("u8g_font_fub11r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub11n[] U8G_SECTION(".progmem.u8g_font_fub11n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub11n[] U8G_FONT_SECTION("u8g_font_fub11n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub14[] U8G_SECTION(".progmem.u8g_font_fub14");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub14[] U8G_FONT_SECTION("u8g_font_fub14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub14r[] U8G_SECTION(".progmem.u8g_font_fub14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub14r[] U8G_FONT_SECTION("u8g_font_fub14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub14n[] U8G_SECTION(".progmem.u8g_font_fub14n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub14n[] U8G_FONT_SECTION("u8g_font_fub14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub17[] U8G_SECTION(".progmem.u8g_font_fub17");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub17[] U8G_FONT_SECTION("u8g_font_fub17");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub17r[] U8G_SECTION(".progmem.u8g_font_fub17r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub17r[] U8G_FONT_SECTION("u8g_font_fub17r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub17n[] U8G_SECTION(".progmem.u8g_font_fub17n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub17n[] U8G_FONT_SECTION("u8g_font_fub17n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub20[] U8G_SECTION(".progmem.u8g_font_fub20");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub20[] U8G_FONT_SECTION("u8g_font_fub20");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub20r[] U8G_SECTION(".progmem.u8g_font_fub20r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub20r[] U8G_FONT_SECTION("u8g_font_fub20r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub20n[] U8G_SECTION(".progmem.u8g_font_fub20n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub20n[] U8G_FONT_SECTION("u8g_font_fub20n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub25[] U8G_SECTION(".progmem.u8g_font_fub25");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub25[] U8G_FONT_SECTION("u8g_font_fub25");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub25r[] U8G_SECTION(".progmem.u8g_font_fub25r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub25r[] U8G_FONT_SECTION("u8g_font_fub25r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub25n[] U8G_SECTION(".progmem.u8g_font_fub25n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub25n[] U8G_FONT_SECTION("u8g_font_fub25n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub30[] U8G_SECTION(".progmem.u8g_font_fub30");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub30[] U8G_FONT_SECTION("u8g_font_fub30");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub30r[] U8G_SECTION(".progmem.u8g_font_fub30r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub30r[] U8G_FONT_SECTION("u8g_font_fub30r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub30n[] U8G_SECTION(".progmem.u8g_font_fub30n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub30n[] U8G_FONT_SECTION("u8g_font_fub30n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub35n[] U8G_SECTION(".progmem.u8g_font_fub35n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub35n[] U8G_FONT_SECTION("u8g_font_fub35n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub42n[] U8G_SECTION(".progmem.u8g_font_fub42n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub42n[] U8G_FONT_SECTION("u8g_font_fub42n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fub49n[] U8G_SECTION(".progmem.u8g_font_fub49n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fub49n[] U8G_FONT_SECTION("u8g_font_fub49n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Free-Universal Regular
|
Free-Universal Regular
|
||||||
|
@ -1237,27 +1586,27 @@ extern const u8g_fntpgm_uint8_t u8g_font_fub49n[] U8G_SECTION(".progmem.u8g_font
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur11[] U8G_SECTION(".progmem.u8g_font_fur11");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur11[] U8G_FONT_SECTION("u8g_font_fur11");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur11r[] U8G_SECTION(".progmem.u8g_font_fur11r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur11r[] U8G_FONT_SECTION("u8g_font_fur11r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur11n[] U8G_SECTION(".progmem.u8g_font_fur11n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur11n[] U8G_FONT_SECTION("u8g_font_fur11n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur14[] U8G_SECTION(".progmem.u8g_font_fur14");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur14[] U8G_FONT_SECTION("u8g_font_fur14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur14r[] U8G_SECTION(".progmem.u8g_font_fur14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur14r[] U8G_FONT_SECTION("u8g_font_fur14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur14n[] U8G_SECTION(".progmem.u8g_font_fur14n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur14n[] U8G_FONT_SECTION("u8g_font_fur14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur17[] U8G_SECTION(".progmem.u8g_font_fur17");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur17[] U8G_FONT_SECTION("u8g_font_fur17");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur17r[] U8G_SECTION(".progmem.u8g_font_fur17r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur17r[] U8G_FONT_SECTION("u8g_font_fur17r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur17n[] U8G_SECTION(".progmem.u8g_font_fur17n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur17n[] U8G_FONT_SECTION("u8g_font_fur17n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur20[] U8G_SECTION(".progmem.u8g_font_fur20");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur20[] U8G_FONT_SECTION("u8g_font_fur20");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur20r[] U8G_SECTION(".progmem.u8g_font_fur20r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur20r[] U8G_FONT_SECTION("u8g_font_fur20r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur20n[] U8G_SECTION(".progmem.u8g_font_fur20n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur20n[] U8G_FONT_SECTION("u8g_font_fur20n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur25[] U8G_SECTION(".progmem.u8g_font_fur25");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur25[] U8G_FONT_SECTION("u8g_font_fur25");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur25r[] U8G_SECTION(".progmem.u8g_font_fur25r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur25r[] U8G_FONT_SECTION("u8g_font_fur25r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur25n[] U8G_SECTION(".progmem.u8g_font_fur25n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur25n[] U8G_FONT_SECTION("u8g_font_fur25n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur30[] U8G_SECTION(".progmem.u8g_font_fur30");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur30[] U8G_FONT_SECTION("u8g_font_fur30");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur30r[] U8G_SECTION(".progmem.u8g_font_fur30r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur30r[] U8G_FONT_SECTION("u8g_font_fur30r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur30n[] U8G_SECTION(".progmem.u8g_font_fur30n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur30n[] U8G_FONT_SECTION("u8g_font_fur30n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur35n[] U8G_SECTION(".progmem.u8g_font_fur35n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur35n[] U8G_FONT_SECTION("u8g_font_fur35n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur42n[] U8G_SECTION(".progmem.u8g_font_fur42n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur42n[] U8G_FONT_SECTION("u8g_font_fur42n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fur49n[] U8G_SECTION(".progmem.u8g_font_fur49n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fur49n[] U8G_FONT_SECTION("u8g_font_fur49n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Gentium Bold
|
Gentium Bold
|
||||||
|
@ -1266,29 +1615,29 @@ extern const u8g_fntpgm_uint8_t u8g_font_fur49n[] U8G_SECTION(".progmem.u8g_font
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb11[] U8G_SECTION(".progmem.u8g_font_gdb11");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb11[] U8G_FONT_SECTION("u8g_font_gdb11");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb12[] U8G_SECTION(".progmem.u8g_font_gdb12");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb12[] U8G_FONT_SECTION("u8g_font_gdb12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb14[] U8G_SECTION(".progmem.u8g_font_gdb14");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb14[] U8G_FONT_SECTION("u8g_font_gdb14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb17[] U8G_SECTION(".progmem.u8g_font_gdb17");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb17[] U8G_FONT_SECTION("u8g_font_gdb17");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb20[] U8G_SECTION(".progmem.u8g_font_gdb20");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb20[] U8G_FONT_SECTION("u8g_font_gdb20");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb25[] U8G_SECTION(".progmem.u8g_font_gdb25");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb25[] U8G_FONT_SECTION("u8g_font_gdb25");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb30[] U8G_SECTION(".progmem.u8g_font_gdb30");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb30[] U8G_FONT_SECTION("u8g_font_gdb30");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb11r[] U8G_SECTION(".progmem.u8g_font_gdb11r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb11r[] U8G_FONT_SECTION("u8g_font_gdb11r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb12r[] U8G_SECTION(".progmem.u8g_font_gdb12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb12r[] U8G_FONT_SECTION("u8g_font_gdb12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb14r[] U8G_SECTION(".progmem.u8g_font_gdb14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb14r[] U8G_FONT_SECTION("u8g_font_gdb14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb17r[] U8G_SECTION(".progmem.u8g_font_gdb17r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb17r[] U8G_FONT_SECTION("u8g_font_gdb17r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb20r[] U8G_SECTION(".progmem.u8g_font_gdb20r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb20r[] U8G_FONT_SECTION("u8g_font_gdb20r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb25r[] U8G_SECTION(".progmem.u8g_font_gdb25r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb25r[] U8G_FONT_SECTION("u8g_font_gdb25r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb30r[] U8G_SECTION(".progmem.u8g_font_gdb30r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb30r[] U8G_FONT_SECTION("u8g_font_gdb30r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb11n[] U8G_SECTION(".progmem.u8g_font_gdb11n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb11n[] U8G_FONT_SECTION("u8g_font_gdb11n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb12n[] U8G_SECTION(".progmem.u8g_font_gdb12n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb12n[] U8G_FONT_SECTION("u8g_font_gdb12n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb14n[] U8G_SECTION(".progmem.u8g_font_gdb14n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb14n[] U8G_FONT_SECTION("u8g_font_gdb14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb17n[] U8G_SECTION(".progmem.u8g_font_gdb17n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb17n[] U8G_FONT_SECTION("u8g_font_gdb17n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb20n[] U8G_SECTION(".progmem.u8g_font_gdb20n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb20n[] U8G_FONT_SECTION("u8g_font_gdb20n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb25n[] U8G_SECTION(".progmem.u8g_font_gdb25n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb25n[] U8G_FONT_SECTION("u8g_font_gdb25n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdb30n[] U8G_SECTION(".progmem.u8g_font_gdb30n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdb30n[] U8G_FONT_SECTION("u8g_font_gdb30n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Gentium Regular
|
Gentium Regular
|
||||||
|
@ -1297,35 +1646,35 @@ extern const u8g_fntpgm_uint8_t u8g_font_gdb30n[] U8G_SECTION(".progmem.u8g_font
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr9[] U8G_SECTION(".progmem.u8g_font_gdr9");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr9[] U8G_FONT_SECTION("u8g_font_gdr9");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr10[] U8G_SECTION(".progmem.u8g_font_gdr10");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr10[] U8G_FONT_SECTION("u8g_font_gdr10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr11[] U8G_SECTION(".progmem.u8g_font_gdr11");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr11[] U8G_FONT_SECTION("u8g_font_gdr11");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr12[] U8G_SECTION(".progmem.u8g_font_gdr12");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr12[] U8G_FONT_SECTION("u8g_font_gdr12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr14[] U8G_SECTION(".progmem.u8g_font_gdr14");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr14[] U8G_FONT_SECTION("u8g_font_gdr14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr17[] U8G_SECTION(".progmem.u8g_font_gdr17");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr17[] U8G_FONT_SECTION("u8g_font_gdr17");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr20[] U8G_SECTION(".progmem.u8g_font_gdr20");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr20[] U8G_FONT_SECTION("u8g_font_gdr20");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr25[] U8G_SECTION(".progmem.u8g_font_gdr25");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr25[] U8G_FONT_SECTION("u8g_font_gdr25");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr30[] U8G_SECTION(".progmem.u8g_font_gdr30");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr30[] U8G_FONT_SECTION("u8g_font_gdr30");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr9r[] U8G_SECTION(".progmem.u8g_font_gdr9r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr9r[] U8G_FONT_SECTION("u8g_font_gdr9r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr10r[] U8G_SECTION(".progmem.u8g_font_gdr10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr10r[] U8G_FONT_SECTION("u8g_font_gdr10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr11r[] U8G_SECTION(".progmem.u8g_font_gdr11r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr11r[] U8G_FONT_SECTION("u8g_font_gdr11r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr12r[] U8G_SECTION(".progmem.u8g_font_gdr12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr12r[] U8G_FONT_SECTION("u8g_font_gdr12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr14r[] U8G_SECTION(".progmem.u8g_font_gdr14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr14r[] U8G_FONT_SECTION("u8g_font_gdr14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr17r[] U8G_SECTION(".progmem.u8g_font_gdr17r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr17r[] U8G_FONT_SECTION("u8g_font_gdr17r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr20r[] U8G_SECTION(".progmem.u8g_font_gdr20r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr20r[] U8G_FONT_SECTION("u8g_font_gdr20r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr25r[] U8G_SECTION(".progmem.u8g_font_gdr25r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr25r[] U8G_FONT_SECTION("u8g_font_gdr25r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr30r[] U8G_SECTION(".progmem.u8g_font_gdr30r");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr30r[] U8G_FONT_SECTION("u8g_font_gdr30r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr9n[] U8G_SECTION(".progmem.u8g_font_gdr9n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr9n[] U8G_FONT_SECTION("u8g_font_gdr9n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr10n[] U8G_SECTION(".progmem.u8g_font_gdr10n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr10n[] U8G_FONT_SECTION("u8g_font_gdr10n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr11n[] U8G_SECTION(".progmem.u8g_font_gdr11n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr11n[] U8G_FONT_SECTION("u8g_font_gdr11n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr12n[] U8G_SECTION(".progmem.u8g_font_gdr12n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr12n[] U8G_FONT_SECTION("u8g_font_gdr12n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr14n[] U8G_SECTION(".progmem.u8g_font_gdr14n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr14n[] U8G_FONT_SECTION("u8g_font_gdr14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr17n[] U8G_SECTION(".progmem.u8g_font_gdr17n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr17n[] U8G_FONT_SECTION("u8g_font_gdr17n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr20n[] U8G_SECTION(".progmem.u8g_font_gdr20n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr20n[] U8G_FONT_SECTION("u8g_font_gdr20n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr25n[] U8G_SECTION(".progmem.u8g_font_gdr25n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr25n[] U8G_FONT_SECTION("u8g_font_gdr25n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_gdr30n[] U8G_SECTION(".progmem.u8g_font_gdr30n");
|
extern const u8g_fntpgm_uint8_t u8g_font_gdr30n[] U8G_FONT_SECTION("u8g_font_gdr30n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Old-Standard Bold
|
Old-Standard Bold
|
||||||
|
@ -1334,23 +1683,23 @@ extern const u8g_fntpgm_uint8_t u8g_font_gdr30n[] U8G_SECTION(".progmem.u8g_font
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb18[] U8G_SECTION(".progmem.u8g_font_osb18");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb18[] U8G_FONT_SECTION("u8g_font_osb18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb21[] U8G_SECTION(".progmem.u8g_font_osb21");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb21[] U8G_FONT_SECTION("u8g_font_osb21");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb26[] U8G_SECTION(".progmem.u8g_font_osb26");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb26[] U8G_FONT_SECTION("u8g_font_osb26");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb29[] U8G_SECTION(".progmem.u8g_font_osb29");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb29[] U8G_FONT_SECTION("u8g_font_osb29");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb35[] U8G_SECTION(".progmem.u8g_font_osb35");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb35[] U8G_FONT_SECTION("u8g_font_osb35");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb18r[] U8G_SECTION(".progmem.u8g_font_osb18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb18r[] U8G_FONT_SECTION("u8g_font_osb18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb21r[] U8G_SECTION(".progmem.u8g_font_osb21r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb21r[] U8G_FONT_SECTION("u8g_font_osb21r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb26r[] U8G_SECTION(".progmem.u8g_font_osb26r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb26r[] U8G_FONT_SECTION("u8g_font_osb26r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb29r[] U8G_SECTION(".progmem.u8g_font_osb29r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb29r[] U8G_FONT_SECTION("u8g_font_osb29r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb35r[] U8G_SECTION(".progmem.u8g_font_osb35r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb35r[] U8G_FONT_SECTION("u8g_font_osb35r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb18n[] U8G_SECTION(".progmem.u8g_font_osb18n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb18n[] U8G_FONT_SECTION("u8g_font_osb18n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb21n[] U8G_SECTION(".progmem.u8g_font_osb21n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb21n[] U8G_FONT_SECTION("u8g_font_osb21n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb26n[] U8G_SECTION(".progmem.u8g_font_osb26n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb26n[] U8G_FONT_SECTION("u8g_font_osb26n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb29n[] U8G_SECTION(".progmem.u8g_font_osb29n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb29n[] U8G_FONT_SECTION("u8g_font_osb29n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osb35n[] U8G_SECTION(".progmem.u8g_font_osb35n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osb35n[] U8G_FONT_SECTION("u8g_font_osb35n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Old-Standard Regular
|
Old-Standard Regular
|
||||||
|
@ -1359,245 +1708,266 @@ extern const u8g_fntpgm_uint8_t u8g_font_osb35n[] U8G_SECTION(".progmem.u8g_font
|
||||||
no char: Full set (codes 32 - 255)
|
no char: Full set (codes 32 - 255)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr18[] U8G_SECTION(".progmem.u8g_font_osr18");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr18[] U8G_FONT_SECTION("u8g_font_osr18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr21[] U8G_SECTION(".progmem.u8g_font_osr21");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr21[] U8G_FONT_SECTION("u8g_font_osr21");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr26[] U8G_SECTION(".progmem.u8g_font_osr26");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr26[] U8G_FONT_SECTION("u8g_font_osr26");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr29[] U8G_SECTION(".progmem.u8g_font_osr29");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr29[] U8G_FONT_SECTION("u8g_font_osr29");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr35[] U8G_SECTION(".progmem.u8g_font_osr35");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr35[] U8G_FONT_SECTION("u8g_font_osr35");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr18r[] U8G_SECTION(".progmem.u8g_font_osr18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr18r[] U8G_FONT_SECTION("u8g_font_osr18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr21r[] U8G_SECTION(".progmem.u8g_font_osr21r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr21r[] U8G_FONT_SECTION("u8g_font_osr21r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr26r[] U8G_SECTION(".progmem.u8g_font_osr26r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr26r[] U8G_FONT_SECTION("u8g_font_osr26r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr29r[] U8G_SECTION(".progmem.u8g_font_osr29r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr29r[] U8G_FONT_SECTION("u8g_font_osr29r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr35r[] U8G_SECTION(".progmem.u8g_font_osr35r");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr35r[] U8G_FONT_SECTION("u8g_font_osr35r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr18n[] U8G_SECTION(".progmem.u8g_font_osr18n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr18n[] U8G_FONT_SECTION("u8g_font_osr18n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr21n[] U8G_SECTION(".progmem.u8g_font_osr21n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr21n[] U8G_FONT_SECTION("u8g_font_osr21n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr26n[] U8G_SECTION(".progmem.u8g_font_osr26n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr26n[] U8G_FONT_SECTION("u8g_font_osr26n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr29n[] U8G_SECTION(".progmem.u8g_font_osr29n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr29n[] U8G_FONT_SECTION("u8g_font_osr29n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_osr35n[] U8G_SECTION(".progmem.u8g_font_osr35n");
|
extern const u8g_fntpgm_uint8_t u8g_font_osr35n[] U8G_FONT_SECTION("u8g_font_osr35n");
|
||||||
|
|
||||||
//extern const u8g_fntpgm_uint8_t u8g_font_osr41[] U8G_SECTION(".progmem.u8g_font_osr41");
|
//extern const u8g_fntpgm_uint8_t u8g_font_osr41[] U8G_FONT_SECTION("u8g_font_osr41");
|
||||||
|
|
||||||
/* GNU unifont */
|
/* GNU unifont */
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_18_19[] U8G_SECTION(".progmem.u8g_font_unifont_18_19");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_18_19[] U8G_FONT_SECTION("u8g_font_unifont_18_19");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_72_73[] U8G_SECTION(".progmem.u8g_font_unifont_72_73");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_72_73[] U8G_FONT_SECTION("u8g_font_unifont_72_73");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_67_75[] U8G_SECTION(".progmem.u8g_font_unifont_67_75");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_67_75[] U8G_FONT_SECTION("u8g_font_unifont_67_75");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_76[] U8G_SECTION(".progmem.u8g_font_unifont_76");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_76[] U8G_FONT_SECTION("u8g_font_unifont_76");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_77[] U8G_SECTION(".progmem.u8g_font_unifont_77");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_77[] U8G_FONT_SECTION("u8g_font_unifont_77");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_78_79[] U8G_SECTION(".progmem.u8g_font_unifont_78_79");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_78_79[] U8G_FONT_SECTION("u8g_font_unifont_78_79");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_86[] U8G_SECTION(".progmem.u8g_font_unifont_86");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_86[] U8G_FONT_SECTION("u8g_font_unifont_86");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont[] U8G_SECTION(".progmem.u8g_font_unifont");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont[] U8G_FONT_SECTION("u8g_font_unifont");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifontr[] U8G_SECTION(".progmem.u8g_font_unifontr");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifontr[] U8G_FONT_SECTION("u8g_font_unifontr");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_0_8[] U8G_SECTION(".progmem.u8g_font_unifont_0_8");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_0_8[] U8G_FONT_SECTION("u8g_font_unifont_0_8");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_2_3[] U8G_SECTION(".progmem.u8g_font_unifont_2_3");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_2_3[] U8G_FONT_SECTION("u8g_font_unifont_2_3");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_4_5[] U8G_SECTION(".progmem.u8g_font_unifont_4_5");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_4_5[] U8G_FONT_SECTION("u8g_font_unifont_4_5");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_8_9[] U8G_SECTION(".progmem.u8g_font_unifont_8_9");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_8_9[] U8G_FONT_SECTION("u8g_font_unifont_8_9");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_unifont_12_13[] U8G_SECTION(".progmem.u8g_font_unifont_12_13");
|
extern const u8g_fntpgm_uint8_t u8g_font_unifont_12_13[] U8G_FONT_SECTION("u8g_font_unifont_12_13");
|
||||||
|
|
||||||
|
|
||||||
/* 04b fonts */
|
/* 04b fonts */
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03b[] U8G_SECTION(".progmem.u8g_font_04b_03b");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03b[] U8G_FONT_SECTION("u8g_font_04b_03b");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03bn[] U8G_SECTION(".progmem.u8g_font_04b_03bn");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03bn[] U8G_FONT_SECTION("u8g_font_04b_03bn");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03br[] U8G_SECTION(".progmem.u8g_font_04b_03br");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03br[] U8G_FONT_SECTION("u8g_font_04b_03br");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03[] U8G_SECTION(".progmem.u8g_font_04b_03");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03[] U8G_FONT_SECTION("u8g_font_04b_03");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03n[] U8G_SECTION(".progmem.u8g_font_04b_03n");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03n[] U8G_FONT_SECTION("u8g_font_04b_03n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_03r[] U8G_SECTION(".progmem.u8g_font_04b_03r");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_03r[] U8G_FONT_SECTION("u8g_font_04b_03r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_24[] U8G_SECTION(".progmem.u8g_font_04b_24");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_24[] U8G_FONT_SECTION("u8g_font_04b_24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_24n[] U8G_SECTION(".progmem.u8g_font_04b_24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_24n[] U8G_FONT_SECTION("u8g_font_04b_24n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_04b_24r[] U8G_SECTION(".progmem.u8g_font_04b_24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_04b_24r[] U8G_FONT_SECTION("u8g_font_04b_24r");
|
||||||
|
|
||||||
/* orgdot fonts */
|
/* orgdot fonts */
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_orgv01[] U8G_SECTION(".progmem.u8g_font_orgv01");
|
extern const u8g_fntpgm_uint8_t u8g_font_orgv01[] U8G_FONT_SECTION("u8g_font_orgv01");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_orgv01r[] U8G_SECTION(".progmem.u8g_font_orgv01r");
|
extern const u8g_fntpgm_uint8_t u8g_font_orgv01r[] U8G_FONT_SECTION("u8g_font_orgv01r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_orgv01n[] U8G_SECTION(".progmem.u8g_font_orgv01n");
|
extern const u8g_fntpgm_uint8_t u8g_font_orgv01n[] U8G_FONT_SECTION("u8g_font_orgv01n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0[] U8G_SECTION(".progmem.u8g_font_fixed_v0");
|
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0[] U8G_FONT_SECTION("u8g_font_fixed_v0");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0r[] U8G_SECTION(".progmem.u8g_font_fixed_v0r");
|
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0r[] U8G_FONT_SECTION("u8g_font_fixed_v0r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0n[] U8G_SECTION(".progmem.u8g_font_fixed_v0n");
|
extern const u8g_fntpgm_uint8_t u8g_font_fixed_v0n[] U8G_FONT_SECTION("u8g_font_fixed_v0n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpssb[] U8G_SECTION(".progmem.u8g_font_tpssb");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpssb[] U8G_FONT_SECTION("u8g_font_tpssb");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpssbr[] U8G_SECTION(".progmem.u8g_font_tpssbr");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpssbr[] U8G_FONT_SECTION("u8g_font_tpssbr");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpssbn[] U8G_SECTION(".progmem.u8g_font_tpssbn");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpssbn[] U8G_FONT_SECTION("u8g_font_tpssbn");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpss[] U8G_SECTION(".progmem.u8g_font_tpss");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpss[] U8G_FONT_SECTION("u8g_font_tpss");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpssr[] U8G_SECTION(".progmem.u8g_font_tpssr");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpssr[] U8G_FONT_SECTION("u8g_font_tpssr");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_tpssn[] U8G_SECTION(".progmem.u8g_font_tpssn");
|
extern const u8g_fntpgm_uint8_t u8g_font_tpssn[] U8G_FONT_SECTION("u8g_font_tpssn");
|
||||||
|
|
||||||
/* contributed */
|
/* contributed */
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_freedoomr25n[] U8G_SECTION(".progmem.u8g_font_freedoomr25n");
|
extern const u8g_fntpgm_uint8_t u8g_font_freedoomr25n[] U8G_FONT_SECTION("u8g_font_freedoomr25n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_freedoomr10r[] U8G_SECTION(".progmem.u8g_font_freedoomr10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_freedoomr10r[] U8G_FONT_SECTION("u8g_font_freedoomr10r");
|
||||||
|
|
||||||
/* adobe X11 */
|
/* adobe X11 */
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB08[] U8G_SECTION(".progmem.u8g_font_courB08");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB08[] U8G_FONT_SECTION("u8g_font_courB08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB08r[] U8G_SECTION(".progmem.u8g_font_courB08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB08r[] U8G_FONT_SECTION("u8g_font_courB08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB10[] U8G_SECTION(".progmem.u8g_font_courB10");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB10[] U8G_FONT_SECTION("u8g_font_courB10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB10r[] U8G_SECTION(".progmem.u8g_font_courB10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB10r[] U8G_FONT_SECTION("u8g_font_courB10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB12[] U8G_SECTION(".progmem.u8g_font_courB12");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB12[] U8G_FONT_SECTION("u8g_font_courB12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB12r[] U8G_SECTION(".progmem.u8g_font_courB12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB12r[] U8G_FONT_SECTION("u8g_font_courB12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB14[] U8G_SECTION(".progmem.u8g_font_courB14");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB14[] U8G_FONT_SECTION("u8g_font_courB14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB14r[] U8G_SECTION(".progmem.u8g_font_courB14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB14r[] U8G_FONT_SECTION("u8g_font_courB14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB18[] U8G_SECTION(".progmem.u8g_font_courB18");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB18[] U8G_FONT_SECTION("u8g_font_courB18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB18r[] U8G_SECTION(".progmem.u8g_font_courB18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB18r[] U8G_FONT_SECTION("u8g_font_courB18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB24[] U8G_SECTION(".progmem.u8g_font_courB24");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB24[] U8G_FONT_SECTION("u8g_font_courB24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB24r[] U8G_SECTION(".progmem.u8g_font_courB24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB24r[] U8G_FONT_SECTION("u8g_font_courB24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courB24n[] U8G_SECTION(".progmem.u8g_font_courB24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_courB24n[] U8G_FONT_SECTION("u8g_font_courB24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR08[] U8G_SECTION(".progmem.u8g_font_courR08");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR08[] U8G_FONT_SECTION("u8g_font_courR08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR08r[] U8G_SECTION(".progmem.u8g_font_courR08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR08r[] U8G_FONT_SECTION("u8g_font_courR08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR10[] U8G_SECTION(".progmem.u8g_font_courR10");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR10[] U8G_FONT_SECTION("u8g_font_courR10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR10r[] U8G_SECTION(".progmem.u8g_font_courR10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR10r[] U8G_FONT_SECTION("u8g_font_courR10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR12[] U8G_SECTION(".progmem.u8g_font_courR12");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR12[] U8G_FONT_SECTION("u8g_font_courR12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR12r[] U8G_SECTION(".progmem.u8g_font_courR12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR12r[] U8G_FONT_SECTION("u8g_font_courR12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR14[] U8G_SECTION(".progmem.u8g_font_courR14");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR14[] U8G_FONT_SECTION("u8g_font_courR14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR14r[] U8G_SECTION(".progmem.u8g_font_courR14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR14r[] U8G_FONT_SECTION("u8g_font_courR14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR18[] U8G_SECTION(".progmem.u8g_font_courR18");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR18[] U8G_FONT_SECTION("u8g_font_courR18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR18r[] U8G_SECTION(".progmem.u8g_font_courR18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR18r[] U8G_FONT_SECTION("u8g_font_courR18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR24[] U8G_SECTION(".progmem.u8g_font_courR24");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR24[] U8G_FONT_SECTION("u8g_font_courR24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR24r[] U8G_SECTION(".progmem.u8g_font_courR24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR24r[] U8G_FONT_SECTION("u8g_font_courR24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_courR24n[] U8G_SECTION(".progmem.u8g_font_courR24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_courR24n[] U8G_FONT_SECTION("u8g_font_courR24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB08[] U8G_SECTION(".progmem.u8g_font_helvB08");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB08[] U8G_FONT_SECTION("u8g_font_helvB08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB08r[] U8G_SECTION(".progmem.u8g_font_helvB08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB08r[] U8G_FONT_SECTION("u8g_font_helvB08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB10[] U8G_SECTION(".progmem.u8g_font_helvB10");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB08n[] U8G_FONT_SECTION("u8g_font_helvB08n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB10r[] U8G_SECTION(".progmem.u8g_font_helvB10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB10[] U8G_FONT_SECTION("u8g_font_helvB10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB12[] U8G_SECTION(".progmem.u8g_font_helvB12");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB10r[] U8G_FONT_SECTION("u8g_font_helvB10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB12r[] U8G_SECTION(".progmem.u8g_font_helvB12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB10n[] U8G_FONT_SECTION("u8g_font_helvB10n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB14[] U8G_SECTION(".progmem.u8g_font_helvB14");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB12[] U8G_FONT_SECTION("u8g_font_helvB12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB14r[] U8G_SECTION(".progmem.u8g_font_helvB14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB12r[] U8G_FONT_SECTION("u8g_font_helvB12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB18[] U8G_SECTION(".progmem.u8g_font_helvB18");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB12n[] U8G_FONT_SECTION("u8g_font_helvB12n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB18r[] U8G_SECTION(".progmem.u8g_font_helvB18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB14[] U8G_FONT_SECTION("u8g_font_helvB14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB24[] U8G_SECTION(".progmem.u8g_font_helvB24");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB14r[] U8G_FONT_SECTION("u8g_font_helvB14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB24r[] U8G_SECTION(".progmem.u8g_font_helvB24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB14n[] U8G_FONT_SECTION("u8g_font_helvB14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvB24n[] U8G_SECTION(".progmem.u8g_font_helvB24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB18[] U8G_FONT_SECTION("u8g_font_helvB18");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB18r[] U8G_FONT_SECTION("u8g_font_helvB18r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB18n[] U8G_FONT_SECTION("u8g_font_helvB18n");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB24[] U8G_FONT_SECTION("u8g_font_helvB24");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB24r[] U8G_FONT_SECTION("u8g_font_helvB24r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvB24n[] U8G_FONT_SECTION("u8g_font_helvB24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR08[] U8G_SECTION(".progmem.u8g_font_helvR08");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR08[] U8G_FONT_SECTION("u8g_font_helvR08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR08r[] U8G_SECTION(".progmem.u8g_font_helvR08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR08r[] U8G_FONT_SECTION("u8g_font_helvR08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR10[] U8G_SECTION(".progmem.u8g_font_helvR10");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR08n[] U8G_FONT_SECTION("u8g_font_helvR08n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR10r[] U8G_SECTION(".progmem.u8g_font_helvR10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR10[] U8G_FONT_SECTION("u8g_font_helvR10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR12[] U8G_SECTION(".progmem.u8g_font_helvR12");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR10r[] U8G_FONT_SECTION("u8g_font_helvR10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR12r[] U8G_SECTION(".progmem.u8g_font_helvR12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR10n[] U8G_FONT_SECTION("u8g_font_helvR10n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR14[] U8G_SECTION(".progmem.u8g_font_helvR14");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR12[] U8G_FONT_SECTION("u8g_font_helvR12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR14r[] U8G_SECTION(".progmem.u8g_font_helvR14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR12r[] U8G_FONT_SECTION("u8g_font_helvR12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR18[] U8G_SECTION(".progmem.u8g_font_helvR18");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR12n[] U8G_FONT_SECTION("u8g_font_helvR12n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR18r[] U8G_SECTION(".progmem.u8g_font_helvR18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR14[] U8G_FONT_SECTION("u8g_font_helvR14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR24[] U8G_SECTION(".progmem.u8g_font_helvR24");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR14r[] U8G_FONT_SECTION("u8g_font_helvR14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR24r[] U8G_SECTION(".progmem.u8g_font_helvR24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR14n[] U8G_FONT_SECTION("u8g_font_helvR14n");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_helvR24n[] U8G_SECTION(".progmem.u8g_font_helvR24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR18[] U8G_FONT_SECTION("u8g_font_helvR18");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR18r[] U8G_FONT_SECTION("u8g_font_helvR18r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR18n[] U8G_FONT_SECTION("u8g_font_helvR18n");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR24[] U8G_FONT_SECTION("u8g_font_helvR24");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR24r[] U8G_FONT_SECTION("u8g_font_helvR24r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_helvR24n[] U8G_FONT_SECTION("u8g_font_helvR24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB08[] U8G_SECTION(".progmem.u8g_font_ncenB08");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB08[] U8G_FONT_SECTION("u8g_font_ncenB08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB08r[] U8G_SECTION(".progmem.u8g_font_ncenB08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB08r[] U8G_FONT_SECTION("u8g_font_ncenB08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB10[] U8G_SECTION(".progmem.u8g_font_ncenB10");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB10[] U8G_FONT_SECTION("u8g_font_ncenB10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB10r[] U8G_SECTION(".progmem.u8g_font_ncenB10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB10r[] U8G_FONT_SECTION("u8g_font_ncenB10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB12[] U8G_SECTION(".progmem.u8g_font_ncenB12");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB12[] U8G_FONT_SECTION("u8g_font_ncenB12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB12r[] U8G_SECTION(".progmem.u8g_font_ncenB12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB12r[] U8G_FONT_SECTION("u8g_font_ncenB12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB14[] U8G_SECTION(".progmem.u8g_font_ncenB14");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB14[] U8G_FONT_SECTION("u8g_font_ncenB14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB14r[] U8G_SECTION(".progmem.u8g_font_ncenB14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB14r[] U8G_FONT_SECTION("u8g_font_ncenB14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB18[] U8G_SECTION(".progmem.u8g_font_ncenB18");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB18[] U8G_FONT_SECTION("u8g_font_ncenB18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB18r[] U8G_SECTION(".progmem.u8g_font_ncenB18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB18r[] U8G_FONT_SECTION("u8g_font_ncenB18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24[] U8G_SECTION(".progmem.u8g_font_ncenB24");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24[] U8G_FONT_SECTION("u8g_font_ncenB24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24r[] U8G_SECTION(".progmem.u8g_font_ncenB24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24r[] U8G_FONT_SECTION("u8g_font_ncenB24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24n[] U8G_SECTION(".progmem.u8g_font_ncenB24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenB24n[] U8G_FONT_SECTION("u8g_font_ncenB24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR08[] U8G_SECTION(".progmem.u8g_font_ncenR08");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR08[] U8G_FONT_SECTION("u8g_font_ncenR08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR08r[] U8G_SECTION(".progmem.u8g_font_ncenR08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR08r[] U8G_FONT_SECTION("u8g_font_ncenR08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR10[] U8G_SECTION(".progmem.u8g_font_ncenR10");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR10[] U8G_FONT_SECTION("u8g_font_ncenR10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR10r[] U8G_SECTION(".progmem.u8g_font_ncenR10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR10r[] U8G_FONT_SECTION("u8g_font_ncenR10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR12[] U8G_SECTION(".progmem.u8g_font_ncenR12");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR12[] U8G_FONT_SECTION("u8g_font_ncenR12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR12r[] U8G_SECTION(".progmem.u8g_font_ncenR12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR12r[] U8G_FONT_SECTION("u8g_font_ncenR12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR14[] U8G_SECTION(".progmem.u8g_font_ncenR14");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR14[] U8G_FONT_SECTION("u8g_font_ncenR14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR14r[] U8G_SECTION(".progmem.u8g_font_ncenR14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR14r[] U8G_FONT_SECTION("u8g_font_ncenR14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR18[] U8G_SECTION(".progmem.u8g_font_ncenR18");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR18[] U8G_FONT_SECTION("u8g_font_ncenR18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR18r[] U8G_SECTION(".progmem.u8g_font_ncenR18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR18r[] U8G_FONT_SECTION("u8g_font_ncenR18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24[] U8G_SECTION(".progmem.u8g_font_ncenR24");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24[] U8G_FONT_SECTION("u8g_font_ncenR24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24r[] U8G_SECTION(".progmem.u8g_font_ncenR24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24r[] U8G_FONT_SECTION("u8g_font_ncenR24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24n[] U8G_SECTION(".progmem.u8g_font_ncenR24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_ncenR24n[] U8G_FONT_SECTION("u8g_font_ncenR24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb08[] U8G_SECTION(".progmem.u8g_font_symb08");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb08[] U8G_FONT_SECTION("u8g_font_symb08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb08r[] U8G_SECTION(".progmem.u8g_font_symb08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb08r[] U8G_FONT_SECTION("u8g_font_symb08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb10[] U8G_SECTION(".progmem.u8g_font_symb10");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb10[] U8G_FONT_SECTION("u8g_font_symb10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb10r[] U8G_SECTION(".progmem.u8g_font_symb10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb10r[] U8G_FONT_SECTION("u8g_font_symb10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb12[] U8G_SECTION(".progmem.u8g_font_symb12");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb12[] U8G_FONT_SECTION("u8g_font_symb12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb12r[] U8G_SECTION(".progmem.u8g_font_symb12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb12r[] U8G_FONT_SECTION("u8g_font_symb12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb14[] U8G_SECTION(".progmem.u8g_font_symb14");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb14[] U8G_FONT_SECTION("u8g_font_symb14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb14r[] U8G_SECTION(".progmem.u8g_font_symb14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb14r[] U8G_FONT_SECTION("u8g_font_symb14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb18[] U8G_SECTION(".progmem.u8g_font_symb18");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb18[] U8G_FONT_SECTION("u8g_font_symb18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb18r[] U8G_SECTION(".progmem.u8g_font_symb18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb18r[] U8G_FONT_SECTION("u8g_font_symb18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb24[] U8G_SECTION(".progmem.u8g_font_symb24");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb24[] U8G_FONT_SECTION("u8g_font_symb24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_symb24r[] U8G_SECTION(".progmem.u8g_font_symb24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_symb24r[] U8G_FONT_SECTION("u8g_font_symb24r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB08[] U8G_SECTION(".progmem.u8g_font_timB08");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB08[] U8G_FONT_SECTION("u8g_font_timB08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB08r[] U8G_SECTION(".progmem.u8g_font_timB08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB08r[] U8G_FONT_SECTION("u8g_font_timB08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB10[] U8G_SECTION(".progmem.u8g_font_timB10");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB10[] U8G_FONT_SECTION("u8g_font_timB10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB10r[] U8G_SECTION(".progmem.u8g_font_timB10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB10r[] U8G_FONT_SECTION("u8g_font_timB10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB12[] U8G_SECTION(".progmem.u8g_font_timB12");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB12[] U8G_FONT_SECTION("u8g_font_timB12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB12r[] U8G_SECTION(".progmem.u8g_font_timB12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB12r[] U8G_FONT_SECTION("u8g_font_timB12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB14[] U8G_SECTION(".progmem.u8g_font_timB14");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB14[] U8G_FONT_SECTION("u8g_font_timB14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB14r[] U8G_SECTION(".progmem.u8g_font_timB14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB14r[] U8G_FONT_SECTION("u8g_font_timB14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB18[] U8G_SECTION(".progmem.u8g_font_timB18");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB18[] U8G_FONT_SECTION("u8g_font_timB18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB18r[] U8G_SECTION(".progmem.u8g_font_timB18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB18r[] U8G_FONT_SECTION("u8g_font_timB18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB24[] U8G_SECTION(".progmem.u8g_font_timB24");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB24[] U8G_FONT_SECTION("u8g_font_timB24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB24r[] U8G_SECTION(".progmem.u8g_font_timB24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB24r[] U8G_FONT_SECTION("u8g_font_timB24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timB24n[] U8G_SECTION(".progmem.u8g_font_timB24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_timB24n[] U8G_FONT_SECTION("u8g_font_timB24n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR08[] U8G_SECTION(".progmem.u8g_font_timR08");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR08[] U8G_FONT_SECTION("u8g_font_timR08");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR08r[] U8G_SECTION(".progmem.u8g_font_timR08r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR08r[] U8G_FONT_SECTION("u8g_font_timR08r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR10[] U8G_SECTION(".progmem.u8g_font_timR10");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR10[] U8G_FONT_SECTION("u8g_font_timR10");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR10r[] U8G_SECTION(".progmem.u8g_font_timR10r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR10r[] U8G_FONT_SECTION("u8g_font_timR10r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR12[] U8G_SECTION(".progmem.u8g_font_timR12");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR12[] U8G_FONT_SECTION("u8g_font_timR12");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR12r[] U8G_SECTION(".progmem.u8g_font_timR12r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR12r[] U8G_FONT_SECTION("u8g_font_timR12r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR14[] U8G_SECTION(".progmem.u8g_font_timR14");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR14[] U8G_FONT_SECTION("u8g_font_timR14");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR14r[] U8G_SECTION(".progmem.u8g_font_timR14r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR14r[] U8G_FONT_SECTION("u8g_font_timR14r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR18[] U8G_SECTION(".progmem.u8g_font_timR18");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR18[] U8G_FONT_SECTION("u8g_font_timR18");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR18r[] U8G_SECTION(".progmem.u8g_font_timR18r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR18r[] U8G_FONT_SECTION("u8g_font_timR18r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR24[] U8G_SECTION(".progmem.u8g_font_timR24");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR24[] U8G_FONT_SECTION("u8g_font_timR24");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR24r[] U8G_SECTION(".progmem.u8g_font_timR24r");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR24r[] U8G_FONT_SECTION("u8g_font_timR24r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_timR24n[] U8G_SECTION(".progmem.u8g_font_timR24n");
|
extern const u8g_fntpgm_uint8_t u8g_font_timR24n[] U8G_FONT_SECTION("u8g_font_timR24n");
|
||||||
|
|
||||||
/* fontstruct */
|
/* fontstruct */
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_p01type[] U8G_SECTION(".progmem.u8g_font_p01type");
|
extern const u8g_fntpgm_uint8_t u8g_font_p01type[] U8G_FONT_SECTION("u8g_font_p01type");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_p01typer[] U8G_SECTION(".progmem.u8g_font_p01typer");
|
extern const u8g_fntpgm_uint8_t u8g_font_p01typer[] U8G_FONT_SECTION("u8g_font_p01typer");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_p01typen[] U8G_SECTION(".progmem.u8g_font_p01typen");
|
extern const u8g_fntpgm_uint8_t u8g_font_p01typen[] U8G_FONT_SECTION("u8g_font_p01typen");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternate[] U8G_SECTION(".progmem.u8g_font_lucasfont_alternate");
|
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternate[] U8G_FONT_SECTION("u8g_font_lucasfont_alternate");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternater[] U8G_SECTION(".progmem.u8g_font_lucasfont_alternater");
|
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternater[] U8G_FONT_SECTION("u8g_font_lucasfont_alternater");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternaten[] U8G_SECTION(".progmem.u8g_font_lucasfont_alternaten");
|
extern const u8g_fntpgm_uint8_t u8g_font_lucasfont_alternaten[] U8G_FONT_SECTION("u8g_font_lucasfont_alternaten");
|
||||||
|
|
||||||
//extern const u8g_fntpgm_uint8_t u8g_font_fs_onebrickpixelfont[] U8G_SECTION(".progmem.u8g_font_fs_onebrickpixelfont");
|
extern const u8g_fntpgm_uint8_t u8g_font_chikita[] U8G_FONT_SECTION("u8g_font_chikita");
|
||||||
//extern const u8g_fntpgm_uint8_t u8g_font_fs_onebrickpixelfontr[] U8G_SECTION(".progmem.u8g_font_fs_onebrickpixelfontr");
|
extern const u8g_fntpgm_uint8_t u8g_font_chikitar[] U8G_FONT_SECTION("u8g_font_chikitar");
|
||||||
//extern const u8g_fntpgm_uint8_t u8g_font_fs_onebrickpixelfontn[] U8G_SECTION(".progmem.u8g_font_fs_onebrickpixelfontn");
|
extern const u8g_fntpgm_uint8_t u8g_font_chikitan[] U8G_FONT_SECTION("u8g_font_chikitan");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_chikita[] U8G_SECTION(".progmem.u8g_font_chikita");
|
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micro[] U8G_FONT_SECTION("u8g_font_pixelle_micro");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_chikitar[] U8G_SECTION(".progmem.u8g_font_chikitar");
|
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micror[] U8G_FONT_SECTION("u8g_font_pixelle_micror");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_chikitan[] U8G_SECTION(".progmem.u8g_font_chikitan");
|
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micron[] U8G_FONT_SECTION("u8g_font_pixelle_micron");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micro[] U8G_SECTION(".progmem.u8g_font_pixelle_micro");
|
extern const u8g_fntpgm_uint8_t u8g_font_trixel_square[] U8G_FONT_SECTION("u8g_font_trixel_square");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micror[] U8G_SECTION(".progmem.u8g_font_pixelle_micror");
|
extern const u8g_fntpgm_uint8_t u8g_font_trixel_squarer[] U8G_FONT_SECTION("u8g_font_trixel_squarer");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_pixelle_micron[] U8G_SECTION(".progmem.u8g_font_pixelle_micron");
|
extern const u8g_fntpgm_uint8_t u8g_font_trixel_squaren[] U8G_FONT_SECTION("u8g_font_trixel_squaren");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_trixel_square[] U8G_SECTION(".progmem.u8g_font_trixel_square");
|
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niro[] U8G_FONT_SECTION("u8g_font_robot_de_niro");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_trixel_squarer[] U8G_SECTION(".progmem.u8g_font_trixel_squarer");
|
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niror[] U8G_FONT_SECTION("u8g_font_robot_de_niror");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_trixel_squaren[] U8G_SECTION(".progmem.u8g_font_trixel_squaren");
|
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niron[] U8G_FONT_SECTION("u8g_font_robot_de_niron");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niro[] U8G_SECTION(".progmem.u8g_font_robot_de_niro");
|
extern const u8g_fntpgm_uint8_t u8g_font_baby[] U8G_FONT_SECTION("u8g_font_baby");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niror[] U8G_SECTION(".progmem.u8g_font_robot_de_niror");
|
extern const u8g_fntpgm_uint8_t u8g_font_babyr[] U8G_FONT_SECTION("u8g_font_babyr");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_robot_de_niron[] U8G_SECTION(".progmem.u8g_font_robot_de_niron");
|
extern const u8g_fntpgm_uint8_t u8g_font_babyn[] U8G_FONT_SECTION("u8g_font_babyn");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_baby[] U8G_SECTION(".progmem.u8g_font_baby");
|
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07[] U8G_FONT_SECTION("u8g_font_blipfest_07");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_babyr[] U8G_SECTION(".progmem.u8g_font_babyr");
|
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07r[] U8G_FONT_SECTION("u8g_font_blipfest_07r");
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_babyn[] U8G_SECTION(".progmem.u8g_font_babyn");
|
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07n[] U8G_FONT_SECTION("u8g_font_blipfest_07n");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07[] U8G_SECTION(".progmem.u8g_font_blipfest_07");
|
/* profont */
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07r[] U8G_SECTION(".progmem.u8g_font_blipfest_07r");
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_blipfest_07n[] U8G_SECTION(".progmem.u8g_font_blipfest_07n");
|
extern const u8g_fntpgm_uint8_t u8g_font_profont10[] U8G_FONT_SECTION("u8g_font_profont10");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont10r[] U8G_FONT_SECTION("u8g_font_profont10r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont11[] U8G_FONT_SECTION("u8g_font_profont11");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont11r[] U8G_FONT_SECTION("u8g_font_profont11r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont12[] U8G_FONT_SECTION("u8g_font_profont12");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont12r[] U8G_FONT_SECTION("u8g_font_profont12r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont15[] U8G_FONT_SECTION("u8g_font_profont15");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont15r[] U8G_FONT_SECTION("u8g_font_profont15r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont17[] U8G_FONT_SECTION("u8g_font_profont17");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont17r[] U8G_FONT_SECTION("u8g_font_profont17r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont22[] U8G_FONT_SECTION("u8g_font_profont22");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont22r[] U8G_FONT_SECTION("u8g_font_profont22r");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont29[] U8G_FONT_SECTION("u8g_font_profont29");
|
||||||
|
extern const u8g_fntpgm_uint8_t u8g_font_profont29r[] U8G_FONT_SECTION("u8g_font_profont29r");
|
||||||
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x10_marlin[] U8G_SECTION(".progmem.u8g_font_6x10_marlin");
|
|
||||||
extern const u8g_fntpgm_uint8_t u8g_font_6x9[] U8G_SECTION(".progmem.u8g_font_6x9");
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
uint8_t u8g_is_intersection_boolean(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
uint8_t u8g_is_intersection_boolean(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
||||||
However, this is slower than a decision tree version:
|
However, this is slower than a decision tree version:
|
||||||
static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
||||||
Also suprising is, that he the macro implementation is slower than the inlined version.
|
Also suprising is, that the macro implementation is slower than the inlined version.
|
||||||
|
|
||||||
The decision tree is based on the expansion of the truth table.
|
The decision tree is based on the expansion of the truth table.
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define U8G_ALWAYS_INLINE __attribute__((always_inline))
|
#define U8G_ALWAYS_INLINE __inline__ __attribute__((always_inline))
|
||||||
#else
|
#else
|
||||||
#define U8G_ALWAYS_INLINE
|
#define U8G_ALWAYS_INLINE
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,8 +94,8 @@ static uint8_t u8g_is_intersection_boolean(u8g_uint_t a0, u8g_uint_t a1, u8g_uin
|
||||||
|
|
||||||
#define U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1) ((uint8_t)( (v0) <= (a1) ) ? ( ( (v1) >= (a0) ) ? ( 1 ) : ( (v0) > (v1) ) ) : ( ( (v1) >= (a0) ) ? ( (v0) > (v1) ) : ( 0 ) ))
|
#define U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1) ((uint8_t)( (v0) <= (a1) ) ? ( ( (v1) >= (a0) ) ? ( 1 ) : ( (v0) > (v1) ) ) : ( ( (v1) >= (a0) ) ? ( (v0) > (v1) ) : ( 0 ) ))
|
||||||
|
|
||||||
static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1) U8G_ALWAYS_INLINE;
|
//static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1) U8G_ALWAYS_INLINE;
|
||||||
static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
static uint8_t U8G_ALWAYS_INLINE u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
|
||||||
{
|
{
|
||||||
/* surprisingly the macro leads to larger code */
|
/* surprisingly the macro leads to larger code */
|
||||||
/* return U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1); */
|
/* return U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1); */
|
||||||
|
|
|
@ -36,9 +36,9 @@
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
uint8_t u8g_InitCom(u8g_t *u8g, u8g_dev_t *dev)
|
uint8_t u8g_InitCom(u8g_t *u8g, u8g_dev_t *dev, uint8_t clk_cycle_time)
|
||||||
{
|
{
|
||||||
return dev->com_fn(u8g, U8G_COM_MSG_INIT, 0, NULL);
|
return dev->com_fn(u8g, U8G_COM_MSG_INIT, clk_cycle_time, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void u8g_StopCom(u8g_t *u8g, u8g_dev_t *dev)
|
void u8g_StopCom(u8g_t *u8g, u8g_dev_t *dev)
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_arduino_ATtiny85_std_hw_spi.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2011, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Uses code from tinySPI Written by Nick Gammon
|
||||||
|
// March 2013
|
||||||
|
|
||||||
|
// ATMEL ATTINY45 / ARDUINO pin mappings
|
||||||
|
//
|
||||||
|
// +-\/-+
|
||||||
|
// RESET Ain0 (D 5) PB5 1| |8 Vcc
|
||||||
|
// CLK1 Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1 SCK / USCK / SCL
|
||||||
|
// CLK0 Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1 MISO / DO
|
||||||
|
// GND 4| |5 PB0 (D 0) pwm0 MOSI / DI / SDA
|
||||||
|
// +----+
|
||||||
|
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(ARDUINO) && defined(__AVR_ATtiny85__)
|
||||||
|
|
||||||
|
#if ARDUINO < 100
|
||||||
|
#include <WProgram.h>
|
||||||
|
#else
|
||||||
|
#include <Arduino.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const byte DI = 0; // D0, pin 5 Data In
|
||||||
|
const byte DO = 1; // D1, pin 6 Data Out (this is *not* MOSI)
|
||||||
|
const byte USCK = 2; // D2, pin 7 Universal Serial Interface clock
|
||||||
|
|
||||||
|
uint8_t u8g_arduino_ATtiny85_spi_out(uint8_t val)
|
||||||
|
{
|
||||||
|
USIDR = val; // byte to output
|
||||||
|
USISR = _BV (USIOIF); // clear Counter Overflow Interrupt Flag, set count to zero
|
||||||
|
do
|
||||||
|
{
|
||||||
|
USICR = _BV (USIWM0) // 3-wire mode
|
||||||
|
| _BV (USICS1) | _BV (USICLK) // Software clock strobe
|
||||||
|
| _BV (USITC); // Toggle Clock Port Pin
|
||||||
|
}
|
||||||
|
while ((USISR & _BV (USIOIF)) == 0); // until Counter Overflow Interrupt Flag set
|
||||||
|
|
||||||
|
return USIDR; // return read data
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_ATtiny85_std_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH); // ensure SS stays high until needed
|
||||||
|
pinMode (USCK, OUTPUT);
|
||||||
|
pinMode (DO, OUTPUT);
|
||||||
|
pinMode (u8g->pin_list[U8G_PI_CS], OUTPUT);
|
||||||
|
pinMode (u8g->pin_list[U8G_PI_A0], OUTPUT);
|
||||||
|
USICR = _BV (USIWM0); // 3-wire mode
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable */
|
||||||
|
u8g_MicroDelay();
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
u8g_arduino_ATtiny85_spi_out(arg_val);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_arduino_ATtiny85_spi_out(*ptr++);
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_arduino_ATtiny85_spi_out(u8g_pgm_read(ptr));
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* ARDUINO */
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_ATtiny85_std_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ARDUINO */
|
|
@ -49,6 +49,12 @@
|
||||||
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
||||||
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -114,7 +120,8 @@ static void u8g_com_arduino_fast_parallel_init(u8g_t *u8g)
|
||||||
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void u8g_com_arduino_fast_write_data_pin(uint8_t pin, uint8_t val)
|
/* atomic protection must be done by calling function */
|
||||||
|
static void u8g_com_arduino_fast_write_data_pin(uint8_t pin, uint8_t val)
|
||||||
{
|
{
|
||||||
if ( val != 0 )
|
if ( val != 0 )
|
||||||
*u8g_data_port[pin] |= u8g_data_mask[pin];
|
*u8g_data_port[pin] |= u8g_data_mask[pin];
|
||||||
|
@ -125,6 +132,7 @@ void u8g_com_arduino_fast_write_data_pin(uint8_t pin, uint8_t val)
|
||||||
|
|
||||||
void u8g_com_arduino_fast_parallel_write(u8g_t *u8g, uint8_t val)
|
void u8g_com_arduino_fast_parallel_write(u8g_t *u8g, uint8_t val)
|
||||||
{
|
{
|
||||||
|
U8G_ATOMIC_START();
|
||||||
u8g_com_arduino_fast_write_data_pin( 0, val&1 );
|
u8g_com_arduino_fast_write_data_pin( 0, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_fast_write_data_pin( 1, val&1 );
|
u8g_com_arduino_fast_write_data_pin( 1, val&1 );
|
||||||
|
@ -142,6 +150,7 @@ void u8g_com_arduino_fast_parallel_write(u8g_t *u8g, uint8_t val)
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_fast_write_data_pin( 7, val&1 );
|
u8g_com_arduino_fast_write_data_pin( 7, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
/* EN cycle time must be 1 micro second */
|
/* EN cycle time must be 1 micro second */
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
|
||||||
|
|
|
@ -31,6 +31,98 @@
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
SPI Clock Cycle Type
|
||||||
|
|
||||||
|
SSD1351 50ns 20 MHz
|
||||||
|
SSD1322 300ns 3.3 MHz
|
||||||
|
SSD1327 300ns
|
||||||
|
SSD1306 300ns
|
||||||
|
ST7565 400ns 2.5 MHz
|
||||||
|
ST7920 400ns
|
||||||
|
|
||||||
|
Arduino DUE
|
||||||
|
|
||||||
|
PA25 MISO
|
||||||
|
PA26 MOSI 75
|
||||||
|
PA27 SCLK 76
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
WoReg SPI_CR; (Spi Offset: 0x00) Control Register
|
||||||
|
RwReg SPI_MR; (Spi Offset: 0x04) Mode Register
|
||||||
|
RoReg SPI_RDR; (Spi Offset: 0x08) Receive Data Register
|
||||||
|
WoReg SPI_TDR; (Spi Offset: 0x0C) Transmit Data Register
|
||||||
|
RoReg SPI_SR; (Spi Offset: 0x10) Status Register
|
||||||
|
WoReg SPI_IER; (Spi Offset: 0x14) Interrupt Enable Register
|
||||||
|
WoReg SPI_IDR; (Spi Offset: 0x18) Interrupt Disable Register
|
||||||
|
RoReg SPI_IMR; (Spi Offset: 0x1C) Interrupt Mask Register
|
||||||
|
RoReg Reserved1[4];
|
||||||
|
RwReg SPI_CSR[4]; (Spi Offset: 0x30) Chip Select Register
|
||||||
|
RoReg Reserved2[41];
|
||||||
|
RwReg SPI_WPMR; (Spi Offset: 0xE4) Write Protection Control Register
|
||||||
|
RoReg SPI_WPSR; (Spi Offset: 0xE8) Write Protection Status Register
|
||||||
|
} Spi;
|
||||||
|
|
||||||
|
Power Management Controller (PMC)
|
||||||
|
arduino-1.5.2/hardware/arduino/sam/system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_pmc.h
|
||||||
|
- enable PIO
|
||||||
|
|
||||||
|
REG_PMC_PCER0 = 1UL << ID_PIOA
|
||||||
|
- enable SPI
|
||||||
|
REG_PMC_PCER0 = 1UL << ID_SPI0
|
||||||
|
|
||||||
|
|
||||||
|
- enable PIOA and SPI0
|
||||||
|
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
|
||||||
|
|
||||||
|
Parallel Input/Output Controller (PIO)
|
||||||
|
arduino-1.5.2/hardware/arduino/sam/system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_pioa.h
|
||||||
|
- enable special function of the pin: disable PIO on A26 and A27:
|
||||||
|
REG_PIOA_PDR = 0x0c000000
|
||||||
|
PIOA->PIO_PDR = 0x0c000000
|
||||||
|
|
||||||
|
SPI
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIDIS
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST ;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST ;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIEN
|
||||||
|
|
||||||
|
Bit 0: Master Mode = 1 (active)
|
||||||
|
Bit 1: Peripheral Select = 0 (fixed)
|
||||||
|
Bit 2: Chip Select Decode Mode = 1 (4 to 16)
|
||||||
|
Bit 4: Mode Fault Detection = 1 (disabled)
|
||||||
|
Bit 5: Wait Data Read = 0 (disabled)
|
||||||
|
Bit 7: Loop Back Mode = 0 (disabled)
|
||||||
|
Bit 16-19: Peripheral Chip Select = 0 (chip select 0)
|
||||||
|
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS
|
||||||
|
|
||||||
|
Bit 0: Clock Polarity = 0
|
||||||
|
Bit 1: Clock Phase = 0
|
||||||
|
Bit 4-7: Bits = 0 (8 Bit)
|
||||||
|
Bit 8-15: SCBR = 1
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(x) Serial Baud Rate
|
||||||
|
SCBR / 84000000 > 50 / 1000000000
|
||||||
|
SCBR / 84 > 5 / 100
|
||||||
|
SCBR > 50 *84 / 1000 --> SCBR=5
|
||||||
|
SCBR > 300*84 / 1000 --> SCBR=26
|
||||||
|
SCBR > 400*84 / 1000 --> SCBR=34
|
||||||
|
|
||||||
|
Arduino Due test code:
|
||||||
|
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
|
||||||
|
REG_PIOA_PDR = 0x0c000000;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIDIS;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIEN;
|
||||||
|
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS;
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(30);
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
while( (SPI0->SPI_SR & SPI_SR_TDRE) == 0 )
|
||||||
|
;
|
||||||
|
SPI0->SPI_TDR = 0x050;
|
||||||
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -39,6 +131,17 @@
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
|
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
|
#define U8G_ARDUINO_ATMEGA_HW_SPI
|
||||||
|
/* remove the definition for attiny */
|
||||||
|
#if __AVR_ARCH__ == 2
|
||||||
|
#undef U8G_ARDUINO_ATMEGA_HW_SPI
|
||||||
|
#endif
|
||||||
|
#if __AVR_ARCH__ == 25
|
||||||
|
#undef U8G_ARDUINO_ATMEGA_HW_SPI
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(U8G_ARDUINO_ATMEGA_HW_SPI)
|
||||||
|
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
@ -115,11 +218,17 @@ uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
||||||
1 1 fclk/128
|
1 1 fclk/128
|
||||||
*/
|
*/
|
||||||
SPCR = 0;
|
SPCR = 0;
|
||||||
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(1<<SPR0)|(0<<CPOL)|(0<<CPHA);
|
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
|
||||||
#ifdef U8G_HW_SPI_2X
|
#ifdef U8G_HW_SPI_2X
|
||||||
SPSR = (1 << SPI2X); /* double speed, issue 89 */
|
SPSR = (1 << SPI2X); /* double speed, issue 89 */
|
||||||
|
#else
|
||||||
|
if ( arg_val <= U8G_SPI_CLK_CYCLE_50NS )
|
||||||
|
{
|
||||||
|
SPSR = (1 << SPI2X); /* double speed, issue 89 */
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
@ -176,9 +285,147 @@ uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
||||||
|
|
||||||
/* #elif defined(__18CXX) || defined(__PIC32MX) */
|
/* #elif defined(__18CXX) || defined(__PIC32MX) */
|
||||||
|
|
||||||
#else /* __AVR__ */
|
#elif defined(__SAM3X8E__) // Arduino Due, maybe we should better check for __SAM3X8E__
|
||||||
|
|
||||||
#endif /* __AVR__ */
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
/* use Arduino pin definitions */
|
||||||
|
#define PIN_SCK SCK
|
||||||
|
#define PIN_MISO MISO
|
||||||
|
#define PIN_MOSI MOSI
|
||||||
|
#define PIN_CS SS
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t u8g_spi_out(uint8_t data)
|
||||||
|
{
|
||||||
|
/* wait until tx register is empty */
|
||||||
|
while( (SPI0->SPI_SR & SPI_SR_TDRE) == 0 )
|
||||||
|
;
|
||||||
|
/* send data */
|
||||||
|
SPI0->SPI_TDR = (uint32_t)data;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
u8g_com_arduino_assign_pin_output_high(u8g);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
|
||||||
|
/* Arduino Due specific code */
|
||||||
|
|
||||||
|
/* enable PIOA and SPI0 */
|
||||||
|
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
|
||||||
|
|
||||||
|
/* disable PIO on A26 and A27 */
|
||||||
|
REG_PIOA_PDR = 0x0c000000;
|
||||||
|
|
||||||
|
/* reset SPI0 (from sam lib) */
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIDIS;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SWRST;
|
||||||
|
SPI0->SPI_CR = SPI_CR_SPIEN;
|
||||||
|
u8g_MicroDelay();
|
||||||
|
|
||||||
|
/* master mode, no fault detection, chip select 0 */
|
||||||
|
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS;
|
||||||
|
|
||||||
|
/* Polarity, Phase, 8 Bit data transfer, baud rate */
|
||||||
|
/* x * 1000 / 84 --> clock cycle in ns
|
||||||
|
5 * 1000 / 84 = 58 ns
|
||||||
|
SCBR > 50 *84 / 1000 --> SCBR=5
|
||||||
|
SCBR > 300*84 / 1000 --> SCBR=26
|
||||||
|
SCBR > 400*84 / 1000 --> SCBR=34
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ( arg_val <= U8G_SPI_CLK_CYCLE_50NS )
|
||||||
|
{
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(5) | 1;
|
||||||
|
}
|
||||||
|
else if ( arg_val <= U8G_SPI_CLK_CYCLE_300NS )
|
||||||
|
{
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(26) | 1;
|
||||||
|
}
|
||||||
|
else if ( arg_val <= U8G_SPI_CLK_CYCLE_400NS )
|
||||||
|
{
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(34) | 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(84) | 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable */
|
||||||
|
u8g_MicroDelay(); /* this delay is required to avoid that the display is switched off too early --> DOGS102 with DUE */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable */
|
||||||
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
u8g_spi_out(arg_val);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_spi_out(*ptr++);
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_spi_out(u8g_pgm_read(ptr));
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#else /* U8G_ARDUINO_ATMEGA_HW_SPI */
|
||||||
|
|
||||||
|
#endif /* U8G_ARDUINO_ATMEGA_HW_SPI */
|
||||||
|
|
||||||
#else /* ARDUINO */
|
#else /* ARDUINO */
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_com_arduino_hw_usart_spi.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2011, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
SPI Clock Cycle Type
|
||||||
|
|
||||||
|
SSD1351 50ns 20 MHz
|
||||||
|
SSD1322 300ns 3.3 MHz
|
||||||
|
SSD1327 300ns
|
||||||
|
SSD1306 300ns
|
||||||
|
ST7565 400ns 2.5 MHz
|
||||||
|
ST7920 400ns
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#if defined(ARDUINO)
|
||||||
|
|
||||||
|
#if defined(__AVR_ATmega32U4__ )
|
||||||
|
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#if ARDUINO < 100
|
||||||
|
#include <WProgram.h>
|
||||||
|
#else
|
||||||
|
#include <Arduino.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t u8g_usart_spi_out(uint8_t data)
|
||||||
|
{
|
||||||
|
/* send data */
|
||||||
|
UDR1 = data;
|
||||||
|
/* wait for empty transmit buffer */
|
||||||
|
while(!(UCSR1A & (1 << UDRE1)));
|
||||||
|
|
||||||
|
return UDR1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_hw_usart_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
/* SCK is already an output as we overwrite TXLED */
|
||||||
|
u8g_com_arduino_assign_pin_output_high(u8g);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
|
||||||
|
// Init interface at 2MHz
|
||||||
|
UBRR1 = 0x00;
|
||||||
|
UCSR1C = (1 << UMSEL11) | (1 << UMSEL10);
|
||||||
|
UCSR1B = (1 << TXEN1);
|
||||||
|
UBRR1 = 3;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
u8g_usart_spi_out(arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_usart_spi_out(*ptr++);
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_usart_spi_out(u8g_pgm_read(ptr));
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #elif defined(__18CXX) || defined(__PIC32MX) */
|
||||||
|
/* #elif defined(__arm__) // Arduino Due, maybe we should better check for __SAM3X8E__ */
|
||||||
|
|
||||||
|
#else /* __AVR_ATmega32U4__ */
|
||||||
|
|
||||||
|
#endif /* __AVR_ATmega32U4__ */
|
||||||
|
|
||||||
|
#else /* ARDUINO */
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_hw_usart_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ARDUINO */
|
||||||
|
|
|
@ -48,6 +48,12 @@
|
||||||
|
|
||||||
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
||||||
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -97,17 +103,23 @@ static void u8g_com_arduino_no_en_parallel_init(u8g_t *u8g)
|
||||||
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void u8g_com_arduino_no_en_write_data_pin(uint8_t pin, uint8_t val)
|
/* No atomic protcetion. This is done by caller */
|
||||||
|
static void u8g_com_arduino_no_en_write_data_pin(uint8_t pin, uint8_t val)
|
||||||
{
|
{
|
||||||
if ( val != 0 )
|
if ( val != 0 )
|
||||||
|
{
|
||||||
*u8g_data_port[pin] |= u8g_data_mask[pin];
|
*u8g_data_port[pin] |= u8g_data_mask[pin];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
*u8g_data_port[pin] &= ~u8g_data_mask[pin];
|
*u8g_data_port[pin] &= ~u8g_data_mask[pin];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void u8g_com_arduino_no_en_parallel_write(u8g_t *u8g, uint8_t val)
|
void u8g_com_arduino_no_en_parallel_write(u8g_t *u8g, uint8_t val)
|
||||||
{
|
{
|
||||||
|
U8G_ATOMIC_START();
|
||||||
u8g_com_arduino_no_en_write_data_pin( 0, val&1 );
|
u8g_com_arduino_no_en_write_data_pin( 0, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_no_en_write_data_pin( 1, val&1 );
|
u8g_com_arduino_no_en_write_data_pin( 1, val&1 );
|
||||||
|
@ -125,6 +137,7 @@ void u8g_com_arduino_no_en_parallel_write(u8g_t *u8g, uint8_t val)
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_no_en_write_data_pin( 7, val&1 );
|
u8g_com_arduino_no_en_write_data_pin( 7, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
|
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
|
||||||
if ( u8g->pin_list[U8G_PI_CS_STATE] == 1 )
|
if ( u8g->pin_list[U8G_PI_CS_STATE] == 1 )
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
u8g_arduino_parallel.c
|
u8g_com_arduino_parallel.c
|
||||||
|
|
||||||
Universal 8bit Graphics Library
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
@ -87,13 +87,10 @@ void u8g_com_arduino_parallel_write(u8g_t *u8g, uint8_t val)
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_D7, val&1);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_D7, val&1);
|
||||||
|
|
||||||
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
|
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
|
||||||
//u8g_Delay(1);
|
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
|
||||||
//u8g_Delay(1);
|
|
||||||
u8g_MicroDelay(); /* delay by 1000ns, reference: ST7920: 140ns, SBN1661: 100ns */
|
u8g_MicroDelay(); /* delay by 1000ns, reference: ST7920: 140ns, SBN1661: 100ns */
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, LOW);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, LOW);
|
||||||
u8g_10MicroDelay(); /* ST7920 commands: 72us */
|
u8g_10MicroDelay(); /* ST7920 commands: 72us */
|
||||||
//u8g_Delay(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,13 @@
|
||||||
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
|
||||||
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
|
||||||
|
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -80,8 +87,10 @@ uint8_t u8g_com_arduino_port_d_wr_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, v
|
||||||
#ifdef UCSR0B
|
#ifdef UCSR0B
|
||||||
UCSR0B = 0; // disable USART 0
|
UCSR0B = 0; // disable USART 0
|
||||||
#endif
|
#endif
|
||||||
|
U8G_ATOMIC_START();
|
||||||
DDRD = 0x0ff;
|
DDRD = 0x0ff;
|
||||||
PORTD = 0x0ff;
|
PORTD = 0x0ff;
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
/* setup the RW pin as output and force it to low */
|
/* setup the RW pin as output and force it to low */
|
||||||
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
|
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
|
||||||
|
|
|
@ -54,12 +54,14 @@
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
|
||||||
|
|
||||||
#define I2C_SLA (0x3c*2)
|
#define I2C_SLA (0x3c*2)
|
||||||
//#define I2C_CMD_MODE 0x080
|
//#define I2C_CMD_MODE 0x080
|
||||||
#define I2C_CMD_MODE 0x000
|
#define I2C_CMD_MODE 0x000
|
||||||
#define I2C_DATA_MODE 0x040
|
#define I2C_DATA_MODE 0x040
|
||||||
|
|
||||||
|
|
||||||
uint8_t u8g_com_arduino_ssd_start_sequence(u8g_t *u8g)
|
uint8_t u8g_com_arduino_ssd_start_sequence(u8g_t *u8g)
|
||||||
{
|
{
|
||||||
/* are we requested to set the a0 state? */
|
/* are we requested to set the a0 state? */
|
||||||
|
@ -80,7 +82,6 @@ uint8_t u8g_com_arduino_ssd_start_sequence(u8g_t *u8g)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
u8g->pin_list[U8G_PI_SET_A0] = 0;
|
u8g->pin_list[U8G_PI_SET_A0] = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -199,3 +200,13 @@ uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, voi
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,330 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_com_arduino_st7920_custom.c
|
||||||
|
|
||||||
|
Additional COM device, initially introduced for 3D Printer community
|
||||||
|
Implements a fast SW SPI com subsystem
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2011, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
A special SPI interface for ST7920 controller
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#if defined(ARDUINO)
|
||||||
|
|
||||||
|
#if ARDUINO < 100
|
||||||
|
#include <WProgram.h>
|
||||||
|
#include "wiring_private.h"
|
||||||
|
#include "pins_arduino.h"
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "wiring_private.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__AVR__)
|
||||||
|
|
||||||
|
static uint8_t u8g_bitData, u8g_bitNotData;
|
||||||
|
static uint8_t u8g_bitClock, u8g_bitNotClock;
|
||||||
|
static volatile uint8_t *u8g_outData;
|
||||||
|
static volatile uint8_t *u8g_outClock;
|
||||||
|
|
||||||
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
|
{
|
||||||
|
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
|
||||||
|
u8g_outClock = portOutputRegister(digitalPinToPort(clockPin));
|
||||||
|
u8g_bitData = digitalPinToBitMask(dataPin);
|
||||||
|
u8g_bitClock = digitalPinToBitMask(clockPin);
|
||||||
|
|
||||||
|
u8g_bitNotClock = u8g_bitClock;
|
||||||
|
u8g_bitNotClock ^= 0x0ff;
|
||||||
|
|
||||||
|
u8g_bitNotData = u8g_bitData;
|
||||||
|
u8g_bitNotData ^= 0x0ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val) U8G_NOINLINE;
|
||||||
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t cnt = 8;
|
||||||
|
uint8_t bitData = u8g_bitData;
|
||||||
|
uint8_t bitNotData = u8g_bitNotData;
|
||||||
|
uint8_t bitClock = u8g_bitClock;
|
||||||
|
uint8_t bitNotClock = u8g_bitNotClock;
|
||||||
|
volatile uint8_t *outData = u8g_outData;
|
||||||
|
volatile uint8_t *outClock = u8g_outClock;
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
bitData |= *outData;
|
||||||
|
bitNotData &= *outData;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( val & 128 )
|
||||||
|
*outData = bitData;
|
||||||
|
else
|
||||||
|
*outData = bitNotData;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*outClock |= bitClock;
|
||||||
|
val <<= 1;
|
||||||
|
cnt--;
|
||||||
|
*outClock &= bitNotClock;
|
||||||
|
*/
|
||||||
|
|
||||||
|
val <<= 1;
|
||||||
|
*outClock &= bitNotClock;
|
||||||
|
cnt--;
|
||||||
|
// removed micro delays, because AVRs are too slow and the delay is not required
|
||||||
|
//u8g_MicroDelay();
|
||||||
|
*outClock |= bitClock;
|
||||||
|
//u8g_MicroDelay();
|
||||||
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__18CXX) || defined(__PIC32MX)
|
||||||
|
|
||||||
|
uint16_t dog_bitData, dog_bitNotData;
|
||||||
|
uint16_t dog_bitClock, dog_bitNotClock;
|
||||||
|
volatile uint32_t *dog_outData;
|
||||||
|
volatile uint32_t *dog_outClock;
|
||||||
|
volatile uint32_t dog_pic32_spi_tmp;
|
||||||
|
|
||||||
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
|
{
|
||||||
|
dog_outData = portOutputRegister(digitalPinToPort(dataPin));
|
||||||
|
dog_outClock = portOutputRegister(digitalPinToPort(clockPin));
|
||||||
|
dog_bitData = digitalPinToBitMask(dataPin);
|
||||||
|
dog_bitClock = digitalPinToBitMask(clockPin);
|
||||||
|
|
||||||
|
dog_bitNotClock = dog_bitClock;
|
||||||
|
dog_bitNotClock ^= 0x0ffff;
|
||||||
|
|
||||||
|
dog_bitNotData = dog_bitData;
|
||||||
|
dog_bitNotData ^= 0x0ffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t cnt = 8;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( val & 128 )
|
||||||
|
*dog_outData |= dog_bitData;
|
||||||
|
else
|
||||||
|
*dog_outData &= dog_bitNotData;
|
||||||
|
val <<= 1;
|
||||||
|
//u8g_MicroDelay();
|
||||||
|
//*dog_outClock |= dog_bitClock;
|
||||||
|
*dog_outClock &= dog_bitNotClock;
|
||||||
|
cnt--;
|
||||||
|
u8g_MicroDelay();
|
||||||
|
//*dog_outClock &= dog_bitNotClock;
|
||||||
|
*dog_outClock |= dog_bitClock;
|
||||||
|
u8g_MicroDelay();
|
||||||
|
|
||||||
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* default interface, Arduino DUE (__arm__) */
|
||||||
|
|
||||||
|
uint8_t u8g_data_custom_pin;
|
||||||
|
uint8_t u8g_clock_custom_pin;
|
||||||
|
|
||||||
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
|
{
|
||||||
|
u8g_data_custom_pin = dataPin;
|
||||||
|
u8g_clock_custom_pin = clockPin;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t cnt = 8;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( val & 128 )
|
||||||
|
digitalWrite(u8g_data_custom_pin, HIGH);
|
||||||
|
else
|
||||||
|
digitalWrite(u8g_data_custom_pin, LOW);
|
||||||
|
val <<= 1;
|
||||||
|
//u8g_MicroDelay();
|
||||||
|
digitalWrite(u8g_clock_custom_pin, LOW);
|
||||||
|
cnt--;
|
||||||
|
u8g_MicroDelay();
|
||||||
|
digitalWrite(u8g_clock_custom_pin, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
} while( cnt != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static void u8g_com_arduino_st7920_write_byte_seq(uint8_t rs, uint8_t *ptr, uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if ( rs == 0 )
|
||||||
|
{
|
||||||
|
/* command */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0f8);
|
||||||
|
}
|
||||||
|
else if ( rs == 1 )
|
||||||
|
{
|
||||||
|
/* data */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
while( len > 0 )
|
||||||
|
{
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(*ptr & 0x0f0);
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(*ptr << 4);
|
||||||
|
ptr++;
|
||||||
|
len--;
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0; i < 4; i++ )
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_com_arduino_st7920_write_byte(uint8_t rs, uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if ( rs == 0 )
|
||||||
|
{
|
||||||
|
/* command */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0f8);
|
||||||
|
}
|
||||||
|
else if ( rs == 1 )
|
||||||
|
{
|
||||||
|
/* data */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(val & 0x0f0);
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(val << 4);
|
||||||
|
|
||||||
|
for( i = 0; i < 4; i++ )
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_st7920_custom_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
u8g_com_arduino_assign_pin_output_high(u8g);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
// u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_MOSI, LOW);
|
||||||
|
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable, note: the st7920 has an active high chip select */
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable */
|
||||||
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
|
||||||
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
u8g_com_arduino_st7920_write_byte( u8g->pin_list[U8G_PI_A0_STATE], arg_val);
|
||||||
|
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
|
||||||
|
//u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
u8g_com_arduino_st7920_write_byte_seq(u8g->pin_list[U8G_PI_A0_STATE], (uint8_t *)arg_ptr, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
u8g_com_arduino_st7920_write_byte(u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr) );
|
||||||
|
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* ARDUINO */
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_st7920_custom_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ARDUINO */
|
||||||
|
|
|
@ -54,10 +54,10 @@
|
||||||
|
|
||||||
/* remove the definition for attiny */
|
/* remove the definition for attiny */
|
||||||
#if __AVR_ARCH__ == 2
|
#if __AVR_ARCH__ == 2
|
||||||
#undef U8G_ATMEGA_HW_SPI
|
#undef U8G_ARDUINO_ATMEGA_HW_SPI
|
||||||
#endif
|
#endif
|
||||||
#if __AVR_ARCH__ == 25
|
#if __AVR_ARCH__ == 25
|
||||||
#undef U8G_ATMEGA_HW_SPI
|
#undef U8G_ARDUINO_ATMEGA_HW_SPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -68,6 +68,33 @@
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if ARDUINO < 100
|
||||||
|
|
||||||
|
/* fixed pins */
|
||||||
|
#if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) // Sanguino.cc board
|
||||||
|
#define PIN_SCK 7
|
||||||
|
#define PIN_MISO 6
|
||||||
|
#define PIN_MOSI 5
|
||||||
|
#define PIN_CS 4
|
||||||
|
#else // Arduino Board
|
||||||
|
#define PIN_SCK 13
|
||||||
|
#define PIN_MISO 12
|
||||||
|
#define PIN_MOSI 11
|
||||||
|
#define PIN_CS 10
|
||||||
|
#endif // (__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* use Arduino pin definitions */
|
||||||
|
#define PIN_SCK SCK
|
||||||
|
#define PIN_MISO MISO
|
||||||
|
#define PIN_MOSI MOSI
|
||||||
|
#define PIN_CS SS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
|
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
|
||||||
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
|
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
|
||||||
{
|
{
|
||||||
|
@ -81,6 +108,34 @@ static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void u8g_com_arduino_st7920_write_byte_hw_spi_seq(u8g_t *u8g, uint8_t rs, uint8_t *ptr, uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if ( rs == 0 )
|
||||||
|
{
|
||||||
|
/* command */
|
||||||
|
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0f8);
|
||||||
|
}
|
||||||
|
else if ( rs == 1 )
|
||||||
|
{
|
||||||
|
/* data */
|
||||||
|
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
while( len > 0 )
|
||||||
|
{
|
||||||
|
u8g_arduino_st7920_hw_spi_shift_out(u8g, *ptr & 0x0f0);
|
||||||
|
u8g_arduino_st7920_hw_spi_shift_out(u8g, *ptr << 4);
|
||||||
|
ptr++;
|
||||||
|
len--;
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0; i < 4; i++ )
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
|
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
|
||||||
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val)
|
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val)
|
||||||
{
|
{
|
||||||
|
@ -115,14 +170,29 @@ uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
|
||||||
{
|
{
|
||||||
case U8G_COM_MSG_INIT:
|
case U8G_COM_MSG_INIT:
|
||||||
u8g_com_arduino_assign_pin_output_high(u8g);
|
u8g_com_arduino_assign_pin_output_high(u8g);
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
|
||||||
|
|
||||||
|
|
||||||
|
/* code from u8g_com-arduino_hw_spi.c */
|
||||||
|
pinMode(PIN_SCK, OUTPUT);
|
||||||
|
digitalWrite(PIN_SCK, LOW);
|
||||||
|
pinMode(PIN_MOSI, OUTPUT);
|
||||||
|
digitalWrite(PIN_MOSI, LOW);
|
||||||
|
/* pinMode(PIN_MISO, INPUT); */
|
||||||
|
|
||||||
|
pinMode(PIN_CS, OUTPUT); /* system chip select for the atmega board */
|
||||||
|
digitalWrite(PIN_CS, HIGH);
|
||||||
|
|
||||||
|
|
||||||
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
|
||||||
|
#ifdef OBSOLETE
|
||||||
DDRB |= _BV(3); /* D0, MOSI */
|
DDRB |= _BV(3); /* D0, MOSI */
|
||||||
DDRB |= _BV(5); /* SCK */
|
DDRB |= _BV(5); /* SCK */
|
||||||
DDRB |= _BV(2); /* slave select */
|
DDRB |= _BV(2); /* slave select */
|
||||||
|
|
||||||
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
||||||
PORTB &= ~_BV(5); /* SCK = 0 */
|
PORTB &= ~_BV(5); /* SCK = 0 */
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SPR1 SPR0
|
SPR1 SPR0
|
||||||
|
@ -170,15 +240,18 @@ uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_WRITE_SEQ:
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
u8g_com_arduino_st7920_write_byte_hw_spi_seq(u8g, u8g->pin_list[U8G_PI_A0_STATE], (uint8_t *)arg_ptr, arg_val);
|
||||||
|
/*
|
||||||
{
|
{
|
||||||
register uint8_t *ptr = arg_ptr;
|
register uint8_t *ptr = arg_ptr;
|
||||||
while( arg_val > 0 )
|
while( arg_val > 0 )
|
||||||
{
|
{
|
||||||
u8g_com_arduino_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
|
u8g_com_arduino_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
|
||||||
// u8g->pin_list[U8G_PI_A0_STATE] = 2;
|
|
||||||
arg_val--;
|
arg_val--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_WRITE_SEQ_P:
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
|
|
@ -33,6 +33,13 @@
|
||||||
|
|
||||||
A special SPI interface for ST7920 controller
|
A special SPI interface for ST7920 controller
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -51,10 +58,10 @@
|
||||||
|
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
|
|
||||||
uint8_t u8g_bitData, u8g_bitNotData;
|
static uint8_t u8g_bitData, u8g_bitNotData;
|
||||||
uint8_t u8g_bitClock, u8g_bitNotClock;
|
static uint8_t u8g_bitClock, u8g_bitNotClock;
|
||||||
volatile uint8_t *u8g_outData;
|
static volatile uint8_t *u8g_outData;
|
||||||
volatile uint8_t *u8g_outClock;
|
static volatile uint8_t *u8g_outClock;
|
||||||
|
|
||||||
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
{
|
{
|
||||||
|
@ -80,12 +87,17 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
uint8_t bitNotClock = u8g_bitNotClock;
|
uint8_t bitNotClock = u8g_bitNotClock;
|
||||||
volatile uint8_t *outData = u8g_outData;
|
volatile uint8_t *outData = u8g_outData;
|
||||||
volatile uint8_t *outClock = u8g_outClock;
|
volatile uint8_t *outClock = u8g_outClock;
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
bitData |= *outData;
|
||||||
|
bitNotData &= *outData;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( val & 128 )
|
if ( val & 128 )
|
||||||
*outData |= bitData;
|
*outData = bitData;
|
||||||
else
|
else
|
||||||
*outData &= bitNotData;
|
*outData = bitNotData;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*outClock |= bitClock;
|
*outClock |= bitClock;
|
||||||
|
@ -102,6 +114,7 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
*outClock |= bitClock;
|
*outClock |= bitClock;
|
||||||
//u8g_MicroDelay();
|
//u8g_MicroDelay();
|
||||||
} while( cnt != 0 );
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__18CXX) || defined(__PIC32MX)
|
#elif defined(__18CXX) || defined(__PIC32MX)
|
||||||
|
@ -129,6 +142,7 @@ static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
{
|
{
|
||||||
uint8_t cnt = 8;
|
uint8_t cnt = 8;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( val & 128 )
|
if ( val & 128 )
|
||||||
|
@ -146,6 +160,7 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
u8g_MicroDelay();
|
u8g_MicroDelay();
|
||||||
|
|
||||||
} while( cnt != 0 );
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -183,7 +198,33 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static void u8g_com_arduino_st7920_write_byte_seq(uint8_t rs, uint8_t *ptr, uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if ( rs == 0 )
|
||||||
|
{
|
||||||
|
/* command */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0f8);
|
||||||
|
}
|
||||||
|
else if ( rs == 1 )
|
||||||
|
{
|
||||||
|
/* data */
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(0x0fa);
|
||||||
|
}
|
||||||
|
|
||||||
|
while( len > 0 )
|
||||||
|
{
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(*ptr & 0x0f0);
|
||||||
|
u8g_com_arduino_do_shift_out_msb_first(*ptr << 4);
|
||||||
|
ptr++;
|
||||||
|
len--;
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = 0; i < 4; i++ )
|
||||||
|
u8g_10MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
static void u8g_com_arduino_st7920_write_byte(uint8_t rs, uint8_t val)
|
static void u8g_com_arduino_st7920_write_byte(uint8_t rs, uint8_t val)
|
||||||
{
|
{
|
||||||
|
@ -209,7 +250,6 @@ static void u8g_com_arduino_st7920_write_byte(uint8_t rs, uint8_t val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
{
|
{
|
||||||
switch(msg)
|
switch(msg)
|
||||||
|
@ -243,6 +283,9 @@ uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val,
|
||||||
/* enable */
|
/* enable */
|
||||||
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
|
||||||
|
/* 28 Dec 2013 reassign pins, fixes issue with more than one display */
|
||||||
|
/* issue 227 */
|
||||||
|
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -253,15 +296,7 @@ uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_WRITE_SEQ:
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
{
|
u8g_com_arduino_st7920_write_byte_seq(u8g->pin_list[U8G_PI_A0_STATE], (uint8_t *)arg_ptr, arg_val);
|
||||||
register uint8_t *ptr = arg_ptr;
|
|
||||||
while( arg_val > 0 )
|
|
||||||
{
|
|
||||||
u8g_com_arduino_st7920_write_byte(u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
|
|
||||||
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
|
|
||||||
arg_val--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_WRITE_SEQ_P:
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
|
@ -31,6 +31,12 @@
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -48,6 +54,9 @@
|
||||||
#include "wiring_private.h"
|
#include "wiring_private.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*=========================================================*/
|
||||||
|
/* Arduino, AVR */
|
||||||
|
|
||||||
#if defined(__AVR__)
|
#if defined(__AVR__)
|
||||||
|
|
||||||
uint8_t u8g_bitData, u8g_bitNotData;
|
uint8_t u8g_bitData, u8g_bitNotData;
|
||||||
|
@ -79,6 +88,7 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
uint8_t bitNotClock = u8g_bitNotClock;
|
uint8_t bitNotClock = u8g_bitNotClock;
|
||||||
volatile uint8_t *outData = u8g_outData;
|
volatile uint8_t *outData = u8g_outData;
|
||||||
volatile uint8_t *outClock = u8g_outClock;
|
volatile uint8_t *outClock = u8g_outClock;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( val & 128 )
|
if ( val & 128 )
|
||||||
|
@ -91,8 +101,11 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
cnt--;
|
cnt--;
|
||||||
*outClock &= bitNotClock;
|
*outClock &= bitNotClock;
|
||||||
} while( cnt != 0 );
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*=========================================================*/
|
||||||
|
/* Arduino, Chipkit */
|
||||||
#elif defined(__18CXX) || defined(__PIC32MX)
|
#elif defined(__18CXX) || defined(__PIC32MX)
|
||||||
|
|
||||||
uint16_t dog_bitData, dog_bitNotData;
|
uint16_t dog_bitData, dog_bitNotData;
|
||||||
|
@ -118,6 +131,7 @@ static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
{
|
{
|
||||||
uint8_t cnt = 8;
|
uint8_t cnt = 8;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( val & 128 )
|
if ( val & 128 )
|
||||||
|
@ -142,8 +156,54 @@ static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
dog_pic32_spi_tmp = *dog_outClock;
|
dog_pic32_spi_tmp = *dog_outClock;
|
||||||
dog_pic32_spi_tmp = *dog_outClock;
|
dog_pic32_spi_tmp = *dog_outClock;
|
||||||
} while( cnt != 0 );
|
} while( cnt != 0 );
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*=========================================================*/
|
||||||
|
/* Arduino Due */
|
||||||
|
#elif defined(__SAM3X8E__)
|
||||||
|
|
||||||
|
/* Due */
|
||||||
|
|
||||||
|
void u8g_digital_write_sam_high(uint8_t pin)
|
||||||
|
{
|
||||||
|
PIO_Set( g_APinDescription[pin].pPort, g_APinDescription[pin].ulPin) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_digital_write_sam_low(uint8_t pin)
|
||||||
|
{
|
||||||
|
PIO_Clear( g_APinDescription[pin].pPort, g_APinDescription[pin].ulPin) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t u8g_sam_data_pin;
|
||||||
|
static uint8_t u8g_sam_clock_pin;
|
||||||
|
|
||||||
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
|
||||||
|
{
|
||||||
|
u8g_sam_data_pin = dataPin;
|
||||||
|
u8g_sam_clock_pin = clockPin;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t i = 8;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( val & 128 )
|
||||||
|
u8g_digital_write_sam_high(u8g_sam_data_pin);
|
||||||
|
else
|
||||||
|
u8g_digital_write_sam_low(u8g_sam_data_pin);
|
||||||
|
val <<= 1;
|
||||||
|
//u8g_MicroDelay();
|
||||||
|
u8g_digital_write_sam_high(u8g_sam_clock_pin);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
u8g_digital_write_sam_low(u8g_sam_clock_pin);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
i--;
|
||||||
|
} while( i != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* empty interface */
|
/* empty interface */
|
||||||
|
|
||||||
|
@ -188,6 +248,8 @@ uint8_t u8g_com_arduino_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
||||||
/* enable */
|
/* enable */
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
|
/* issue 227 */
|
||||||
|
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,13 @@
|
||||||
u8g_InitRW8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset)
|
u8g_InitRW8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset)
|
||||||
u8g_InitRW8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16)
|
u8g_InitRW8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16)
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -123,8 +130,10 @@ static void u8g_com_arduino_t6963_init(u8g_t *u8g)
|
||||||
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void u8g_com_arduino_t6963_write_data_pin(uint8_t pin, uint8_t val)
|
static void u8g_com_arduino_t6963_write_data_pin(uint8_t pin, uint8_t val)
|
||||||
{
|
{
|
||||||
|
/* no ATOMIC protection required here, this is done by calling procedure */
|
||||||
if ( val != 0 )
|
if ( val != 0 )
|
||||||
*u8g_output_data_port[pin] |= u8g_data_mask[pin];
|
*u8g_output_data_port[pin] |= u8g_data_mask[pin];
|
||||||
else
|
else
|
||||||
|
@ -134,6 +143,7 @@ static void u8g_com_arduino_t6963_write_data_pin(uint8_t pin, uint8_t val)
|
||||||
static void u8g_com_arduino_t6963_set_port_output(void)
|
static void u8g_com_arduino_t6963_set_port_output(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
for( i = 0; i < 8; i++ )
|
for( i = 0; i < 8; i++ )
|
||||||
{
|
{
|
||||||
#if defined(__PIC32MX)
|
#if defined(__PIC32MX)
|
||||||
|
@ -147,11 +157,13 @@ static void u8g_com_arduino_t6963_set_port_output(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void u8g_com_arduino_t6963_set_port_input(void)
|
static void u8g_com_arduino_t6963_set_port_input(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
U8G_ATOMIC_START();
|
||||||
for( i = 0; i < 8; i++ )
|
for( i = 0; i < 8; i++ )
|
||||||
{
|
{
|
||||||
#if defined(__PIC32MX)
|
#if defined(__PIC32MX)
|
||||||
|
@ -167,11 +179,14 @@ static void u8g_com_arduino_t6963_set_port_input(void)
|
||||||
*u8g_output_data_port[i] &= ~u8g_data_mask[i]; // no pullup
|
*u8g_output_data_port[i] &= ~u8g_data_mask[i]; // no pullup
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void u8g_com_arduino_t6963_write(u8g_t *u8g, uint8_t val)
|
static void u8g_com_arduino_t6963_write(u8g_t *u8g, uint8_t val)
|
||||||
{
|
{
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
|
||||||
u8g_com_arduino_t6963_write_data_pin( 0, val&1 );
|
u8g_com_arduino_t6963_write_data_pin( 0, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_t6963_write_data_pin( 1, val&1 );
|
u8g_com_arduino_t6963_write_data_pin( 1, val&1 );
|
||||||
|
@ -189,6 +204,7 @@ static void u8g_com_arduino_t6963_write(u8g_t *u8g, uint8_t val)
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
u8g_com_arduino_t6963_write_data_pin( 7, val&1 );
|
u8g_com_arduino_t6963_write_data_pin( 7, val&1 );
|
||||||
val >>= 1;
|
val >>= 1;
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_WR, 0);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_WR, 0);
|
||||||
u8g_MicroDelay(); /* 80ns, reference: t6963 datasheet */
|
u8g_MicroDelay(); /* 80ns, reference: t6963 datasheet */
|
||||||
|
@ -203,6 +219,7 @@ static uint8_t u8g_com_arduino_t6963_read(u8g_t *u8g)
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 0);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 0);
|
||||||
u8g_MicroDelay(); /* 150ns, reference: t6963 datasheet */
|
u8g_MicroDelay(); /* 150ns, reference: t6963 datasheet */
|
||||||
|
|
||||||
|
U8G_ATOMIC_START();
|
||||||
/* only read bits 0, 1 and 3 */
|
/* only read bits 0, 1 and 3 */
|
||||||
if ( (*u8g_input_data_port[3] & u8g_data_mask[3]) != 0 )
|
if ( (*u8g_input_data_port[3] & u8g_data_mask[3]) != 0 )
|
||||||
val++;
|
val++;
|
||||||
|
@ -213,6 +230,7 @@ static uint8_t u8g_com_arduino_t6963_read(u8g_t *u8g)
|
||||||
val <<= 1;
|
val <<= 1;
|
||||||
if ( (*u8g_input_data_port[0] & u8g_data_mask[0]) != 0 )
|
if ( (*u8g_input_data_port[0] & u8g_data_mask[0]) != 0 )
|
||||||
val++;
|
val++;
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 1);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 1);
|
||||||
u8g_MicroDelay(); /* 10ns, reference: t6963 datasheet */
|
u8g_MicroDelay(); /* 10ns, reference: t6963 datasheet */
|
||||||
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_com_arduino_uc_i2c.c
|
||||||
|
|
||||||
|
com interface for arduino (AND atmega) and the SSDxxxx chip (SOLOMON) variant
|
||||||
|
I2C protocol
|
||||||
|
|
||||||
|
ToDo: Rename this to u8g_com_avr_ssd_i2c.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Special pin usage:
|
||||||
|
U8G_PI_I2C_OPTION additional options
|
||||||
|
U8G_PI_A0_STATE used to store the last value of the command/data register selection
|
||||||
|
U8G_PI_SET_A0 1: Signal request to update I2C device with new A0_STATE, 0: Do nothing, A0_STATE matches I2C device
|
||||||
|
U8G_PI_SCL clock line (NOT USED)
|
||||||
|
U8G_PI_SDA data line (NOT USED)
|
||||||
|
|
||||||
|
U8G_PI_RESET reset line (currently disabled, see below)
|
||||||
|
|
||||||
|
Protocol:
|
||||||
|
SLA, Cmd/Data Selection, Arguments
|
||||||
|
The command/data register is selected by a special instruction byte, which is sent after SLA
|
||||||
|
|
||||||
|
The continue bit is always 0 so that a (re)start is equired for the change from cmd to/data mode
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
|
||||||
|
#define DOGM240_SLA_CMD (0x38*2)
|
||||||
|
#define DOGM240_SLA_DATA (0x39*2)
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_uc_start_sequence(u8g_t *u8g)
|
||||||
|
{
|
||||||
|
/* are we requested to set the a0 state? */
|
||||||
|
if ( u8g->pin_list[U8G_PI_SET_A0] == 0 )
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if ( u8g->pin_list[U8G_PI_A0_STATE] == 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_start(DOGM240_SLA_CMD) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_start(DOGM240_SLA_DATA) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_uc_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCL, HIGH);
|
||||||
|
//u8g_com_arduino_digital_write(u8g, U8G_PI_SDA, HIGH);
|
||||||
|
//u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: unknown mode */
|
||||||
|
|
||||||
|
u8g_i2c_init(u8g->pin_list[U8G_PI_I2C_OPTION]);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
/* Currently disabled, but it could be enable. Previous restrictions have been removed */
|
||||||
|
/* u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val); */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = 0;
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again, also forces start condition */
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable chip, send stop condition */
|
||||||
|
u8g_i2c_stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable, do nothing: any byte writing will trigger the i2c start */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_arduino_uc_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
if ( u8g_i2c_send_byte(arg_val) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_arduino_uc_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_byte(*ptr++) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_arduino_uc_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_byte(u8g_pgm_read(ptr)) == 0 )
|
||||||
|
return 0;
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
|
||||||
|
|
||||||
|
#ifdef OLD_CODE
|
||||||
|
if ( i2c_state != 0 )
|
||||||
|
{
|
||||||
|
u8g_i2c_stop();
|
||||||
|
i2c_state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( u8g_com_arduino_uc_start_sequence(arg_val) == 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* setup bus, might be a repeated start */
|
||||||
|
/*
|
||||||
|
if ( u8g_i2c_start(I2C_SLA) == 0 )
|
||||||
|
return 0;
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
i2c_state = 1;
|
||||||
|
|
||||||
|
if ( u8g_i2c_send_byte(I2C_CMD_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i2c_state = 2;
|
||||||
|
if ( u8g_i2c_send_byte(I2C_DATA_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
||||||
|
uint8_t u8g_com_arduino_uc_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
|
@ -37,6 +37,14 @@
|
||||||
and
|
and
|
||||||
SCK is at PORTB, Pin 5
|
SCK is at PORTB, Pin 5
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START()
|
||||||
|
U8G_ATOMIC_END()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -85,6 +93,9 @@ uint8_t u8g_com_atmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
||||||
|
|
||||||
u8g_SetPIOutput(u8g, U8G_PI_CS);
|
u8g_SetPIOutput(u8g, U8G_PI_CS);
|
||||||
u8g_SetPIOutput(u8g, U8G_PI_A0);
|
u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||||
|
u8g_SetPIOutput(u8g, U8G_PI_RESET);
|
||||||
|
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
|
||||||
DDRB |= _BV(3); /* D0, MOSI */
|
DDRB |= _BV(3); /* D0, MOSI */
|
||||||
DDRB |= _BV(5); /* SCK */
|
DDRB |= _BV(5); /* SCK */
|
||||||
|
@ -92,6 +103,9 @@ uint8_t u8g_com_atmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
||||||
|
|
||||||
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
||||||
PORTB &= ~_BV(5); /* SCK = 0 */
|
PORTB &= ~_BV(5); /* SCK = 0 */
|
||||||
|
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
|
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
u8g_atmega_parallel.c
|
u8g_com_atmega_parallel.c
|
||||||
|
|
||||||
Universal 8bit Graphics Library
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,12 @@
|
||||||
and
|
and
|
||||||
SCK is at PORTB, Pin 5
|
SCK is at PORTB, Pin 5
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START()
|
||||||
|
U8G_ATOMIC_END()
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -106,12 +112,16 @@ uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val
|
||||||
u8g_SetPIOutput(u8g, U8G_PI_CS);
|
u8g_SetPIOutput(u8g, U8G_PI_CS);
|
||||||
//u8g_SetPIOutput(u8g, U8G_PI_A0);
|
//u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||||
|
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
|
||||||
DDRB |= _BV(3); /* D0, MOSI */
|
DDRB |= _BV(3); /* D0, MOSI */
|
||||||
DDRB |= _BV(5); /* SCK */
|
DDRB |= _BV(5); /* SCK */
|
||||||
DDRB |= _BV(2); /* slave select */
|
DDRB |= _BV(2); /* slave select */
|
||||||
|
|
||||||
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
|
||||||
PORTB &= ~_BV(5); /* SCK = 0 */
|
PORTB &= ~_BV(5); /* SCK = 0 */
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
|
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -125,7 +135,8 @@ uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val
|
||||||
|
|
||||||
/* maybe set CPOL and CPHA to 1 */
|
/* maybe set CPOL and CPHA to 1 */
|
||||||
/* 20 Dez 2012: did set CPOL and CPHA to 1 in Arduino variant! */
|
/* 20 Dez 2012: did set CPOL and CPHA to 1 in Arduino variant! */
|
||||||
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
|
/* 24 Jan 2014: implemented, see also issue 221 */
|
||||||
|
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(1<<CPOL)|(1<<CPHA);
|
||||||
#ifdef U8G_HW_SPI_2X
|
#ifdef U8G_HW_SPI_2X
|
||||||
SPSR = (1 << SPI2X); /* double speed, issue 89 */
|
SPSR = (1 << SPI2X); /* double speed, issue 89 */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,10 +35,13 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
static uint8_t u8g_i2c_err_code;
|
//#define U8G_I2C_WITH_NO_ACK
|
||||||
|
|
||||||
|
static uint8_t u8g_i2c_err_code;
|
||||||
|
static uint8_t u8g_i2c_opt; /* U8G_I2C_OPT_NO_ACK, SAM: U8G_I2C_OPT_DEV_1 */
|
||||||
/*
|
/*
|
||||||
position values
|
position values
|
||||||
1: start condition
|
1: start condition
|
||||||
|
@ -115,10 +118,22 @@ void u8g_i2c_init(uint8_t options)
|
||||||
TWSR = 0;
|
TWSR = 0;
|
||||||
--> 100KHz
|
--> 100KHz
|
||||||
|
|
||||||
|
TWBR = 12;
|
||||||
|
TWSR = 0;
|
||||||
|
--> 400KHz
|
||||||
|
|
||||||
F_CPU/(2*100000)-8 --> calculate TWBR value for 100KHz
|
F_CPU/(2*100000)-8 --> calculate TWBR value for 100KHz
|
||||||
*/
|
*/
|
||||||
|
u8g_i2c_opt = options;
|
||||||
TWSR = 0;
|
TWSR = 0;
|
||||||
|
if ( options & U8G_I2C_OPT_FAST )
|
||||||
|
{
|
||||||
|
TWBR = F_CPU/(2*400000)-8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
TWBR = F_CPU/(2*100000)-8;
|
TWBR = F_CPU/(2*100000)-8;
|
||||||
|
}
|
||||||
u8g_i2c_clear_error();
|
u8g_i2c_clear_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,10 +143,17 @@ uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos)
|
||||||
while( !(TWCR & mask) )
|
while( !(TWCR & mask) )
|
||||||
{
|
{
|
||||||
if ( cnt == 0 )
|
if ( cnt == 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
|
||||||
|
{
|
||||||
|
return 1; /* all ok */
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
u8g_i2c_set_error(U8G_I2C_ERR_TIMEOUT, pos);
|
u8g_i2c_set_error(U8G_I2C_ERR_TIMEOUT, pos);
|
||||||
return 0; /* error */
|
return 0; /* error */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cnt--;
|
cnt--;
|
||||||
}
|
}
|
||||||
return 1; /* all ok */
|
return 1; /* all ok */
|
||||||
|
@ -167,14 +189,21 @@ uint8_t u8g_i2c_start(uint8_t sla)
|
||||||
/* wait */
|
/* wait */
|
||||||
if ( u8g_i2c_wait(_BV(TWINT), 2) == 0 )
|
if ( u8g_i2c_wait(_BV(TWINT), 2) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
status = TW_STATUS;
|
|
||||||
|
|
||||||
|
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
|
||||||
|
{
|
||||||
|
/* do not check for ACK */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = TW_STATUS;
|
||||||
/* check status after sla */
|
/* check status after sla */
|
||||||
if ( status != TW_MT_SLA_ACK )
|
if ( status != TW_MT_SLA_ACK )
|
||||||
{
|
{
|
||||||
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 2);
|
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 2);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -186,13 +215,20 @@ uint8_t u8g_i2c_send_byte(uint8_t data)
|
||||||
TWCR = _BV(TWINT) | _BV(TWEN);
|
TWCR = _BV(TWINT) | _BV(TWEN);
|
||||||
if ( u8g_i2c_wait(_BV(TWINT), 3) == 0 )
|
if ( u8g_i2c_wait(_BV(TWINT), 3) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
status = TW_STATUS;
|
|
||||||
|
|
||||||
|
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
|
||||||
|
{
|
||||||
|
/* do not check for ACK */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = TW_STATUS;
|
||||||
if ( status != TW_MT_DATA_ACK )
|
if ( status != TW_MT_DATA_ACK )
|
||||||
{
|
{
|
||||||
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 3);
|
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 3);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -217,6 +253,363 @@ void twi_send(uint8_t adr, uint8_t data1, uint8_t data2)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#elif defined(ARDUINO) && defined(__SAM3X8E__)
|
||||||
|
/* Arduino Due */
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include "sam.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Controller
|
||||||
|
|
||||||
|
TWI0 TWCK0 PA18 A DUE PCB: SCL1
|
||||||
|
TWI0 TWD0 PA17 A DUE PCB: SDA1
|
||||||
|
TWI1 TWCK1 PB13 A DUE PCB: SCL 21
|
||||||
|
TWI1 TWD1 PB12 A DUE PCB: SDA 20
|
||||||
|
|
||||||
|
Arduino definitions
|
||||||
|
|
||||||
|
#define PIN_WIRE_SDA (20u)
|
||||||
|
#define PIN_WIRE_SCL (21u)
|
||||||
|
#define WIRE_INTERFACE TWI1
|
||||||
|
#define WIRE_INTERFACE_ID ID_TWI1
|
||||||
|
#define WIRE_ISR_HANDLER TWI1_Handler
|
||||||
|
|
||||||
|
#define PIN_WIRE1_SDA (70u)
|
||||||
|
#define PIN_WIRE1_SCL (71u)
|
||||||
|
#define WIRE1_INTERFACE TWI0
|
||||||
|
#define WIRE1_INTERFACE_ID ID_TWI0
|
||||||
|
#define WIRE1_ISR_HANDLER TWI0_Handler
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void i2c_400KHz_delay(void)
|
||||||
|
{
|
||||||
|
/* should be at least 4 */
|
||||||
|
/* should be 5 for 100KHz transfer speed */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Arduino Due
|
||||||
|
0x NOP: 470KHz
|
||||||
|
4x NOP: 450KHz
|
||||||
|
8x NOP: 430KHz
|
||||||
|
16x NOP: 400KHz
|
||||||
|
*/
|
||||||
|
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i2c_100KHz_delay(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
1x u8g_MicroDelay() ca. 130KHz
|
||||||
|
2x u8g_MicroDelay() ca. 80KHz
|
||||||
|
*/
|
||||||
|
u8g_MicroDelay();
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t i2c_started = 0;
|
||||||
|
uint32_t i2c_scl_pin = 0;
|
||||||
|
uint32_t i2c_sda_pin = 0;
|
||||||
|
void (*i2c_delay)(void) = i2c_100KHz_delay;
|
||||||
|
|
||||||
|
const PinDescription *i2c_scl_pin_desc;
|
||||||
|
const PinDescription *i2c_sda_pin_desc;
|
||||||
|
|
||||||
|
|
||||||
|
/* maybe this can be optimized */
|
||||||
|
static void i2c_init(void)
|
||||||
|
{
|
||||||
|
i2c_sda_pin_desc = &(g_APinDescription[i2c_sda_pin]);
|
||||||
|
i2c_scl_pin_desc = &(g_APinDescription[i2c_scl_pin]);
|
||||||
|
pinMode(i2c_sda_pin, OUTPUT);
|
||||||
|
digitalWrite(i2c_sda_pin, HIGH);
|
||||||
|
pinMode(i2c_scl_pin, OUTPUT);
|
||||||
|
digitalWrite(i2c_scl_pin, HIGH);
|
||||||
|
PIO_Configure( i2c_sda_pin_desc->pPort, PIO_OUTPUT_0, i2c_sda_pin_desc->ulPin, PIO_OPENDRAIN );
|
||||||
|
PIO_Configure( i2c_scl_pin_desc->pPort, PIO_OUTPUT_0, i2c_scl_pin_desc->ulPin, PIO_OPENDRAIN );
|
||||||
|
PIO_Clear( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin) ;
|
||||||
|
PIO_Clear( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin) ;
|
||||||
|
PIO_Configure( i2c_sda_pin_desc->pPort, PIO_INPUT, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
PIO_Configure( i2c_scl_pin_desc->pPort, PIO_INPUT, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
i2c_delay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* actually, the scl line is not observed, so this procedure does not return a value */
|
||||||
|
static void i2c_read_scl_and_delay(void)
|
||||||
|
{
|
||||||
|
uint32_t dwMask = i2c_scl_pin_desc->ulPin;
|
||||||
|
//PIO_Configure( i2c_scl_pin_desc->pPort, PIO_INPUT, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
//PIO_SetInput( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
|
||||||
|
/* set as input */
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_ODR = dwMask ;
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_PER = dwMask ;
|
||||||
|
|
||||||
|
i2c_delay();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i2c_clear_scl(void)
|
||||||
|
{
|
||||||
|
uint32_t dwMask = i2c_scl_pin_desc->ulPin;
|
||||||
|
|
||||||
|
/* set open collector and drive low */
|
||||||
|
//PIO_Configure( i2c_scl_pin_desc->pPort, PIO_OUTPUT_0, i2c_scl_pin_desc->ulPin, PIO_OPENDRAIN );
|
||||||
|
//PIO_SetOutput( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin, 0, 1, 0);
|
||||||
|
|
||||||
|
/* open drain, zero default output */
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_MDER = dwMask;
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_CODR = dwMask;
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_OER = dwMask;
|
||||||
|
i2c_scl_pin_desc->pPort->PIO_PER = dwMask;
|
||||||
|
|
||||||
|
//PIO_Clear( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t i2c_read_sda(void)
|
||||||
|
{
|
||||||
|
uint32_t dwMask = i2c_sda_pin_desc->ulPin;
|
||||||
|
//PIO_Configure( i2c_sda_pin_desc->pPort, PIO_INPUT, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
//PIO_SetInput( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
|
||||||
|
|
||||||
|
/* set as input */
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_ODR = dwMask ;
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_PER = dwMask ;
|
||||||
|
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i2c_clear_sda(void)
|
||||||
|
{
|
||||||
|
uint32_t dwMask = i2c_sda_pin_desc->ulPin;
|
||||||
|
|
||||||
|
/* set open collector and drive low */
|
||||||
|
//PIO_Configure( i2c_sda_pin_desc->pPort, PIO_OUTPUT_0, i2c_sda_pin_desc->ulPin, PIO_OPENDRAIN );
|
||||||
|
//PIO_SetOutput( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin, 0, 1, 0);
|
||||||
|
|
||||||
|
/* open drain, zero default output */
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_MDER = dwMask ;
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_CODR = dwMask ;
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_OER = dwMask ;
|
||||||
|
i2c_sda_pin_desc->pPort->PIO_PER = dwMask ;
|
||||||
|
|
||||||
|
//PIO_Clear( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i2c_start(void)
|
||||||
|
{
|
||||||
|
if ( i2c_started != 0 )
|
||||||
|
{
|
||||||
|
/* if already started: do restart */
|
||||||
|
i2c_read_sda(); /* SDA = 1 */
|
||||||
|
i2c_delay();
|
||||||
|
i2c_read_scl_and_delay();
|
||||||
|
}
|
||||||
|
i2c_read_sda();
|
||||||
|
/*
|
||||||
|
if (i2c_read_sda() == 0)
|
||||||
|
{
|
||||||
|
// do something because arbitration is lost
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* send the start condition, both lines go from 1 to 0 */
|
||||||
|
i2c_clear_sda();
|
||||||
|
i2c_delay();
|
||||||
|
i2c_clear_scl();
|
||||||
|
i2c_started = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void i2c_stop(void)
|
||||||
|
{
|
||||||
|
/* set SDA to 0 */
|
||||||
|
i2c_clear_sda();
|
||||||
|
i2c_delay();
|
||||||
|
|
||||||
|
/* now release all lines */
|
||||||
|
i2c_read_scl_and_delay();
|
||||||
|
|
||||||
|
/* set SDA to 1 */
|
||||||
|
i2c_read_sda();
|
||||||
|
i2c_delay();
|
||||||
|
i2c_started = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i2c_write_bit(uint8_t val)
|
||||||
|
{
|
||||||
|
if (val)
|
||||||
|
i2c_read_sda();
|
||||||
|
else
|
||||||
|
i2c_clear_sda();
|
||||||
|
|
||||||
|
i2c_delay();
|
||||||
|
i2c_read_scl_and_delay();
|
||||||
|
i2c_clear_scl();
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t i2c_read_bit(void)
|
||||||
|
{
|
||||||
|
uint8_t val;
|
||||||
|
/* do not drive SDA */
|
||||||
|
i2c_read_sda();
|
||||||
|
i2c_delay();
|
||||||
|
i2c_read_scl_and_delay();
|
||||||
|
val = i2c_read_sda();
|
||||||
|
i2c_delay();
|
||||||
|
i2c_clear_scl();
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t i2c_write_byte(uint8_t b)
|
||||||
|
{
|
||||||
|
i2c_write_bit(b & 128);
|
||||||
|
i2c_write_bit(b & 64);
|
||||||
|
i2c_write_bit(b & 32);
|
||||||
|
i2c_write_bit(b & 16);
|
||||||
|
i2c_write_bit(b & 8);
|
||||||
|
i2c_write_bit(b & 4);
|
||||||
|
i2c_write_bit(b & 2);
|
||||||
|
i2c_write_bit(b & 1);
|
||||||
|
|
||||||
|
/* read ack from client */
|
||||||
|
/* 0: ack was given by client */
|
||||||
|
/* 1: nothing happend during ack cycle */
|
||||||
|
return i2c_read_bit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_i2c_init(uint8_t options)
|
||||||
|
{
|
||||||
|
u8g_i2c_opt = options;
|
||||||
|
u8g_i2c_clear_error();
|
||||||
|
|
||||||
|
if ( u8g_i2c_opt & U8G_I2C_OPT_FAST )
|
||||||
|
{
|
||||||
|
i2c_delay = i2c_400KHz_delay;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i2c_delay = i2c_100KHz_delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ( u8g_i2c_opt & U8G_I2C_OPT_DEV_1 )
|
||||||
|
{
|
||||||
|
i2c_scl_pin = PIN_WIRE1_SCL;
|
||||||
|
i2c_sda_pin = PIN_WIRE1_SDA;
|
||||||
|
|
||||||
|
//REG_PIOA_PDR = PIO_PB12A_TWD1 | PIO_PB13A_TWCK1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
i2c_scl_pin = PIN_WIRE_SCL;
|
||||||
|
i2c_sda_pin = PIN_WIRE_SDA;
|
||||||
|
|
||||||
|
//REG_PIOA_PDR = PIO_PA17A_TWD0 | PIO_PA18A_TWCK0;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_init();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sla includes also the r/w bit */
|
||||||
|
uint8_t u8g_i2c_start(uint8_t sla)
|
||||||
|
{
|
||||||
|
i2c_start();
|
||||||
|
i2c_write_byte(sla);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_i2c_send_byte(uint8_t data)
|
||||||
|
{
|
||||||
|
return i2c_write_byte(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_i2c_stop(void)
|
||||||
|
{
|
||||||
|
i2c_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(U8G_RASPBERRY_PI)
|
||||||
|
|
||||||
|
#include <wiringPi.h>
|
||||||
|
#include <wiringPiI2C.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#define I2C_SLA 0x3c
|
||||||
|
|
||||||
|
static int fd=-1;
|
||||||
|
static uint8_t i2cMode = 0;
|
||||||
|
|
||||||
|
void u8g_i2c_init(uint8_t options) {
|
||||||
|
u8g_i2c_clear_error();
|
||||||
|
u8g_i2c_opt = options;
|
||||||
|
|
||||||
|
if (wiringPiSetup() == -1) {
|
||||||
|
printf("wiringPi-Error\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = wiringPiI2CSetup(I2C_SLA);
|
||||||
|
if (fd < 0) {
|
||||||
|
printf ("Unable to open I2C device 0: %s\n", strerror (errno)) ;
|
||||||
|
exit (1) ;
|
||||||
|
}
|
||||||
|
//u8g_SetPIOutput(u8g, U8G_PI_RESET);
|
||||||
|
//u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||||
|
}
|
||||||
|
uint8_t u8g_i2c_start(uint8_t sla) {
|
||||||
|
u8g_i2c_send_mode(0);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_i2c_stop(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_i2c_send_mode(uint8_t mode) {
|
||||||
|
i2cMode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_i2c_send_byte(uint8_t data) {
|
||||||
|
wiringPiI2CWriteReg8(fd, i2cMode, data);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* empty interface */
|
/* empty interface */
|
||||||
|
|
|
@ -33,6 +33,18 @@
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START();
|
||||||
|
U8G_ATOMIC_END();
|
||||||
|
|
||||||
|
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos) Convert to internal number: AVR: port*8+bitpos, ARM: port*16+bitpos
|
||||||
|
void u8g_SetPinOutput(uint8_t internal_pin_number)
|
||||||
|
void u8g_SetPinInput(uint8_t internal_pin_number)
|
||||||
|
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
|
||||||
|
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -159,9 +171,16 @@ void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
|
||||||
volatile uint8_t * tmp = u8g_get_avr_io_ptr(u8g_avr_port_P, internal_pin_number>>3);
|
volatile uint8_t * tmp = u8g_get_avr_io_ptr(u8g_avr_port_P, internal_pin_number>>3);
|
||||||
|
|
||||||
if ( level == 0 )
|
if ( level == 0 )
|
||||||
*tmp &= ~_BV(internal_pin_number&7);
|
{
|
||||||
|
U8G_ATOMIC_AND(tmp, ~_BV(internal_pin_number&7));
|
||||||
|
// *tmp &= ~_BV(internal_pin_number&7);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
*tmp |= _BV(internal_pin_number&7);
|
{
|
||||||
|
U8G_ATOMIC_OR(tmp, _BV(internal_pin_number&7));
|
||||||
|
//*tmp |= _BV(internal_pin_number&7);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
|
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
|
||||||
|
@ -172,8 +191,31 @@ uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(U8G_RASPBERRY_PI)
|
||||||
|
|
||||||
|
#include <wiringPi.h>
|
||||||
|
//#include "/usr/local/include/wiringPi.h"
|
||||||
|
|
||||||
|
void u8g_SetPinOutput(uint8_t internal_pin_number) {
|
||||||
|
pinMode(internal_pin_number, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_SetPinInput(uint8_t internal_pin_number) {
|
||||||
|
pinMode(internal_pin_number, INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level) {
|
||||||
|
digitalWrite(internal_pin_number, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number) {
|
||||||
|
return digitalRead(internal_pin_number);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
/* convert "port" and "bitpos" to internal pin number */
|
||||||
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos)
|
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos)
|
||||||
{
|
{
|
||||||
port <<= 3;
|
port <<= 3;
|
||||||
|
@ -201,6 +243,8 @@ uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
|
||||||
void u8g_SetPIOutput(u8g_t *u8g, uint8_t pi)
|
void u8g_SetPIOutput(u8g_t *u8g, uint8_t pi)
|
||||||
{
|
{
|
||||||
uint8_t pin;
|
uint8_t pin;
|
||||||
|
@ -216,3 +260,14 @@ void u8g_SetPILevel(u8g_t *u8g, uint8_t pi, uint8_t level)
|
||||||
if ( pin != U8G_PIN_NONE )
|
if ( pin != U8G_PIN_NONE )
|
||||||
u8g_SetPinLevel(pin, level);
|
u8g_SetPinLevel(pin, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else /* defined(U8G_WITH_PINLIST) */
|
||||||
|
void u8g_SetPIOutput(u8g_t *u8g, uint8_t pi)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_SetPILevel(u8g_t *u8g, uint8_t pi, uint8_t level)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_com_raspberrypi_hw_spi.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2012, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
Assumes, that
|
||||||
|
MOSI is at PORTB, Pin 3
|
||||||
|
and
|
||||||
|
SCK is at PORTB, Pin 5
|
||||||
|
|
||||||
|
Update for ATOMIC operation done (01 Jun 2013)
|
||||||
|
U8G_ATOMIC_OR(ptr, val)
|
||||||
|
U8G_ATOMIC_AND(ptr, val)
|
||||||
|
U8G_ATOMIC_START()
|
||||||
|
U8G_ATOMIC_END()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(U8G_RASPBERRY_PI)
|
||||||
|
|
||||||
|
#include <wiringPiSPI.h>
|
||||||
|
#include <wiringPi.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
// check wiringPi setup
|
||||||
|
if (wiringPiSetup() == -1)
|
||||||
|
{
|
||||||
|
printf("wiringPi-Error\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wiringPiSPISetup (0, 100000) < 0)
|
||||||
|
{
|
||||||
|
printf ("Unable to open SPI device 0: %s\n", strerror (errno)) ;
|
||||||
|
exit (1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_SetPIOutput(u8g, U8G_PI_RESET);
|
||||||
|
u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
/* Done by the SPI hardware */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
wiringPiSPIDataRW (0, &arg_val, 1) ;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
wiringPiSPIDataRW (0, arg_ptr, arg_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
wiringPiSPIDataRW (0, arg_ptr, arg_val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,176 @@
|
||||||
|
/*
|
||||||
|
Special pin usage:
|
||||||
|
U8G_PI_I2C_OPTION additional options
|
||||||
|
U8G_PI_A0_STATE used to store the last value of the command/data register selection
|
||||||
|
U8G_PI_SET_A0 1: Signal request to update I2C device with new A0_STATE, 0: Do nothing, A0_STATE matches I2C device
|
||||||
|
U8G_PI_SCL clock line (NOT USED)
|
||||||
|
U8G_PI_SDA data line (NOT USED)
|
||||||
|
|
||||||
|
U8G_PI_RESET reset line (currently disabled, see below)
|
||||||
|
|
||||||
|
Protocol:
|
||||||
|
SLA, Cmd/Data Selection, Arguments
|
||||||
|
The command/data register is selected by a special instruction byte, which is sent after SLA
|
||||||
|
|
||||||
|
The continue bit is always 0 so that a (re)start is equired for the change from cmd to/data mode
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#if defined(U8G_RASPBERRY_PI)
|
||||||
|
|
||||||
|
#include <wiringPi.h>
|
||||||
|
#include <wiringPiI2C.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#define I2C_SLA 0x3c
|
||||||
|
#define I2C_CMD_MODE 0x000
|
||||||
|
#define I2C_DATA_MODE 0x040
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_ssd_start_sequence(u8g_t *u8g)
|
||||||
|
{
|
||||||
|
/* are we requested to set the a0 state? */
|
||||||
|
if ( u8g->pin_list[U8G_PI_SET_A0] == 0 )
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* setup bus, might be a repeated start */
|
||||||
|
if ( u8g_i2c_start(I2C_SLA) == 0 )
|
||||||
|
return 0;
|
||||||
|
if ( u8g->pin_list[U8G_PI_A0_STATE] == 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_mode(I2C_CMD_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_mode(I2C_DATA_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_COM_MSG_INIT:
|
||||||
|
u8g_i2c_init(u8g->pin_list[U8G_PI_I2C_OPTION]);
|
||||||
|
u8g_SetPIOutput(u8g, U8G_PI_RESET);
|
||||||
|
u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_RESET:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = 0;
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again, also forces start condition */
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
/* disable chip, send stop condition */
|
||||||
|
u8g_i2c_stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enable, do nothing: any byte writing will trigger the i2c start */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_BYTE:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
if ( u8g_i2c_send_byte(arg_val) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = (uint8_t *)arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_byte(*ptr++) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_WRITE_SEQ_P:
|
||||||
|
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||||
|
if ( u8g_com_raspberrypi_ssd_start_sequence(u8g) == 0 )
|
||||||
|
return u8g_i2c_stop(), 0;
|
||||||
|
{
|
||||||
|
register uint8_t *ptr = (uint8_t *)arg_ptr;
|
||||||
|
while( arg_val > 0 )
|
||||||
|
{
|
||||||
|
if ( u8g_i2c_send_byte(u8g_pgm_read(ptr)) == 0 )
|
||||||
|
return 0;
|
||||||
|
ptr++;
|
||||||
|
arg_val--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// u8g_i2c_stop();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||||
|
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
|
||||||
|
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
|
||||||
|
|
||||||
|
#ifdef OLD_CODE
|
||||||
|
if ( i2c_state != 0 )
|
||||||
|
{
|
||||||
|
u8g_i2c_stop();
|
||||||
|
i2c_state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( u8g_com_raspberrypi_ssd_start_sequence(arg_val) == 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* setup bus, might be a repeated start */
|
||||||
|
/*
|
||||||
|
if ( u8g_i2c_start(I2C_SLA) == 0 )
|
||||||
|
return 0;
|
||||||
|
if ( arg_val == 0 )
|
||||||
|
{
|
||||||
|
i2c_state = 1;
|
||||||
|
|
||||||
|
if ( u8g_i2c_send_byte(I2C_CMD_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i2c_state = 2;
|
||||||
|
if ( u8g_i2c_send_byte(I2C_DATA_MODE) == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
||||||
|
uint8_t u8g_com_raspberrypi_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(U8G_WITH_PINLIST) */
|
||||||
|
#endif
|
|
@ -32,6 +32,11 @@
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_Delay(uint16_t val) Delay by "val" milliseconds
|
||||||
|
void u8g_MicroDelay(void) Delay be one microsecond
|
||||||
|
void u8g_10MicroDelay(void) Delay by 10 microseconds
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,19 +45,37 @@
|
||||||
/*==== Part 1: Derive suitable delay procedure ====*/
|
/*==== Part 1: Derive suitable delay procedure ====*/
|
||||||
|
|
||||||
#if defined(ARDUINO)
|
#if defined(ARDUINO)
|
||||||
|
|
||||||
|
# if ARDUINO < 100
|
||||||
|
# include <WProgram.h>
|
||||||
|
# else
|
||||||
|
# include <Arduino.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
# if defined(__AVR__)
|
# if defined(__AVR__)
|
||||||
# define USE_AVR_DELAY
|
# define USE_AVR_DELAY
|
||||||
# elif defined(__PIC32MX)
|
# elif defined(__PIC32MX)
|
||||||
# define USE_PIC32_DELAY
|
# define USE_PIC32_DELAY
|
||||||
# elif defined(__arm__) /* Arduino Due */
|
# elif defined(__arm__) /* Arduino Due & Teensy */
|
||||||
# define USE_ARDUINO_DELAY
|
# define USE_ARDUINO_DELAY
|
||||||
# else
|
# else
|
||||||
# define USE_ARDUINO_DELAY
|
# define USE_ARDUINO_DELAY
|
||||||
# endif
|
# endif
|
||||||
|
#elif defined(U8G_RASPBERRY_PI)
|
||||||
|
# define USE_RASPBERRYPI_DELAY
|
||||||
#elif defined(__AVR__)
|
#elif defined(__AVR__)
|
||||||
# define USE_AVR_DELAY
|
# define USE_AVR_DELAY
|
||||||
#elif defined(__18CXX)
|
#elif defined(__18CXX)
|
||||||
# define USE_PIC18_DELAY
|
# define USE_PIC18_DELAY
|
||||||
|
#elif defined(__arm__)
|
||||||
|
/* do not define anything, all procedures are expected to be defined outside u8glib */
|
||||||
|
|
||||||
|
/*
|
||||||
|
void u8g_Delay(uint16_t val);
|
||||||
|
void u8g_MicroDelay(void);
|
||||||
|
void u8g_10MicroDelay(void);
|
||||||
|
*/
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# define USE_DUMMY_DELAY
|
# define USE_DUMMY_DELAY
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,6 +84,26 @@
|
||||||
|
|
||||||
/*==== Part 2: Definition of the delay procedures ====*/
|
/*==== Part 2: Definition of the delay procedures ====*/
|
||||||
|
|
||||||
|
/*== Raspberry Pi Delay ==*/
|
||||||
|
#if defined (USE_RASPBERRYPI_DELAY)
|
||||||
|
#include <wiringPi.h>
|
||||||
|
//#include "/usr/local/include/wiringPi.h"
|
||||||
|
void u8g_Delay(uint16_t val) {
|
||||||
|
//delay(val);
|
||||||
|
//usleep((uint32_t)val*(uint32_t)1000);
|
||||||
|
delayMicroseconds((uint32_t)val*(uint32_t)1000);
|
||||||
|
}
|
||||||
|
void u8g_MicroDelay(void)
|
||||||
|
{
|
||||||
|
usleep(1);
|
||||||
|
}
|
||||||
|
void u8g_10MicroDelay(void)
|
||||||
|
{
|
||||||
|
usleep(10);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*== AVR Delay ==*/
|
/*== AVR Delay ==*/
|
||||||
|
|
||||||
#if defined(USE_AVR_DELAY)
|
#if defined(USE_AVR_DELAY)
|
||||||
|
@ -144,7 +187,11 @@ void u8g_10MicroDelay(void)
|
||||||
#if defined(USE_ARDUINO_DELAY)
|
#if defined(USE_ARDUINO_DELAY)
|
||||||
void u8g_Delay(uint16_t val)
|
void u8g_Delay(uint16_t val)
|
||||||
{
|
{
|
||||||
|
#if defined(__arm__)
|
||||||
|
delayMicroseconds((uint32_t)val*(uint32_t)1000);
|
||||||
|
#else
|
||||||
delay(val);
|
delay(val);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void u8g_MicroDelay(void)
|
void u8g_MicroDelay(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_a2_micro_printer_ds.c
|
||||||
|
|
||||||
|
Use DC2 bitmap command of the A2 Micro panel termal printer
|
||||||
|
double stroke
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define LINE_DELAY 40
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_a2_micro_printer_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
uint8_t y, i, j;
|
||||||
|
uint8_t *ptr;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
y = pb->p.page_y0;
|
||||||
|
ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_WriteByte(u8g, dev, 27); /* ESC */
|
||||||
|
u8g_WriteByte(u8g, dev, 55 ); /* parameter command */
|
||||||
|
u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/
|
||||||
|
u8g_WriteByte(u8g, dev, 160); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
|
||||||
|
u8g_WriteByte(u8g, dev, 20); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/
|
||||||
|
|
||||||
|
u8g_WriteByte(u8g, dev, 18); /* DC2 */
|
||||||
|
u8g_WriteByte(u8g, dev, 42 ); /* * */
|
||||||
|
u8g_WriteByte(u8g, dev, pb->p.page_height );
|
||||||
|
u8g_WriteByte(u8g, dev, pb->width/8 );
|
||||||
|
|
||||||
|
for( i = 0; i < pb->p.page_height; i ++ )
|
||||||
|
{
|
||||||
|
for( j = 0; j < pb->width/8; j++ )
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, *ptr);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
u8g_Delay(LINE_DELAY);
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set parameters back to their default values */
|
||||||
|
u8g_WriteByte(u8g, dev, 27); /* ESC */
|
||||||
|
u8g_WriteByte(u8g, dev, 55 ); /* parameter command */
|
||||||
|
u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/
|
||||||
|
u8g_WriteByte(u8g, dev, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
|
||||||
|
u8g_WriteByte(u8g, dev, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t u8g_dev_expand4(uint8_t val)
|
||||||
|
{
|
||||||
|
uint8_t a,b,c,d;
|
||||||
|
a = val&1;
|
||||||
|
b = (val&2)<<1;
|
||||||
|
c = (val&4)<<2;
|
||||||
|
d = (val&8)<<3;
|
||||||
|
a |=b;
|
||||||
|
a |=c;
|
||||||
|
a |=d;
|
||||||
|
a |= a<<1;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_a2_micro_printer_double_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
{
|
||||||
|
//u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
//u8g_WriteByte(u8g, dev, 18); /* DC2 */
|
||||||
|
//u8g_WriteByte(u8g, dev, 42 ); /* * */
|
||||||
|
//u8g_WriteByte(u8g, dev, pb->p.total_height*2 );
|
||||||
|
//u8g_WriteByte(u8g, dev, pb->width/8*2 );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
uint8_t y, i, j;
|
||||||
|
uint8_t *ptr;
|
||||||
|
uint8_t *p2;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
y = pb->p.page_y0;
|
||||||
|
ptr = pb->buf;
|
||||||
|
//u8g_WriteByte(u8g, dev, 18); /* DC2 */
|
||||||
|
//u8g_WriteByte(u8g, dev, 35 ); /* # */
|
||||||
|
//u8g_WriteByte(u8g, dev, 0x0ff ); /* max */
|
||||||
|
|
||||||
|
u8g_WriteByte(u8g, dev, 27); /* ESC */
|
||||||
|
u8g_WriteByte(u8g, dev, 55 ); /* parameter command */
|
||||||
|
u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/
|
||||||
|
u8g_WriteByte(u8g, dev, 160); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
|
||||||
|
u8g_WriteByte(u8g, dev, 20); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/
|
||||||
|
|
||||||
|
u8g_WriteByte(u8g, dev, 18); /* DC2 */
|
||||||
|
u8g_WriteByte(u8g, dev, 42 ); /* * */
|
||||||
|
u8g_WriteByte(u8g, dev, pb->p.page_height*2 );
|
||||||
|
u8g_WriteByte(u8g, dev, pb->width/8*2 );
|
||||||
|
|
||||||
|
for( i = 0; i < pb->p.page_height; i ++ )
|
||||||
|
{
|
||||||
|
p2 = ptr;
|
||||||
|
for( j = 0; j < pb->width/8; j++ )
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 >> 4));
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 & 15));
|
||||||
|
p2++;
|
||||||
|
}
|
||||||
|
u8g_Delay(LINE_DELAY);
|
||||||
|
p2 = ptr;
|
||||||
|
for( j = 0; j < pb->width/8; j++ )
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 >> 4));
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_expand4(*p2 & 15));
|
||||||
|
p2++;
|
||||||
|
}
|
||||||
|
u8g_Delay(LINE_DELAY);
|
||||||
|
ptr += pb->width/8;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set parameters back to their default values */
|
||||||
|
u8g_WriteByte(u8g, dev, 27); /* ESC */
|
||||||
|
u8g_WriteByte(u8g, dev, 55 ); /* parameter command */
|
||||||
|
u8g_WriteByte(u8g, dev, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/
|
||||||
|
u8g_WriteByte(u8g, dev, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */
|
||||||
|
u8g_WriteByte(u8g, dev, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(U8G_16BIT)
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_384x240, 384, 240, 8, u8g_dev_a2_micro_printer_fn, u8g_com_null_fn);
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_192x360_ds, 192, 360, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn);
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_192x720_ds, 192, 720, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn);
|
||||||
|
#else
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_384x240, 240, 240, 8, u8g_dev_a2_micro_printer_fn, u8g_com_null_fn);
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_192x360_ds, 192, 240, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn);
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_192x720_ds, 192, 240, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_a2_micro_printer_192x120_ds, 192, 120, 8, u8g_dev_a2_micro_printer_double_fn, u8g_com_null_fn);
|
|
@ -78,7 +78,7 @@ uint8_t u8g_dev_flipdisc_2x7_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
/* current page: pb->p.page */
|
/* current page: pb->p.page */
|
||||||
/* ptr to the buffer: pb->buf */
|
/* ptr to the buffer: pb->buf */
|
||||||
|
|
||||||
(*u8g_write_flip_disc_matrix)(0, pb->p.page, WIDTH, pb->buf, pb->buf+WIDTH);
|
(*u8g_write_flip_disc_matrix)(0, pb->p.page, WIDTH, pb->buf, (uint8_t *)(pb->buf)+WIDTH);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_CONTRAST:
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
|
|
@ -121,7 +121,7 @@ uint8_t u8g_dev_gprof_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
case U8G_DEV_MSG_GET_PAGE_BOX:
|
case U8G_DEV_MSG_GET_PAGE_BOX:
|
||||||
u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
|
u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -0,0 +1,281 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_ht1632.c
|
||||||
|
|
||||||
|
1-Bit (BW) Driver for HT1632 controller
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
U8G_PIN_NONE can be used as argument
|
||||||
|
|
||||||
|
uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
u8g->pin_list[U8G_PI_SCK] = sck;
|
||||||
|
u8g->pin_list[U8G_PI_MOSI] = mosi;
|
||||||
|
u8g->pin_list[U8G_PI_CS] = cs;
|
||||||
|
u8g->pin_list[U8G_PI_A0] = a0;
|
||||||
|
u8g->pin_list[U8G_PI_RESET] = reset;
|
||||||
|
|
||||||
|
mapping
|
||||||
|
|
||||||
|
#define DATA_PIN --> U8G_PI_MOSI
|
||||||
|
#define WR_PIN --> U8G_PI_SCK
|
||||||
|
#define CS_PIN --> U8G_PI_CS
|
||||||
|
U8G_PI_A0 --> not used
|
||||||
|
U8G_PI_RESET --> not used
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
u8g_InitSPI(&u8g, &u8g_dev_ht1632_24x16, WR_PIN, DATA_IN, CS_PIN, U8G_PIN_NONE, U8G_PIN_NONE)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 24
|
||||||
|
#define HEIGHT 16
|
||||||
|
#define PAGE_HEIGHT 16
|
||||||
|
|
||||||
|
/* http://forum.arduino.cc/index.php?topic=168537.0 */
|
||||||
|
|
||||||
|
#define HT1632_CMD_SYSDIS 0x00 // CMD= 0000-0000-x Turn off oscil
|
||||||
|
#define HT1632_CMD_SYSON 0x01 // CMD= 0000-0001-x Enable system oscil
|
||||||
|
#define HT1632_CMD_LEDOFF 0x02 // CMD= 0000-0010-x LED duty cycle gen off
|
||||||
|
#define HT1632_CMD_LEDON 0x03 // CMD= 0000-0011-x LEDs ON
|
||||||
|
#define HT1632_CMD_BLOFF 0x08 // CMD= 0000-1000-x Blink OFF
|
||||||
|
#define HT1632_CMD_BLON 0x09 // CMD= 0000-1001-x Blink On
|
||||||
|
#define HT1632_CMD_SLVMD 0x10 // CMD= 0001-00xx-x Slave Mode
|
||||||
|
#define HT1632_CMD_MSTMD 0x14 // CMD= 0001-01xx-x Master Mode
|
||||||
|
#define HT1632_CMD_RCCLK 0x18 // CMD= 0001-10xx-x Use on-chip clock
|
||||||
|
#define HT1632_CMD_EXTCLK 0x1C // CMD= 0001-11xx-x Use external clock
|
||||||
|
#define HT1632_CMD_COMS00 0x20 // CMD= 0010-ABxx-x commons options
|
||||||
|
#define HT1632_CMD_COMS01 0x24 // CMD= 0010-ABxx-x commons options
|
||||||
|
#define HT1632_CMD_COMS10 0x28 // CMD= 0010-ABxx-x commons options
|
||||||
|
#define HT1632_CMD_COMS11 0x2C // P-MOS OUTPUT AND 16COMMON OPTION
|
||||||
|
#define HT1632_CMD_PWM 0xA0 // CMD= 101x-PPPP-x PWM duty cycle
|
||||||
|
|
||||||
|
#define HT1632_ID_CMD 4 /* ID = 100 - Commands */
|
||||||
|
#define HT1632_ID_RD 6 /* ID = 110 - Read RAM */
|
||||||
|
#define HT1632_ID_WR 5 /* ID = 101 - Write RAM */
|
||||||
|
|
||||||
|
#define HT1632_ID_LEN 3 // IDs are 3 bits
|
||||||
|
#define HT1632_CMD_LEN 8 // CMDs are 8 bits
|
||||||
|
#define HT1632_DATA_LEN 8 // Data are 4*2 bits
|
||||||
|
#define HT1632_ADDR_LEN 7 // Address are 7 bits
|
||||||
|
|
||||||
|
#if defined(ARDUINO)
|
||||||
|
|
||||||
|
#if ARDUINO < 100
|
||||||
|
#include <WProgram.h>
|
||||||
|
#else
|
||||||
|
#include <Arduino.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//#define WR_PIN 3
|
||||||
|
//#define DATA_PIN 2
|
||||||
|
//#define CS_PIN 4
|
||||||
|
|
||||||
|
void ht1632_write_data_MSB(u8g_t *u8g, uint8_t cnt, uint8_t data, uint8_t extra)
|
||||||
|
{
|
||||||
|
int8_t i;
|
||||||
|
uint8_t data_pin = u8g->pin_list[U8G_PI_MOSI];
|
||||||
|
uint8_t wr_pin = u8g->pin_list[U8G_PI_SCK];
|
||||||
|
|
||||||
|
for(i = cnt - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if ((data >> i) & 1)
|
||||||
|
{
|
||||||
|
digitalWrite(data_pin, HIGH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
digitalWrite(data_pin, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(wr_pin, LOW);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
digitalWrite(wr_pin, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send an extra bit
|
||||||
|
if (extra)
|
||||||
|
{
|
||||||
|
digitalWrite(data_pin, HIGH);
|
||||||
|
digitalWrite(wr_pin, LOW);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
digitalWrite(wr_pin, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ht1632_write_data(u8g_t *u8g, uint8_t cnt, uint8_t data)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t data_pin = u8g->pin_list[U8G_PI_MOSI];
|
||||||
|
uint8_t wr_pin = u8g->pin_list[U8G_PI_SCK];
|
||||||
|
for (i = 0; i < cnt; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((data >> i) & 1) {
|
||||||
|
digitalWrite(data_pin, HIGH);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
digitalWrite(data_pin, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(wr_pin, LOW);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
digitalWrite(wr_pin, HIGH);
|
||||||
|
u8g_MicroDelay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ht1632_init(u8g_t *u8g)
|
||||||
|
{
|
||||||
|
//uint8_t i;
|
||||||
|
uint8_t data_pin = u8g->pin_list[U8G_PI_MOSI];
|
||||||
|
uint8_t wr_pin = u8g->pin_list[U8G_PI_SCK];
|
||||||
|
uint8_t cs_pin = u8g->pin_list[U8G_PI_CS];
|
||||||
|
pinMode(data_pin, OUTPUT);
|
||||||
|
pinMode(wr_pin, OUTPUT);
|
||||||
|
pinMode(cs_pin, OUTPUT);
|
||||||
|
|
||||||
|
digitalWrite(data_pin, HIGH);
|
||||||
|
digitalWrite(wr_pin, HIGH);
|
||||||
|
digitalWrite(cs_pin, HIGH);
|
||||||
|
|
||||||
|
digitalWrite(cs_pin, LOW);
|
||||||
|
/* init display once after startup */
|
||||||
|
ht1632_write_data_MSB(u8g, 3, HT1632_ID_CMD, false); // IDs are 3 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_SYSDIS, true); // 8 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_SYSON, true); // 8 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_COMS11, true); // 8 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_LEDON, true); // 8 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_BLOFF, true); // 8 bits
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_PWM+15, true); // 8 bits
|
||||||
|
digitalWrite(cs_pin, HIGH);
|
||||||
|
|
||||||
|
/* removed following (debug) code */
|
||||||
|
/*
|
||||||
|
digitalWrite(cs_pin, LOW);
|
||||||
|
ht1632_write_data_MSB(u8g, 3, HT1632_ID_WR, false); // Send "write to display" command
|
||||||
|
ht1632_write_data_MSB(u8g, 7, 0, false);
|
||||||
|
for(i = 0; i<48; ++i)
|
||||||
|
{
|
||||||
|
ht1632_write_data(u8g, 8, 0xFF);
|
||||||
|
}
|
||||||
|
digitalWrite(cs_pin, HIGH);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
page: 0=data contain lines 0..16, 1=data contain lines 16..32 (a 24x16 display will only have page 0)
|
||||||
|
cnt: width of the display
|
||||||
|
data: pointer to a buffer with 2*cnt bytes.
|
||||||
|
*/
|
||||||
|
void ht1632_transfer_data(u8g_t *u8g, uint8_t page, uint8_t cnt, uint8_t *data)
|
||||||
|
{
|
||||||
|
uint8_t addr;
|
||||||
|
uint8_t cs_pin = u8g->pin_list[U8G_PI_CS];
|
||||||
|
/* send data to the ht1632 */
|
||||||
|
digitalWrite(cs_pin, LOW);
|
||||||
|
ht1632_write_data_MSB(u8g, 3, HT1632_ID_WR, false); // Send "write to display" command
|
||||||
|
ht1632_write_data_MSB(u8g, 7, page*2*cnt, false);
|
||||||
|
|
||||||
|
// Operating in progressive addressing mode
|
||||||
|
for (addr = 0; addr < cnt; addr++)
|
||||||
|
{
|
||||||
|
ht1632_write_data(u8g, 8, data[addr]);
|
||||||
|
ht1632_write_data(u8g, 8, data[addr+cnt]);
|
||||||
|
}
|
||||||
|
digitalWrite(cs_pin, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* value is between 0...15 */
|
||||||
|
void ht1632_set_contrast(u8g_t *u8g, uint8_t value)
|
||||||
|
{
|
||||||
|
uint8_t cs_pin = u8g->pin_list[U8G_PI_CS];
|
||||||
|
digitalWrite(cs_pin, LOW);
|
||||||
|
ht1632_write_data_MSB(u8g, 3, HT1632_ID_CMD, false);
|
||||||
|
ht1632_write_data_MSB(u8g, 8, HT1632_CMD_PWM + value, false);
|
||||||
|
digitalWrite(cs_pin, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
void ht1632_init(u8g_t *u8g)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ht1632_transfer_data(u8g_t *u8g, uint8_t page, uint8_t cnt, uint8_t *data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ht1632_set_contrast(u8g_t *u8g, uint8_t value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ARDUINO */
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ht1632_24x16_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
ht1632_init(u8g);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
/* current page: pb->p.page */
|
||||||
|
/* ptr to the buffer: pb->buf */
|
||||||
|
ht1632_transfer_data(u8g, pb->p.page, WIDTH, pb->buf);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
/* values passed to SetContrast() are between 0 and 255, scale down to 0...15 */
|
||||||
|
ht1632_set_contrast(u8g, (*(uint8_t *)arg) >> 4);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ht1632_24x16_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_ht1632_24x16_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ht1632_24x16_buf};
|
||||||
|
u8g_dev_t u8g_dev_ht1632_24x16 = { u8g_dev_ht1632_24x16_fn, &u8g_dev_ht1632_24x16_pb, u8g_com_null_fn };
|
||||||
|
|
|
@ -272,7 +272,7 @@ uint8_t u8g_dev_ili9325d_320x240_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
//for(;;)
|
//for(;;)
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ili9325d_320x240_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ili9325d_320x240_init_seq);
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ uint8_t u8g_dev_ks0108_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ks0108_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ks0108_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -98,7 +98,7 @@ uint8_t u8g_dev_lc7981_160x80_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_160x80_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_160x80_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -96,7 +96,7 @@ uint8_t u8g_dev_lc7981_240x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x128_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x128_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -96,7 +96,7 @@ uint8_t u8g_dev_lc7981_240x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -40,7 +40,12 @@
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#ifdef U8G_16BIT
|
||||||
#define WIDTH 320
|
#define WIDTH 320
|
||||||
|
#else
|
||||||
|
#define WIDTH 240
|
||||||
|
#endif
|
||||||
|
|
||||||
#define HEIGHT 64
|
#define HEIGHT 64
|
||||||
#define PAGE_HEIGHT 8
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
@ -98,7 +103,7 @@ uint8_t u8g_dev_lc7981_320x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_320x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_320x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -143,3 +148,4 @@ uint8_t u8g_dev_lc7981_320x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
}
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_lc7981_320x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_320x64_fn, U8G_COM_FAST_PARALLEL);
|
U8G_PB_DEV(u8g_dev_lc7981_320x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_320x64_fn, U8G_COM_FAST_PARALLEL);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,232 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_ld7032_60x32.c
|
||||||
|
|
||||||
|
60x32 OLED display
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2011, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
/* define width as 64, so that it is a multiple of 8 */
|
||||||
|
#define WIDTH 64
|
||||||
|
#define HEIGHT 32
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_ld7032_60x32_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_DLY(1), /* delay 1 ms */
|
||||||
|
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x002, /* Dot Matrix Display ON/OFF */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x001, /* ON */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x014, /* Dot Matrix Display Stand-by ON/OFF */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* ON */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x01a, /* Dot Matrix Frame Rate */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x004, /* special value for this OLED from manual */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x01d, /* Graphics Memory Writing Direction */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* reset default (right down, horizontal) */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x009, /* Display Direction */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* reset default (x,y: min --> max) */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x030, /* Display Size X */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* Column Start Output */
|
||||||
|
0x03b, /* Column End Output */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x032, /* Display Size Y */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* Row Start Output */
|
||||||
|
0x01f, /* Row End Output */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x010, /* Peak Pulse Width Set */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* 0 SCLK */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x016, /* Peak Pulse Delay Set */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* 0 SCLK */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x012, /* Dot Matrix Current Level Set */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x050, /* 0x050 * 1 uA = 80 uA */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x018, /* Pre-Charge Pulse Width */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x003, /* 3 SCLK */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x044, /* Pre-Charge Mode */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x002, /* Every Time */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x048, /* Row overlap timing */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x003, /* Pre-Charge + Peak Delay + Peak boot Timing */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x03f, /* VCC_R_SEL */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x011, /* ??? */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x03d, /* VSS selection */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* 2.8V */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x002, /* Dot Matrix Display ON/OFF */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x001, /* ON */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x008, /* write data */
|
||||||
|
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* use box commands to set start adr */
|
||||||
|
static const uint8_t u8g_dev_ld7032_60x32_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x034, /* box x start */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x000, /* 0 */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x035, /* box x end */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x007, /* */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x037, /* box y end */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
0x01f, /* */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x036, /* box y start */
|
||||||
|
U8G_ESC_ADR(1), /* data mode */
|
||||||
|
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_ld7032_60x32_sleep_on[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
/* ... */
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_ld7032_60x32_sleep_off[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
/* ... */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ld7032_60x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ld7032_60x32_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ld7032_60x32_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, pb->p.page_y0); /* y start */
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x008);
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ld7032_60x32_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ld7032_60x32_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_ld7032_60x32_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ld7032_60x32_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ld7032_60x32_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ld7032_60x32_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ld7032_60x32_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ld7032_60x32_fn, U8G_COM_PARALLEL);
|
||||||
|
U8G_PB_DEV(u8g_dev_ld7032_60x32_hw_usart_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ld7032_60x32_fn, U8G_COM_HW_USART_SPI);
|
||||||
|
|
|
@ -58,7 +58,7 @@ uint8_t u8g_dev_null(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
#endif
|
#endif
|
||||||
case U8G_DEV_MSG_GET_PAGE_BOX:
|
case U8G_DEV_MSG_GET_PAGE_BOX:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -69,12 +69,36 @@ static const uint8_t u8g_dev_pcd8544_init_seq[] PROGMEM = {
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_pcd8544_sleep_on[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
|
||||||
|
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
|
||||||
|
0x00c, /* display on, normal */
|
||||||
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_pcd8544_sleep_off[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
|
||||||
|
0x008, /* display blank */
|
||||||
|
0x024, /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */
|
||||||
|
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
uint8_t u8g_dev_pcd8544_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
uint8_t u8g_dev_pcd8544_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
{
|
{
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -101,10 +125,17 @@ uint8_t u8g_dev_pcd8544_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
|
u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
return 1;
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_sleep_off);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_pcd8544_84x48_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcd8544_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_pcd8544_84x48_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcd8544_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_pcd8544_84x48_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcd8544_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ uint8_t u8g_dev_pcf8812_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcf8812_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcf8812_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -104,6 +104,20 @@ uint8_t u8g_dev_pcf8812_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* mirrored output, not tested*/
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
uint8_t i = pb->width;
|
||||||
|
while( i > 0 )
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
u8g_WriteByte(u8g, dev, ((unsigned char *)pb->buf)[i] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -121,3 +135,4 @@ uint8_t u8g_dev_pcf8812_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
|
||||||
/* u8g_com_arduino_sw_spi_fn does not work, too fast??? */
|
/* u8g_com_arduino_sw_spi_fn does not work, too fast??? */
|
||||||
U8G_PB_DEV(u8g_dev_pcf8812_96x65_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_pcf8812_96x65_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_pcf8812_96x65_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_HW_SPI);
|
||||||
|
|
|
@ -70,7 +70,7 @@ uint8_t u8g_dev_sbn1661_122x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sbn1661_122x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sbn1661_122x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -123,7 +123,7 @@ static const uint8_t u8g_dev_ssd1306_128x32_adafruit3_init_seq[] PROGMEM = {
|
||||||
|
|
||||||
0x0ae, /* display off, sleep mode */
|
0x0ae, /* display off, sleep mode */
|
||||||
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
|
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
|
||||||
0x0a8, 0x01f, /* Feb 23, 2013: 128x32 OLED: 0x01f, 128x64 OLED 0x03f */
|
0x0a8, 0x01f, /* Feb 23, 2013: 128x32 OLED: 0x01f, 128x32 OLED 0x03f */
|
||||||
|
|
||||||
0x0d3, 0x000, /* */
|
0x0d3, 0x000, /* */
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ static const uint8_t u8g_dev_ssd1306_128x32_adafruit3_init_seq[] PROGMEM = {
|
||||||
|
|
||||||
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
|
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
|
||||||
|
|
||||||
0x020, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), Feb 23, 2013: 128x32 OLED: 0x002, 128x64 OLED 0x012 */
|
0x020, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), Feb 23, 2013: 128x32 OLED: 0x002, 128x32 OLED 0x012 */
|
||||||
0x0a1, /* segment remap a0/a1*/
|
0x0a1, /* segment remap a0/a1*/
|
||||||
0x0c8, /* c0: scan dir normal, c8: reverse */
|
0x0c8, /* c0: scan dir normal, c8: reverse */
|
||||||
0x0da, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
|
0x0da, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
|
||||||
|
@ -196,7 +196,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ uint8_t u8g_dev_ssd1306_128x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -241,7 +241,49 @@ uint8_t u8g_dev_ssd1306_128x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1306_128x32_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x32_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x32_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x32_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x32_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_HW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x32_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SSD_I2C);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x32_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SSD_I2C);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1306_128x32_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_ssd1306_128x32_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x32_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x32_2x_sw_spi = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x32_2x_hw_spi = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x32_2x_i2c = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_SSD_I2C };
|
||||||
|
|
|
@ -172,7 +172,10 @@ static const uint8_t u8g_dev_ssd1306_128x64_univision_init_seq[] PROGMEM = {
|
||||||
/* select one init sequence here */
|
/* select one init sequence here */
|
||||||
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_univision_init_seq
|
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_univision_init_seq
|
||||||
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit1_init_seq
|
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit1_init_seq
|
||||||
|
// 26. Apr 2014: in this thead: http://forum.arduino.cc/index.php?topic=234930.msg1696754;topicseen#msg1696754
|
||||||
|
// it is mentiond, that adafruit2_init_seq works better --> this will be used by the ssd1306_adafruit device
|
||||||
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit2_init_seq
|
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit2_init_seq
|
||||||
|
|
||||||
#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit3_init_seq
|
#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit3_init_seq
|
||||||
|
|
||||||
|
|
||||||
|
@ -180,7 +183,16 @@ static const uint8_t u8g_dev_ssd1306_128x64_data_start[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x010, /* set upper 4 bit of the col adr to 0 */
|
0x010, /* set upper 4 bit of the col adr to 0 */
|
||||||
0x000, /* set lower 4 bit of the col adr to 4 */
|
0x000, /* set lower 4 bit of the col adr to 0 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the sh1106 is compatible to the ssd1306, but is 132x64. display seems to be centered */
|
||||||
|
static const uint8_t u8g_dev_sh1106_128x64_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x010, /* set upper 4 bit of the col adr to 0 */
|
||||||
|
0x002, /* set lower 4 bit of the col adr to 2 (centered display with sh1106) */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -188,7 +200,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -197,7 +209,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -206,7 +218,38 @@ uint8_t u8g_dev_ssd1306_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_adafruit2_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1306_adafruit_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -232,6 +275,138 @@ uint8_t u8g_dev_ssd1306_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_sh1106_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1306_128x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_sh1106_128x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_HW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1306_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SSD_I2C);
|
U8G_PB_DEV(u8g_dev_ssd1306_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SSD_I2C);
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SSD_I2C);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1306_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_ssd1306_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x64_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x64_2x_sw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x64_2x_hw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1306_128x64_2x_i2c = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SSD_I2C };
|
||||||
|
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_sh1106_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_sh1106_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_sh1106_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SSD_I2C);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_sh1106_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_sh1106_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_sh1106_128x64_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_sh1106_128x64_2x_sw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_sh1106_128x64_2x_hw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_sh1106_128x64_2x_i2c = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SSD_I2C };
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ uint8_t u8g_dev_ssd1309_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1309_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1309_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -199,7 +199,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -244,6 +244,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
u8g_WriteByte(u8g, dev, 0x0ff);
|
u8g_WriteByte(u8g, dev, 0x0ff);
|
||||||
u8g_WriteByte(u8g, dev, 0x0ff);
|
u8g_WriteByte(u8g, dev, 0x0ff);
|
||||||
#endif
|
#endif
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
p+=cnt;
|
p+=cnt;
|
||||||
}
|
}
|
||||||
|
@ -255,6 +256,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
u8g_WriteByte(u8g, dev, 0x081);
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SLEEP_ON:
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
@ -273,7 +275,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -299,6 +301,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
u8g_WriteByte(u8g, dev, 0x0ff);
|
u8g_WriteByte(u8g, dev, 0x0ff);
|
||||||
u8g_WriteByte(u8g, dev, 0x0ff);
|
u8g_WriteByte(u8g, dev, 0x0ff);
|
||||||
#endif
|
#endif
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
p+=cnt;
|
p+=cnt;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +310,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
case U8G_DEV_MSG_CONTRAST:
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
u8g_SetChipSelect(u8g, dev, 1);
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
u8g_WriteByte(u8g, dev, 0x081);
|
u8g_WriteByte(u8g, dev, 0x0c1); /* 21 May 2013, fixed contrast command */
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
@ -325,6 +328,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_parallel , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_FAST_PARALLEL);
|
||||||
|
|
||||||
#define DWIDTH (WIDTH*2)
|
#define DWIDTH (WIDTH*2)
|
||||||
uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_buf[DWIDTH] U8G_NOCOMMON ;
|
uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_buf[DWIDTH] U8G_NOCOMMON ;
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
#define WIDTH 248
|
#define WIDTH 248
|
||||||
#endif
|
#endif
|
||||||
#define HEIGHT 64
|
#define HEIGHT 64
|
||||||
#define PAGE_HEIGHT 8
|
//#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
http://www.newhavendisplay.com/app_notes/OLED_25664.txt
|
http://www.newhavendisplay.com/app_notes/OLED_25664.txt
|
||||||
|
@ -199,7 +199,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -243,6 +243,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
u8g_WriteByte(u8g, dev, 0x00);
|
u8g_WriteByte(u8g, dev, 0x00);
|
||||||
u8g_WriteByte(u8g, dev, 0x00);
|
u8g_WriteByte(u8g, dev, 0x00);
|
||||||
#endif
|
#endif
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
p+=cnt;
|
p+=cnt;
|
||||||
}
|
}
|
||||||
|
@ -254,6 +255,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
u8g_WriteByte(u8g, dev, 0x081);
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SLEEP_ON:
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
@ -272,7 +274,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -284,7 +286,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
uint8_t *p = pb->buf;
|
uint8_t *p = pb->buf;
|
||||||
u8g_uint_t cnt;
|
u8g_uint_t cnt;
|
||||||
cnt = pb->width;
|
cnt = pb->width;
|
||||||
cnt >>= 3;
|
cnt >>= 2; /* 23 Oct 2013, changed to 2 */
|
||||||
|
|
||||||
for( i = 0; i < pb->p.page_height; i++ )
|
for( i = 0; i < pb->p.page_height; i++ )
|
||||||
{
|
{
|
||||||
|
@ -298,6 +300,7 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
u8g_WriteByte(u8g, dev, 0x00);
|
u8g_WriteByte(u8g, dev, 0x00);
|
||||||
u8g_WriteByte(u8g, dev, 0x00);
|
u8g_WriteByte(u8g, dev, 0x00);
|
||||||
#endif
|
#endif
|
||||||
|
u8g_MicroDelay(); // for DUE?
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
p+=cnt;
|
p+=cnt;
|
||||||
}
|
}
|
||||||
|
@ -322,12 +325,14 @@ uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_sw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_hw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_parallel , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_FAST_PARALLEL);
|
||||||
|
|
||||||
|
|
||||||
#define DWIDTH (WIDTH*2)
|
#define DWIDTH (WIDTH*2)
|
||||||
uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_buf[DWIDTH] U8G_NOCOMMON ;
|
uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_buf[DWIDTH] U8G_NOCOMMON ;
|
||||||
u8g_pb_t u8g_dev_ssd1322_nhd31oled_2x_gr_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1322_nhd31oled_2x_gr_buf};
|
u8g_pb_t u8g_dev_ssd1322_nhd31oled_2x_gr_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1322_nhd31oled_2x_gr_buf};
|
||||||
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_sw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_SW_SPI };
|
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_sw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_SW_SPI };
|
||||||
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_hw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_HW_SPI };
|
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_hw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ uint8_t u8g_dev_ssd1325_nhd27oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -219,7 +219,7 @@ uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -112,7 +112,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8
|
||||||
//case U8G_DEV_MSG_IS_BBX_INTERSECTION:
|
//case U8G_DEV_MSG_IS_BBX_INTERSECTION:
|
||||||
// return u8g_pb_IsIntersection((u8g_pb_t *)(dev->dev_mem), (u8g_dev_arg_bbx_t *)arg);
|
// return u8g_pb_IsIntersection((u8g_pb_t *)(dev->dev_mem), (u8g_dev_arg_bbx_t *)arg);
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -178,7 +178,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, ui
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -190,7 +190,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -218,7 +218,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, ui
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -111,7 +111,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -178,7 +178,7 @@ static uint8_t u8g_dev_ssd1325_nhd27oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, ui
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -233,7 +233,7 @@ uint8_t u8g_dev_ssd1327_96x96_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -261,7 +261,7 @@ uint8_t u8g_dev_ssd1327_96x96_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg,
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -0,0 +1,787 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_ssd1351_128x128.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, jamjardavies@gmail.com
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
History:
|
||||||
|
Initial version 20 May 2013 jamjardavies@gmail.com
|
||||||
|
indexed device 22 May 2013 olikraus@gmail.com
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 128
|
||||||
|
#define HEIGHT 128
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_ssd1351_128x128_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
|
||||||
|
0xfd, /* Command Lock */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x12,
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xfd,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xb1, /* Command Lock */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xae, /* Set Display Off */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb3,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xf1, /* Front Clock Div */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xca,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x7f, /* Set Multiplex Ratio */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa0,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xb4, /* Set Colour Depth */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x15,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, 0x7f, /* Set Column Address */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x75,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, 0x7f, /* Set Row Address */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, /* Set Display Start Line */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa2,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, /* Set Display Offset */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb5,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, /* Set GPIO */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xab,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x01, /* Set Function Selection */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x32, /* Set Phase Length */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb4,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xa0, 0xb5, 0x55, /* Set Segment Low Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xbb,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x17, /* Set Precharge Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xbe,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x05, /* Set VComH Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xc1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xc8, 0x80, 0xc8, /* Set Contrast */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xc7,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x0f, /* Set Master Contrast */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb6,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x01, /* Set Second Precharge Period */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa6, /* Set Display Mode Reset */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb8, /* Set CMD Grayscale Lookup */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x05,
|
||||||
|
0x06,
|
||||||
|
0x07,
|
||||||
|
0x08,
|
||||||
|
0x09,
|
||||||
|
0x0a,
|
||||||
|
0x0b,
|
||||||
|
0x0c,
|
||||||
|
0x0D,
|
||||||
|
0x0E,
|
||||||
|
0x0F,
|
||||||
|
0x10,
|
||||||
|
0x11,
|
||||||
|
0x12,
|
||||||
|
0x13,
|
||||||
|
0x14,
|
||||||
|
0x15,
|
||||||
|
0x16,
|
||||||
|
0x18,
|
||||||
|
0x1a,
|
||||||
|
0x1b,
|
||||||
|
0x1C,
|
||||||
|
0x1D,
|
||||||
|
0x1F,
|
||||||
|
0x21,
|
||||||
|
0x23,
|
||||||
|
0x25,
|
||||||
|
0x27,
|
||||||
|
0x2A,
|
||||||
|
0x2D,
|
||||||
|
0x30,
|
||||||
|
0x33,
|
||||||
|
0x36,
|
||||||
|
0x39,
|
||||||
|
0x3C,
|
||||||
|
0x3F,
|
||||||
|
0x42,
|
||||||
|
0x45,
|
||||||
|
0x48,
|
||||||
|
0x4C,
|
||||||
|
0x50,
|
||||||
|
0x54,
|
||||||
|
0x58,
|
||||||
|
0x5C,
|
||||||
|
0x60,
|
||||||
|
0x64,
|
||||||
|
0x68,
|
||||||
|
0x6C,
|
||||||
|
0x70,
|
||||||
|
0x74,
|
||||||
|
0x78,
|
||||||
|
0x7D,
|
||||||
|
0x82,
|
||||||
|
0x87,
|
||||||
|
0x8C,
|
||||||
|
0x91,
|
||||||
|
0x96,
|
||||||
|
0x9B,
|
||||||
|
0xA0,
|
||||||
|
0xA5,
|
||||||
|
0xAA,
|
||||||
|
0xAF,
|
||||||
|
0xB4,
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0),
|
||||||
|
0xaf, /* Set Display On */
|
||||||
|
0x5c,
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* set gpio to high */
|
||||||
|
static const uint8_t u8g_dev_ssd1351_128x128gh_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
|
||||||
|
0xfd, /* Command Lock */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x12,
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xfd,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xb1, /* Command Lock */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xae, /* Set Display Off */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb3,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xf1, /* Front Clock Div */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xca,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x7f, /* Set Multiplex Ratio */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa0,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xb4, /* Set Colour Depth */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x15,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, 0x7f, /* Set Column Address */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0x75,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, 0x7f, /* Set Row Address */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, /* Set Display Start Line */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa2,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x00, /* Set Display Offset */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb5,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x03, /* Set GPIO to High Level */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xab,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x01, /* Set Function Selection */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x32, /* Set Phase Length */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb4,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xa0, 0xb5, 0x55, /* Set Segment Low Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xbb,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x17, /* Set Precharge Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xbe,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x05, /* Set VComH Voltage */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xc1,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0xc8, 0x80, 0xc8, /* Set Contrast */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xc7,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x0f, /* Set Master Contrast */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb6,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x01, /* Set Second Precharge Period */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xa6, /* Set Display Mode Reset */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
0xb8, /* Set CMD Grayscale Lookup */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
0x05,
|
||||||
|
0x06,
|
||||||
|
0x07,
|
||||||
|
0x08,
|
||||||
|
0x09,
|
||||||
|
0x0a,
|
||||||
|
0x0b,
|
||||||
|
0x0c,
|
||||||
|
0x0D,
|
||||||
|
0x0E,
|
||||||
|
0x0F,
|
||||||
|
0x10,
|
||||||
|
0x11,
|
||||||
|
0x12,
|
||||||
|
0x13,
|
||||||
|
0x14,
|
||||||
|
0x15,
|
||||||
|
0x16,
|
||||||
|
0x18,
|
||||||
|
0x1a,
|
||||||
|
0x1b,
|
||||||
|
0x1C,
|
||||||
|
0x1D,
|
||||||
|
0x1F,
|
||||||
|
0x21,
|
||||||
|
0x23,
|
||||||
|
0x25,
|
||||||
|
0x27,
|
||||||
|
0x2A,
|
||||||
|
0x2D,
|
||||||
|
0x30,
|
||||||
|
0x33,
|
||||||
|
0x36,
|
||||||
|
0x39,
|
||||||
|
0x3C,
|
||||||
|
0x3F,
|
||||||
|
0x42,
|
||||||
|
0x45,
|
||||||
|
0x48,
|
||||||
|
0x4C,
|
||||||
|
0x50,
|
||||||
|
0x54,
|
||||||
|
0x58,
|
||||||
|
0x5C,
|
||||||
|
0x60,
|
||||||
|
0x64,
|
||||||
|
0x68,
|
||||||
|
0x6C,
|
||||||
|
0x70,
|
||||||
|
0x74,
|
||||||
|
0x78,
|
||||||
|
0x7D,
|
||||||
|
0x82,
|
||||||
|
0x87,
|
||||||
|
0x8C,
|
||||||
|
0x91,
|
||||||
|
0x96,
|
||||||
|
0x9B,
|
||||||
|
0xA0,
|
||||||
|
0xA5,
|
||||||
|
0xAA,
|
||||||
|
0xAF,
|
||||||
|
0xB4,
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0),
|
||||||
|
0xaf, /* Set Display On */
|
||||||
|
0x5c,
|
||||||
|
U8G_ESC_DLY(50),
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define u8g_dev_ssd1351_128x128_init_seq u8g_dev_ssd1351_128x128_init_seq
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_ssd1351_128x128_column_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(1),
|
||||||
|
U8G_ESC_ADR(0), 0x15,
|
||||||
|
U8G_ESC_ADR(1), 0x00, 0x7f,
|
||||||
|
U8G_ESC_ADR(0), 0x75,
|
||||||
|
U8G_ESC_ADR(1), 0x00, 0x7f,
|
||||||
|
U8G_ESC_ADR(0), 0x5c,
|
||||||
|
U8G_ESC_ADR(1),
|
||||||
|
U8G_ESC_CS(0),
|
||||||
|
U8G_ESC_END
|
||||||
|
};
|
||||||
|
|
||||||
|
#define RGB332_STREAM_BYTES 8
|
||||||
|
static uint8_t u8g_ssd1351_stream_bytes[RGB332_STREAM_BYTES*3];
|
||||||
|
|
||||||
|
void u8g_ssd1351_to_stream(uint8_t *ptr)
|
||||||
|
{
|
||||||
|
uint8_t cnt = RGB332_STREAM_BYTES;
|
||||||
|
uint8_t val;
|
||||||
|
uint8_t *dest = u8g_ssd1351_stream_bytes;
|
||||||
|
for( cnt = 0; cnt < RGB332_STREAM_BYTES; cnt++ )
|
||||||
|
{
|
||||||
|
val = *ptr++;
|
||||||
|
*dest++ = ((val & 0xe0) >> 2);
|
||||||
|
*dest++ = ((val & 0x1c) << 1);
|
||||||
|
*dest++ = ((val & 0x03) << 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef OBSOLETE
|
||||||
|
// Convert the internal RGB 332 to R
|
||||||
|
static uint8_t u8g_ssd1351_get_r(uint8_t colour)
|
||||||
|
{
|
||||||
|
//return ((colour & 0xe0) >> 5) * 9;
|
||||||
|
//return ((colour & 0xe0) >> 5) * 8;
|
||||||
|
return ((colour & 0xe0) >> 2) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the internal RGB 332 to G
|
||||||
|
static uint8_t u8g_ssd1351_get_g(uint8_t colour)
|
||||||
|
{
|
||||||
|
//return ((colour & 0x1c) >> 2) * 9;
|
||||||
|
//return ((colour & 0x1c) >> 2) * 8;
|
||||||
|
return ((colour & 0x1c) << 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert the internal RGB 332 to B
|
||||||
|
static uint8_t u8g_ssd1351_get_b(uint8_t colour)
|
||||||
|
{
|
||||||
|
//return (colour & 0x03) * 21;
|
||||||
|
return (colour & 0x03) * 16;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128_332_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
// u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_init_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_column_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_uint_t x;
|
||||||
|
uint8_t page_height;
|
||||||
|
uint8_t i;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
uint8_t *ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
|
||||||
|
page_height = pb->p.page_y1;
|
||||||
|
page_height -= pb->p.page_y0;
|
||||||
|
page_height++;
|
||||||
|
for( i = 0; i < page_height; i++ )
|
||||||
|
{
|
||||||
|
|
||||||
|
for (x = 0; x < pb->width; x+=RGB332_STREAM_BYTES)
|
||||||
|
{
|
||||||
|
u8g_ssd1351_to_stream(ptr);
|
||||||
|
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1351_stream_bytes);
|
||||||
|
ptr += RGB332_STREAM_BYTES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_R3G3B2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128gh_332_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
// u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128gh_init_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_column_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_uint_t x;
|
||||||
|
uint8_t page_height;
|
||||||
|
uint8_t i;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
uint8_t *ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
|
||||||
|
page_height = pb->p.page_y1;
|
||||||
|
page_height -= pb->p.page_y0;
|
||||||
|
page_height++;
|
||||||
|
for( i = 0; i < page_height; i++ )
|
||||||
|
{
|
||||||
|
|
||||||
|
for (x = 0; x < pb->width; x+=RGB332_STREAM_BYTES)
|
||||||
|
{
|
||||||
|
u8g_ssd1351_to_stream(ptr);
|
||||||
|
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1351_stream_bytes);
|
||||||
|
ptr += RGB332_STREAM_BYTES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_R3G3B2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t u8g_dev_ssd1351_128x128_r[256];
|
||||||
|
static uint8_t u8g_dev_ssd1351_128x128_g[256];
|
||||||
|
static uint8_t u8g_dev_ssd1351_128x128_b[256];
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128_idx_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
// u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_init_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
|
u8g_dev_ssd1351_128x128_r[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->r;
|
||||||
|
u8g_dev_ssd1351_128x128_g[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->g;
|
||||||
|
u8g_dev_ssd1351_128x128_b[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->b;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_column_seq);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
uint8_t *ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
|
||||||
|
for (x = 0; x < pb->width; x++)
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_ssd1351_128x128_r[(*ptr)>>2]);
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_ssd1351_128x128_g[(*ptr)>>2]);
|
||||||
|
u8g_WriteByte(u8g, dev, u8g_dev_ssd1351_128x128_b[(*ptr)>>2]);
|
||||||
|
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_INDEX;
|
||||||
|
}
|
||||||
|
|
||||||
|
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_ssd1351_hicolor_to_stream(uint8_t *ptr)
|
||||||
|
{
|
||||||
|
register uint8_t cnt = RGB332_STREAM_BYTES;
|
||||||
|
register uint8_t low, high, r, g, b;
|
||||||
|
uint8_t *dest = u8g_ssd1351_stream_bytes;
|
||||||
|
for( cnt = 0; cnt < RGB332_STREAM_BYTES; cnt++ )
|
||||||
|
{
|
||||||
|
low = *ptr++;
|
||||||
|
high = *ptr++;
|
||||||
|
|
||||||
|
r = high & ~7;
|
||||||
|
r >>= 2;
|
||||||
|
b = low & 31;
|
||||||
|
b <<= 1;
|
||||||
|
g = high & 7;
|
||||||
|
g <<= 3;
|
||||||
|
g |= (low>>5)&7;
|
||||||
|
|
||||||
|
*dest++ = r;
|
||||||
|
*dest++ = g;
|
||||||
|
*dest++ = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128_hicolor_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_column_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
uint8_t i, j;
|
||||||
|
uint8_t page_height;
|
||||||
|
uint8_t *ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
|
||||||
|
page_height = pb->p.page_y1;
|
||||||
|
page_height -= pb->p.page_y0;
|
||||||
|
page_height++;
|
||||||
|
for( j = 0; j < page_height; j++ )
|
||||||
|
{
|
||||||
|
for (i = 0; i < pb->width; i+=RGB332_STREAM_BYTES)
|
||||||
|
{
|
||||||
|
u8g_ssd1351_hicolor_to_stream(ptr);
|
||||||
|
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1351_stream_bytes);
|
||||||
|
ptr += RGB332_STREAM_BYTES*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break; /* continue to base fn */
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_HICOLOR;
|
||||||
|
}
|
||||||
|
return u8g_dev_pbxh16_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128gh_hicolor_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128gh_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1351_128x128_column_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
uint8_t i, j;
|
||||||
|
uint8_t page_height;
|
||||||
|
uint8_t *ptr = pb->buf;
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
|
||||||
|
page_height = pb->p.page_y1;
|
||||||
|
page_height -= pb->p.page_y0;
|
||||||
|
page_height++;
|
||||||
|
for( j = 0; j < page_height; j++ )
|
||||||
|
{
|
||||||
|
for (i = 0; i < pb->width; i+=RGB332_STREAM_BYTES)
|
||||||
|
{
|
||||||
|
u8g_ssd1351_hicolor_to_stream(ptr);
|
||||||
|
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1351_stream_bytes);
|
||||||
|
ptr += RGB332_STREAM_BYTES*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break; /* continue to base fn */
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_HICOLOR;
|
||||||
|
}
|
||||||
|
return u8g_dev_pbxh16_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128_byte_buf[WIDTH*PAGE_HEIGHT] U8G_NOCOMMON ;
|
||||||
|
|
||||||
|
u8g_pb_t u8g_dev_ssd1351_128x128_byte_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1351_128x128_byte_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_332_sw_spi = { u8g_dev_ssd1351_128x128_332_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_332_hw_spi = { u8g_dev_ssd1351_128x128_332_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_332_sw_spi = { u8g_dev_ssd1351_128x128gh_332_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_332_hw_spi = { u8g_dev_ssd1351_128x128gh_332_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
//u8g_dev_t u8g_dev_ssd1351_128x128_idx_sw_spi = { u8g_dev_ssd1351_128x128_idx_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
//u8g_dev_t u8g_dev_ssd1351_128x128_idx_hw_spi = { u8g_dev_ssd1351_128x128_idx_fn, &u8g_dev_ssd1351_128x128_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
||||||
|
/* only half of the height, because two bytes are needed for one pixel */
|
||||||
|
u8g_pb_t u8g_dev_ssd1351_128x128_hicolor_byte_pb = { {PAGE_HEIGHT/2, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1351_128x128_byte_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_hicolor_sw_spi = { u8g_dev_ssd1351_128x128_hicolor_fn, &u8g_dev_ssd1351_128x128_hicolor_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_hicolor_hw_spi = { u8g_dev_ssd1351_128x128_hicolor_fn, &u8g_dev_ssd1351_128x128_hicolor_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_hicolor_sw_spi = { u8g_dev_ssd1351_128x128gh_hicolor_fn, &u8g_dev_ssd1351_128x128_hicolor_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_hicolor_hw_spi = { u8g_dev_ssd1351_128x128gh_hicolor_fn, &u8g_dev_ssd1351_128x128_hicolor_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_ssd1351_128x128_4x_byte_buf[WIDTH*PAGE_HEIGHT*4] U8G_NOCOMMON ;
|
||||||
|
|
||||||
|
u8g_pb_t u8g_dev_ssd1351_128x128_4x_332_byte_pb = { {PAGE_HEIGHT*4, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1351_128x128_4x_byte_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_4x_332_sw_spi = { u8g_dev_ssd1351_128x128_332_fn, &u8g_dev_ssd1351_128x128_4x_332_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_4x_332_hw_spi = { u8g_dev_ssd1351_128x128_332_fn, &u8g_dev_ssd1351_128x128_4x_332_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_332_sw_spi = { u8g_dev_ssd1351_128x128gh_332_fn, &u8g_dev_ssd1351_128x128_4x_332_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_332_hw_spi = { u8g_dev_ssd1351_128x128gh_332_fn, &u8g_dev_ssd1351_128x128_4x_332_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
u8g_pb_t u8g_dev_ssd1351_128x128_4x_hicolor_byte_pb = { {PAGE_HEIGHT/2*4, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1351_128x128_4x_byte_buf};
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_4x_hicolor_sw_spi = { u8g_dev_ssd1351_128x128_hicolor_fn, &u8g_dev_ssd1351_128x128_4x_hicolor_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128_4x_hicolor_hw_spi = { u8g_dev_ssd1351_128x128_hicolor_fn, &u8g_dev_ssd1351_128x128_4x_hicolor_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_hicolor_sw_spi = { u8g_dev_ssd1351_128x128gh_hicolor_fn, &u8g_dev_ssd1351_128x128_4x_hicolor_byte_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_ssd1351_128x128gh_4x_hicolor_hw_spi = { u8g_dev_ssd1351_128x128gh_hicolor_fn, &u8g_dev_ssd1351_128x128_4x_hicolor_byte_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1351_128x128_332_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1351_128x128_332_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1351_128x128_332_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1351_128x128_332_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1351_128x128_idx_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1351_128x128_idx_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_ssd1351_128x128_idx_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1351_128x128_idx_fn, U8G_COM_HW_SPI);
|
||||||
|
*/
|
||||||
|
|
|
@ -96,7 +96,7 @@ static const uint8_t u8g_dev_st7565_64128n_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ static const uint8_t u8g_dev_st7565_64128n_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ uint8_t u8g_dev_st7565_64128n_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -148,6 +148,56 @@ uint8_t u8g_dev_st7565_64128n_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_64128n_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_st7565_64128n_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_64128n_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_64128n_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_64128n_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_st7565_64128n_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_PARALLEL);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_64128n_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_st7565_64128n_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_64128n_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_st7565_64128n_2x_sw_spi = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_64128n_2x_hw_spi = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_64128n_2x_hw_parallel = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_PARALLEL };
|
||||||
|
|
|
@ -82,7 +82,7 @@ static const uint8_t u8g_dev_st7565_dogm128_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ static const uint8_t u8g_dev_st7565_dogm128_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ uint8_t u8g_dev_st7565_dogm128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -134,7 +134,57 @@ uint8_t u8g_dev_st7565_dogm128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_dogm128_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_st7565_dogm128_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_dogm128_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_dogm128_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_dogm128_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_HW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_st7565_dogm128_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_PARALLEL);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_dogm128_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_st7565_dogm128_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_dogm128_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_st7565_dogm128_2x_sw_spi = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_dogm128_2x_hw_spi = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_dogm128_2x_parallel = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_PARALLEL };
|
||||||
|
|
|
@ -101,7 +101,7 @@ static const uint8_t u8g_dev_st7565_dogm132_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ static const uint8_t u8g_dev_st7565_dogm132_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ uint8_t u8g_dev_st7565_dogm132_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -98,7 +98,7 @@ static const uint8_t u8g_dev_st7565_lm6059_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ static const uint8_t u8g_dev_st7565_lm6059_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ uint8_t u8g_dev_st7565_lm6059_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -151,7 +151,55 @@ uint8_t u8g_dev_st7565_lm6059_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_lm6059_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_st7565_lm6059_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_lm6059_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_lm6059_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_lm6059_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_lm6059_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_st7565_lm6059_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_lm6059_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_st7565_lm6059_2x_sw_spi = { u8g_dev_st7565_lm6059_2x_fn, &u8g_dev_st7565_lm6059_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_lm6059_2x_hw_spi = { u8g_dev_st7565_lm6059_2x_fn, &u8g_dev_st7565_lm6059_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
|
@ -129,7 +129,7 @@ static const uint8_t u8g_dev_st7565_st7565_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ static const uint8_t u8g_dev_st7565_st7565_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ uint8_t u8g_dev_st7565_lm6063_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -182,7 +182,55 @@ uint8_t u8g_dev_st7565_lm6063_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_lm6063_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_st7565_lm6063_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_lm6063_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_lm6063_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_lm6063_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_lm6063_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_st7565_lm6063_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_lm6063_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_st7565_lm6063_2x_sw_spi = { u8g_dev_st7565_lm6063_2x_fn, &u8g_dev_st7565_lm6063_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_lm6063_2x_hw_spi = { u8g_dev_st7565_lm6063_2x_fn, &u8g_dev_st7565_lm6063_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ static const uint8_t u8g_dev_st7565_c12832_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ static const uint8_t u8g_dev_st7565_c12832_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ uint8_t u8g_dev_st7565_c12832_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -141,3 +141,5 @@ uint8_t u8g_dev_st7565_c12832_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_HW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_PARALLEL);
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_PARALLEL);
|
||||||
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_hw_usart_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_HW_USART_SPI);
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ static const uint8_t u8g_dev_st7565_c12864_sleep_on[] PROGMEM = {
|
||||||
0x000, /* indicator register set (not sure if this is required) */
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
0x0ae, /* display off */
|
0x0ae, /* display off */
|
||||||
0x0a5, /* all points on */
|
0x0a5, /* all points on */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ static const uint8_t u8g_dev_st7565_c12864_sleep_off[] PROGMEM = {
|
||||||
0x0a4, /* all points off */
|
0x0a4, /* all points off */
|
||||||
0x0af, /* display on */
|
0x0af, /* display on */
|
||||||
U8G_ESC_DLY(50), /* delay 50 ms */
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
U8G_ESC_CS(1), /* disable chip */
|
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
|
||||||
U8G_ESC_END /* end of sequence */
|
U8G_ESC_END /* end of sequence */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ uint8_t u8g_dev_st7565_nhd_c12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -139,7 +139,56 @@ uint8_t u8g_dev_st7565_nhd_c12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_nhd_c12864_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_st7565_nhd_c12864_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_st7565_nhd_c12864_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_nhd_c12864_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_sw_spi = { u8g_dev_st7565_nhd_c12864_2x_fn, &u8g_dev_st7565_nhd_c12864_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_hw_spi = { u8g_dev_st7565_nhd_c12864_2x_fn, &u8g_dev_st7565_nhd_c12864_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
|
@ -363,7 +363,7 @@ uint8_t u8g_dev_st7687_c144mvgd_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7687_c144mvgd_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7687_c144mvgd_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
u8g_dev_st7565_128x64.c
|
u8g_dev_st7920_128x64.c
|
||||||
|
|
||||||
Universal 8bit Graphics Library
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ uint8_t u8g_dev_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -114,7 +114,7 @@ uint8_t u8g_dev_st7920_128x64_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -160,6 +160,9 @@ uint8_t u8g_dev_st7920_128x64_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
U8G_PB_DEV(u8g_dev_st7920_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_SW_SPI);
|
U8G_PB_DEV(u8g_dev_st7920_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7920_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_HW_SPI);
|
U8G_PB_DEV(u8g_dev_st7920_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_HW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_st7920_128x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_FAST_PARALLEL);
|
U8G_PB_DEV(u8g_dev_st7920_128x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_FAST_PARALLEL);
|
||||||
|
U8G_PB_DEV(u8g_dev_st7920_128x64_custom, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, u8g_com_arduino_st7920_custom_fn);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define QWIDTH (WIDTH*4)
|
#define QWIDTH (WIDTH*4)
|
||||||
uint8_t u8g_dev_st7920_128x64_4x_buf[QWIDTH] U8G_NOCOMMON ;
|
uint8_t u8g_dev_st7920_128x64_4x_buf[QWIDTH] U8G_NOCOMMON ;
|
||||||
|
@ -167,5 +170,6 @@ u8g_pb_t u8g_dev_st7920_128x64_4x_pb = { {32, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_
|
||||||
u8g_dev_t u8g_dev_st7920_128x64_4x_sw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_SW_SPI };
|
u8g_dev_t u8g_dev_st7920_128x64_4x_sw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_SW_SPI };
|
||||||
u8g_dev_t u8g_dev_st7920_128x64_4x_hw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_HW_SPI };
|
u8g_dev_t u8g_dev_st7920_128x64_4x_hw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_HW_SPI };
|
||||||
u8g_dev_t u8g_dev_st7920_128x64_4x_8bit = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_FAST_PARALLEL };
|
u8g_dev_t u8g_dev_st7920_128x64_4x_8bit = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_FAST_PARALLEL };
|
||||||
|
u8g_dev_t u8g_dev_st7920_128x64_4x_custom = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, u8g_com_arduino_st7920_custom_fn };
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ uint8_t u8g_dev_st7920_192x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -103,7 +103,7 @@ uint8_t u8g_dev_st7920_192x32_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -68,7 +68,7 @@ uint8_t u8g_dev_st7920_202x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -106,7 +106,7 @@ uint8_t u8g_dev_st7920_202x32_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_t6963_128x128.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
Application Notes for the MGLS 128x128
|
||||||
|
www.baso.no/content/pdf/T6963C_Application.pdf
|
||||||
|
|
||||||
|
Hitachi App Notes:
|
||||||
|
https://www.sparkfun.com/datasheets/LCD/Monochrome/AN-029-Toshiba_T6963C.pdf
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
The font selection pins should generate the 8x8 font.
|
||||||
|
For the MGLS240128TZ only FS1 is available on pin 18.
|
||||||
|
FS1 must be low to generate the 8x8 font.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 128
|
||||||
|
#define HEIGHT 128
|
||||||
|
#define PAGE_HEIGHT 16
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
http://www.mark-products.com/graphics.htm#240x64%20Pixel%20Format
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* text is not used, so settings are not relevant */
|
||||||
|
static const uint8_t u8g_dev_t6963_128x128_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
|
||||||
|
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
0x000, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x021, /* set cursor position */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
0x000, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x022, /* set offset */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
0x000, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x040, /* text home */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
WIDTH/8, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x041, /* text columns */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
0x000, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x042, /* graphics home */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
WIDTH/8, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x043, /* graphics columns */
|
||||||
|
|
||||||
|
// mode set
|
||||||
|
// 0x080: Internal CG, OR Mode
|
||||||
|
// 0x081: Internal CG, EXOR Mode
|
||||||
|
// 0x083: Internal CG, AND Mode
|
||||||
|
// 0x088: External CG, OR Mode
|
||||||
|
// 0x089: External CG, EXOR Mode
|
||||||
|
// 0x08B: External CG, AND Mode
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x080, /* mode register: OR Mode, Internal Character Mode */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
// display mode
|
||||||
|
// 0x090: Display off
|
||||||
|
// 0x094: Graphic off, text on, cursor off, blink off
|
||||||
|
// 0x096: Graphic off, text on, cursor on, blink off
|
||||||
|
// 0x097: Graphic off, text on, cursor on, blink on
|
||||||
|
// 0x098: Graphic on, text off, cursor off, blink off
|
||||||
|
// 0x09a: Graphic on, text off, cursor on, blink off
|
||||||
|
// ...
|
||||||
|
// 0x09c: Graphic on, text on, cursor off, blink off
|
||||||
|
// 0x09f: Graphic on, text on, cursor on, blink on
|
||||||
|
0x098, /* mode register: Display Mode, Graphics on, Text off, Cursor off */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
0x000, /* low byte */
|
||||||
|
0x000, /* height byte */
|
||||||
|
U8G_ESC_ADR(1), /* instruction mode */
|
||||||
|
0x024, /* set adr pointer */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
|
||||||
|
U8G_ESC_ADR(0), /* data mode */
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t u8g_dev_t6963_128x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_128x128_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
uint8_t y, i;
|
||||||
|
uint16_t disp_ram_adr;
|
||||||
|
uint8_t *ptr;
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* data mode */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
y = pb->p.page_y0;
|
||||||
|
ptr = pb->buf;
|
||||||
|
disp_ram_adr = WIDTH/8;
|
||||||
|
disp_ram_adr *= y;
|
||||||
|
for( i = 0; i < PAGE_HEIGHT; i ++ )
|
||||||
|
{
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* data mode */
|
||||||
|
u8g_WriteByte(u8g, dev, disp_ram_adr&255 ); /* address low byte */
|
||||||
|
u8g_WriteByte(u8g, dev, disp_ram_adr>>8 ); /* address hight byte */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x024 ); /* set adr ptr */
|
||||||
|
|
||||||
|
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
|
||||||
|
|
||||||
|
ptr += WIDTH/8;
|
||||||
|
disp_ram_adr += WIDTH/8;
|
||||||
|
}
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* data mode */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// U8G_PB_DEV(u8g_dev_t6963_128x128_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_t6963_128x128_fn, U8G_COM_T6963);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_t6963_128x128_2x_bw_buf[WIDTH/8*PAGE_HEIGHT] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_t6963_128x128_2x_bw_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_t6963_128x128_2x_bw_buf};
|
||||||
|
u8g_dev_t u8g_dev_t6963_128x128_8bit = { u8g_dev_t6963_128x128_fn, &u8g_dev_t6963_128x128_2x_bw_pb, U8G_COM_T6963 };
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ uint8_t u8g_dev_t6963_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *a
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_128x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_128x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -146,7 +146,7 @@ uint8_t u8g_dev_t6963_240x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x128_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x128_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -146,7 +146,7 @@ uint8_t u8g_dev_t6963_240x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *a
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x64_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x64_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -78,7 +78,7 @@ uint8_t u8g_dev_tls8204_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_tls8204_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_tls8204_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
|
|
@ -0,0 +1,201 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_uc1601_c128032.c
|
||||||
|
|
||||||
|
LCD-AG-C128032R-DIW W/KK E6 PBF from http://www.artronic.pl/o_produkcie.php?id=1343
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 128
|
||||||
|
#define HEIGHT 32
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
/* init sequence */
|
||||||
|
static const uint8_t u8g_dev_uc1601_c128032_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
|
||||||
|
|
||||||
|
0x0a3, /* 0x0a3: LCD bias 1/7 , 0x0a2: LCD bias 1/9 */
|
||||||
|
0x0a0, /* 0x0a0: ADC set to normal, 0x0a1 ADC set to inverted */
|
||||||
|
0x0c8, /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */
|
||||||
|
0x0c2, /* 22 May 2013: mirror x */
|
||||||
|
|
||||||
|
0x040, /* set display start line */
|
||||||
|
|
||||||
|
0x028 | 0x04, /* power control: turn on voltage converter */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
|
||||||
|
0x028 | 0x06, /* power control: turn on voltage regulator */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
|
||||||
|
0x028 | 0x07, /* power control: turn on voltage follower */
|
||||||
|
U8G_ESC_DLY(10), /* delay 10 ms */
|
||||||
|
|
||||||
|
0x020| 0x06, /* set V0 voltage resistor ratio to 6 */
|
||||||
|
|
||||||
|
0x0af, /* display on */
|
||||||
|
|
||||||
|
//0x081, /* set contrast */
|
||||||
|
//0x018, /* contrast value*/
|
||||||
|
|
||||||
|
0x0a6, /* display normal, bit val 0: LCD pixel off. */
|
||||||
|
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
U8G_ESC_CS(0), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1601_c128032_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x010, /* set upper 4 bit of the col adr to 0 */
|
||||||
|
0x004, /* set lower 4 bit of the col adr */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1601_c128032_sleep_on[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x0ac, /* static indicator off */
|
||||||
|
0x000, /* indicator register set (not sure if this is required) */
|
||||||
|
0x0ae, /* display off */
|
||||||
|
0x0a5, /* all points on */
|
||||||
|
U8G_ESC_CS(1), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1601_c128032_sleep_off[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x0a4, /* all points off */
|
||||||
|
0x0af, /* display on */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
U8G_ESC_CS(1), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1601_c128032_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (UC1601) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1601_c128032_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (UC1601) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (UC1601) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_ON:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_sleep_on);
|
||||||
|
return 1;
|
||||||
|
case U8G_DEV_MSG_SLEEP_OFF:
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1601_c128032_sleep_off);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1601_c128032_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1601_c128032_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1601_c128032_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1601_c128032_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1601_c128032_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_uc1601_c128032_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1601_c128032_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_uc1601_c128032_2x_sw_spi = { u8g_dev_uc1601_c128032_2x_fn, &u8g_dev_uc1601_c128032_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_uc1601_c128032_2x_hw_spi = { u8g_dev_uc1601_c128032_2x_fn, &u8g_dev_uc1601_c128032_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
|
@ -0,0 +1,200 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
u8g_dev_uc1608_240x128.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com (original 240x64 library)
|
||||||
|
Modified by thieringpeti@gmail.com for Raystar rx240128 family displays
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Display: http://www.tme.eu/en/details/rx240128a-ghw/lcd-graphic-displays/raystar-optronics/
|
||||||
|
Connection: HW / SW SPI.
|
||||||
|
To get this display working, You need some extra capacitors:
|
||||||
|
|
||||||
|
connect 4.7uF caps between:
|
||||||
|
PIN1 & PIN2 VB1 +-
|
||||||
|
PIN3 & PIN4 VB0 -+
|
||||||
|
connect 0.1uF caps between:
|
||||||
|
VLCD and VSS
|
||||||
|
VBIAS and VSS
|
||||||
|
You can find some schematics with a 10M resistor parallellized with the VLCD capacitor.
|
||||||
|
|
||||||
|
Select 4-bit SPI mode.
|
||||||
|
|
||||||
|
Connect D7 (PIN9) To VDD (+3.3V)
|
||||||
|
Connect D1, D2, D4, D5, D6 to GND (PINS 10,11,12,14,15)
|
||||||
|
Connect WR0, WR1, BM0, BM1 to GND (PINS 17,18,22,23)
|
||||||
|
|
||||||
|
D0: (PIN16) AVR's SCK pin (HW SPI)
|
||||||
|
D3: (PIN13) AVR's MOSI pin (HW SPI)
|
||||||
|
CD: (PIN19) used as A0 in the library
|
||||||
|
CS: (PIN21) Connect to the defined CS pin, and You can re-use the HW SPI in different routines.
|
||||||
|
RST: (PIN20) optional reset, can be defined in the function, resets on initialization.
|
||||||
|
|
||||||
|
Adjust contrast if necessary. Default: 0x072.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 240
|
||||||
|
#define HEIGHT 128
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
/* see also ERC24064-1 for init sequence example */
|
||||||
|
static const uint8_t u8g_dev_uc1608_240x128_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(1), /* disable chip (UC1608 has positive logic for CS) */
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_RST(1), /* do reset low pulse with (15*16)+2 milliseconds */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_CS(0), /* enable chip */
|
||||||
|
0x0e2, /* soft reset */
|
||||||
|
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
0x026, /* MUX rate and temperature compensation */
|
||||||
|
|
||||||
|
0x0c8, /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */
|
||||||
|
|
||||||
|
0x0eb, /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7*/
|
||||||
|
/* default 0x0ea for 240x128 */
|
||||||
|
0x081, /* set contrast (bits 0..5) and gain (bits 6/7) */
|
||||||
|
0x072, /* default for 240x128 displays: 0x072*/
|
||||||
|
|
||||||
|
0x02f, /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
|
||||||
|
0x040, /* set display start line to 0 */
|
||||||
|
0x090, /* no fixed lines */
|
||||||
|
0x089, /* RAM access control */
|
||||||
|
|
||||||
|
0x0af, /* disable sleep mode */
|
||||||
|
0x0a4, /* normal display */
|
||||||
|
0x0a5, /* display all points, ST7565, UC1610 */
|
||||||
|
// 0x0a7, /* inverse display */
|
||||||
|
0x0a6, /* normal display */
|
||||||
|
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
0x0a4, /* normal display */
|
||||||
|
U8G_ESC_CS(1), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1608_240x128_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(0), /* enable chip */
|
||||||
|
0x010, /* set upper 4 bit of the col adr to 0 (UC1608) */
|
||||||
|
0x000, /* set lower 4 bit of the col adr to 0 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x128_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x128_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (UC1608) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); /* set contrast from, keep gain at 0 */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x128_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x128_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x128_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x128_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1608_240x128_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1608_240x128_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1608_240x128_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1608_240x128_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x128_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_uc1608_240x128_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1608_240x128_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_uc1608_240x128_2x_sw_spi = { u8g_dev_uc1608_240x128_2x_fn, &u8g_dev_uc1608_240x128_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_uc1608_240x128_2x_hw_spi = { u8g_dev_uc1608_240x128_2x_fn, &u8g_dev_uc1608_240x128_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_uc1608_240x64.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
#define WIDTH 240
|
||||||
|
#define HEIGHT 64
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
/* see also ERC24064-1 for init sequence example */
|
||||||
|
static const uint8_t u8g_dev_uc1608_240x64_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(1), /* disable chip (UC1608 has positive logic for CS) */
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_RST(1), /* do reset low pulse with (15*16)+2 milliseconds */
|
||||||
|
|
||||||
|
|
||||||
|
U8G_ESC_CS(0), /* enable chip */
|
||||||
|
0x0e2, /* soft reset */
|
||||||
|
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
#if HEIGHT <= 96
|
||||||
|
0x023, /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */
|
||||||
|
#else
|
||||||
|
/* 30 Nov 2013: not tested */
|
||||||
|
0x027, /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */
|
||||||
|
#endif
|
||||||
|
0x0c8, /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */
|
||||||
|
0x0e8, /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7*/
|
||||||
|
|
||||||
|
0x081, /* set contrast (bits 0..5) and gain (bits 6/7) */
|
||||||
|
0x014, /* ECR24064-1 default: 0x040*/
|
||||||
|
|
||||||
|
0x02f, /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */
|
||||||
|
U8G_ESC_DLY(50), /* delay 50 ms */
|
||||||
|
|
||||||
|
0x040, /* set display start line to 0 */
|
||||||
|
0x090, /* no fixed lines */
|
||||||
|
0x089, /* RAM access control */
|
||||||
|
|
||||||
|
0x0af, /* disable sleep mode */
|
||||||
|
0x0a4, /* normal display */
|
||||||
|
0x0a5, /* display all points, ST7565, UC1610 */
|
||||||
|
U8G_ESC_DLY(100), /* delay 100 ms */
|
||||||
|
0x0a4, /* normal display */
|
||||||
|
U8G_ESC_CS(1), /* disable chip */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1608_240x64_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(0), /* enable chip */
|
||||||
|
0x010, /* set upper 4 bit of the col adr to 0 (UC1608) */
|
||||||
|
0x000, /* set lower 4 bit of the col adr to 0 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x64_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (UC1608) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); /* set contrast from, keep gain at 0 */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x64_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1608_240x64_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1608_240x64_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1608_240x64_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1608_240x64_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1608_240x64_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1608_240x64_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_uc1608_240x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1608_240x64_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_uc1608_240x64_2x_sw_spi = { u8g_dev_uc1608_240x64_2x_fn, &u8g_dev_uc1608_240x64_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_uc1608_240x64_2x_hw_spi = { u8g_dev_uc1608_240x64_2x_fn, &u8g_dev_uc1608_240x64_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
|
@ -101,7 +101,7 @@ uint8_t u8g_dev_uc1610_dogxl160_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, v
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -145,7 +145,7 @@ uint8_t u8g_dev_uc1610_dogxl160_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, v
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -177,7 +177,7 @@ uint8_t u8g_dev_uc1610_dogxl160_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -208,7 +208,7 @@ uint8_t u8g_dev_uc1610_dogxl160_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
for( i = 0; i < WIDTH; i++ )
|
for( i = 0; i < WIDTH; i++ )
|
||||||
{
|
{
|
||||||
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf+WIDTH))[i] ) );
|
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)((uint8_t *)(pb->buf)+WIDTH))[i] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
|
||||||
|
@ -216,7 +216,7 @@ uint8_t u8g_dev_uc1610_dogxl160_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
for( i = 0; i < WIDTH; i++ )
|
for( i = 0; i < WIDTH; i++ )
|
||||||
{
|
{
|
||||||
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf+WIDTH))[i] >> 4 ) );
|
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)((uint8_t *)(pb->buf)+WIDTH))[i] >> 4 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
@ -238,7 +238,7 @@ uint8_t u8g_dev_uc1610_dogxl160_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -256,7 +256,7 @@ uint8_t u8g_dev_uc1610_dogxl160_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
|
||||||
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2+1) ); /* select current page (UC1610) */
|
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2+1) ); /* select current page (UC1610) */
|
||||||
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
if ( u8g_WriteSequence(u8g, dev, WIDTH, pb->buf+WIDTH) == 0 )
|
if ( u8g_WriteSequence(u8g, dev, WIDTH, (uint8_t *)(pb->buf)+WIDTH) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u8g_SetChipSelect(u8g, dev, 0);
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_uc1611_dogm240.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2014, dev.menges.jonas@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define WIDTH 240
|
||||||
|
#define HEIGHT 64
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1611_dogm240_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(1), // enable chip
|
||||||
|
U8G_ESC_ADR(0), // instruction mode
|
||||||
|
0xF1, // set last COM electrode
|
||||||
|
0x3F, // 64-1=63
|
||||||
|
0xF2, // set display start line
|
||||||
|
0x00, // 0
|
||||||
|
0xF3, // set display end line
|
||||||
|
0x3F, // 64-1=63
|
||||||
|
0x81, // set contrast (0-255)
|
||||||
|
0xB7, // 183
|
||||||
|
0xC0, // set view
|
||||||
|
//0x04, // topview
|
||||||
|
0x02, // bottomview
|
||||||
|
0xA3, // set line rate (9.4k)
|
||||||
|
0xE9, // set bias ratio (10)
|
||||||
|
0xA9, // enable display
|
||||||
|
0xD1, // set black and white mode
|
||||||
|
U8G_ESC_CS(0), // disable chip
|
||||||
|
U8G_ESC_END // end of sequence
|
||||||
|
};
|
||||||
|
|
||||||
|
static void setPage(u8g_t *u8g, u8g_dev_t *dev, unsigned char page)
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, 0x70);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x60 + (page&0x0F));
|
||||||
|
}
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1611_dogm240_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x10, /* set upper 4 bit of the col adr to 0 */
|
||||||
|
0x00, /* set lower 4 bit of the col adr to 0 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1611_dogm240_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1611_dogm240_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1611_dogm240_data_start);
|
||||||
|
setPage(u8g, dev, pb->p.page); /* select current page (uc1611) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x81);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); /* set contrast from, keep gain at 0 */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogm240_i2c , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogm240_fn, U8G_COM_UC_I2C);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogm240_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogm240_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogm240_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogm240_fn, U8G_COM_HW_SPI);
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_dev_uc1611_dogxl240.c
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2014, dev.menges.jonas@gmail.com, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define WIDTH 240
|
||||||
|
#define HEIGHT 128
|
||||||
|
#define PAGE_HEIGHT 8
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1611_dogxl240_init_seq[] PROGMEM = {
|
||||||
|
U8G_ESC_CS(1), // enable chip
|
||||||
|
U8G_ESC_ADR(0), // instruction mode
|
||||||
|
0xF1, // set last COM electrode
|
||||||
|
0x7F, // DOGXL240
|
||||||
|
0xF2, // set display start line
|
||||||
|
0x00, // 0
|
||||||
|
0xF3, // set display end line
|
||||||
|
0x7F, // DOGXL240
|
||||||
|
0x81, // set contrast (0-255)
|
||||||
|
0xAA, // DOGXL240
|
||||||
|
0xC0, // set view
|
||||||
|
//0x04, // topview
|
||||||
|
0x02, // bottomview
|
||||||
|
0xA3, // set line rate (9.4k)
|
||||||
|
0xE9, // set bias ratio (10)
|
||||||
|
0xA9, // enable display
|
||||||
|
0xD1, // set black and white mode
|
||||||
|
U8G_ESC_CS(0), // disable chip
|
||||||
|
U8G_ESC_END // end of sequence
|
||||||
|
};
|
||||||
|
|
||||||
|
static void u8g_dev_dogxl240_set_page(u8g_t *u8g, u8g_dev_t *dev, unsigned char page)
|
||||||
|
{
|
||||||
|
u8g_WriteByte(u8g, dev, 0x70);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x60 + (page&0x0F));
|
||||||
|
}
|
||||||
|
|
||||||
|
static const uint8_t u8g_dev_uc1611_dogxl240_data_start[] PROGMEM = {
|
||||||
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
0x10, /* set upper 4 bit of the col adr to 0 */
|
||||||
|
0x00, /* set lower 4 bit of the col adr to 0 */
|
||||||
|
U8G_ESC_END /* end of sequence */
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint8_t u8g_dev_uc1611_dogxl240_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1611_dogxl240_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1611_dogxl240_data_start);
|
||||||
|
u8g_dev_dogxl240_set_page(u8g, dev, pb->p.page); /* select current page (uc1611) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x81);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); /* set contrast from, keep gain at 0 */
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogxl240_i2c , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogxl240_fn, U8G_COM_UC_I2C);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogxl240_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogxl240_fn, U8G_COM_SW_SPI);
|
||||||
|
U8G_PB_DEV(u8g_dev_uc1611_dogxl240_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1611_dogxl240_fn, U8G_COM_HW_SPI);
|
||||||
|
|
|
@ -45,6 +45,8 @@ static const uint8_t u8g_dev_dogs102_init_seq[] PROGMEM = {
|
||||||
U8G_ESC_ADR(0), /* instruction mode */
|
U8G_ESC_ADR(0), /* instruction mode */
|
||||||
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
|
||||||
|
0x0e2, /* soft reset */
|
||||||
0x040, /* set display start line to 0 */
|
0x040, /* set display start line to 0 */
|
||||||
0x0a1, /* ADC set to reverse */
|
0x0a1, /* ADC set to reverse */
|
||||||
0x0c0, /* common output mode */
|
0x0c0, /* common output mode */
|
||||||
|
@ -80,7 +82,7 @@ uint8_t u8g_dev_dogs102_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -107,7 +109,49 @@ uint8_t u8g_dev_dogs102_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1701_dogs102_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_uc1701_dogs102_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_uc1701_dogs102_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_uc1701_dogs102_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_uc1701_dogs102_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1701_dogs102_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_uc1701_dogs102_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1701_dogs102_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_uc1701_dogs102_2x_sw_spi = { u8g_dev_uc1701_dogs102_2x_fn, &u8g_dev_uc1701_dogs102_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_uc1701_dogs102_2x_hw_spi = { u8g_dev_uc1701_dogs102_2x_fn, &u8g_dev_uc1701_dogs102_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ static const uint8_t u8g_dev_uc1701_mini12864_init_seq[] PROGMEM = {
|
||||||
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
|
||||||
U8G_ESC_CS(1), /* enable chip */
|
U8G_ESC_CS(1), /* enable chip */
|
||||||
|
|
||||||
|
0x0e2, /* soft reset */
|
||||||
0x040, /* set display start line to 0 */
|
0x040, /* set display start line to 0 */
|
||||||
0x0a0, /* ADC set to reverse */
|
0x0a0, /* ADC set to reverse */
|
||||||
0x0c8, /* common output mode */
|
0x0c8, /* common output mode */
|
||||||
|
@ -83,7 +84,7 @@ uint8_t u8g_dev_uc1701_mini12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
u8g_InitCom(u8g, dev);
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_init_seq);
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_init_seq);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
|
@ -110,5 +111,48 @@ uint8_t u8g_dev_uc1701_mini12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, voi
|
||||||
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1701_mini12864_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_init_seq);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
|
||||||
|
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_data_start);
|
||||||
|
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page */
|
||||||
|
u8g_SetAddress(u8g, dev, 1); /* data mode */
|
||||||
|
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_CONTRAST:
|
||||||
|
u8g_SetChipSelect(u8g, dev, 1);
|
||||||
|
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
|
||||||
|
u8g_WriteByte(u8g, dev, 0x081);
|
||||||
|
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
|
||||||
|
u8g_SetChipSelect(u8g, dev, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
|
||||||
|
}
|
||||||
|
|
||||||
U8G_PB_DEV(u8g_dev_uc1701_mini12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_SW_SPI);
|
U8G_PB_DEV(u8g_dev_uc1701_mini12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_SW_SPI);
|
||||||
U8G_PB_DEV(u8g_dev_uc1701_mini12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_HW_SPI);
|
U8G_PB_DEV(u8g_dev_uc1701_mini12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_HW_SPI);
|
||||||
|
|
||||||
|
uint8_t u8g_dev_uc1701_mini12864_2x_buf[WIDTH*2] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_dev_uc1701_mini12864_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1701_mini12864_2x_buf};
|
||||||
|
u8g_dev_t u8g_dev_uc1701_mini12864_2x_sw_spi = { u8g_dev_uc1701_mini12864_2x_fn, &u8g_dev_uc1701_mini12864_2x_pb, U8G_COM_SW_SPI };
|
||||||
|
u8g_dev_t u8g_dev_uc1701_mini12864_2x_hw_spi = { u8g_dev_uc1701_mini12864_2x_fn, &u8g_dev_uc1701_mini12864_2x_pb, U8G_COM_HW_SPI };
|
||||||
|
|
|
@ -98,3 +98,296 @@ void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t xr, u8
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(U8G_16BIT)
|
||||||
|
typedef int32_t u8g_long_t;
|
||||||
|
#else
|
||||||
|
typedef int16_t u8g_long_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Source:
|
||||||
|
ftp://pc.fk0.name/pub/books/programming/bezier-ellipse.pdf
|
||||||
|
Foley, Computer Graphics, p 90
|
||||||
|
*/
|
||||||
|
static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
|
||||||
|
static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
|
||||||
|
{
|
||||||
|
/* upper right */
|
||||||
|
if ( option & U8G_DRAW_UPPER_RIGHT )
|
||||||
|
{
|
||||||
|
u8g_DrawPixel(u8g, x0 + x, y0 - y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* upper left */
|
||||||
|
if ( option & U8G_DRAW_UPPER_LEFT )
|
||||||
|
{
|
||||||
|
u8g_DrawPixel(u8g, x0 - x, y0 - y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lower right */
|
||||||
|
if ( option & U8G_DRAW_LOWER_RIGHT )
|
||||||
|
{
|
||||||
|
u8g_DrawPixel(u8g, x0 + x, y0 + y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lower left */
|
||||||
|
if ( option & U8G_DRAW_LOWER_LEFT )
|
||||||
|
{
|
||||||
|
u8g_DrawPixel(u8g, x0 - x, y0 + y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_draw_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
|
||||||
|
{
|
||||||
|
u8g_uint_t x, y;
|
||||||
|
u8g_long_t xchg, ychg;
|
||||||
|
u8g_long_t err;
|
||||||
|
u8g_long_t rxrx2;
|
||||||
|
u8g_long_t ryry2;
|
||||||
|
u8g_long_t stopx, stopy;
|
||||||
|
|
||||||
|
rxrx2 = rx;
|
||||||
|
rxrx2 *= rx;
|
||||||
|
rxrx2 *= 2;
|
||||||
|
|
||||||
|
ryry2 = ry;
|
||||||
|
ryry2 *= ry;
|
||||||
|
ryry2 *= 2;
|
||||||
|
|
||||||
|
x = rx;
|
||||||
|
y = 0;
|
||||||
|
|
||||||
|
xchg = 1;
|
||||||
|
xchg -= rx;
|
||||||
|
xchg -= rx;
|
||||||
|
xchg *= ry;
|
||||||
|
xchg *= ry;
|
||||||
|
|
||||||
|
ychg = rx;
|
||||||
|
ychg *= rx;
|
||||||
|
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
stopx = ryry2;
|
||||||
|
stopx *= rx;
|
||||||
|
stopy = 0;
|
||||||
|
|
||||||
|
while( stopx >= stopy )
|
||||||
|
{
|
||||||
|
u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
|
||||||
|
y++;
|
||||||
|
stopy += rxrx2;
|
||||||
|
err += ychg;
|
||||||
|
ychg += rxrx2;
|
||||||
|
if ( 2*err+xchg > 0 )
|
||||||
|
{
|
||||||
|
x--;
|
||||||
|
stopx -= ryry2;
|
||||||
|
err += xchg;
|
||||||
|
xchg += ryry2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x = 0;
|
||||||
|
y = ry;
|
||||||
|
|
||||||
|
xchg = ry;
|
||||||
|
xchg *= ry;
|
||||||
|
|
||||||
|
ychg = 1;
|
||||||
|
ychg -= ry;
|
||||||
|
ychg -= ry;
|
||||||
|
ychg *= rx;
|
||||||
|
ychg *= rx;
|
||||||
|
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
stopx = 0;
|
||||||
|
|
||||||
|
stopy = rxrx2;
|
||||||
|
stopy *= ry;
|
||||||
|
|
||||||
|
|
||||||
|
while( stopx <= stopy )
|
||||||
|
{
|
||||||
|
u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
|
||||||
|
x++;
|
||||||
|
stopx += ryry2;
|
||||||
|
err += xchg;
|
||||||
|
xchg += ryry2;
|
||||||
|
if ( 2*err+ychg > 0 )
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
stopy -= rxrx2;
|
||||||
|
err += ychg;
|
||||||
|
ychg += rxrx2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
|
||||||
|
{
|
||||||
|
/* check for bounding box */
|
||||||
|
{
|
||||||
|
u8g_uint_t rxp, rxp2;
|
||||||
|
u8g_uint_t ryp, ryp2;
|
||||||
|
|
||||||
|
rxp = rx;
|
||||||
|
rxp++;
|
||||||
|
rxp2 = rxp;
|
||||||
|
rxp2 *= 2;
|
||||||
|
|
||||||
|
ryp = ry;
|
||||||
|
ryp++;
|
||||||
|
ryp2 = ryp;
|
||||||
|
ryp2 *= 2;
|
||||||
|
|
||||||
|
if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_draw_ellipse(u8g, x0, y0, rx, ry, option);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
|
||||||
|
static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
|
||||||
|
{
|
||||||
|
/* upper right */
|
||||||
|
if ( option & U8G_DRAW_UPPER_RIGHT )
|
||||||
|
{
|
||||||
|
u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* upper left */
|
||||||
|
if ( option & U8G_DRAW_UPPER_LEFT )
|
||||||
|
{
|
||||||
|
u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lower right */
|
||||||
|
if ( option & U8G_DRAW_LOWER_RIGHT )
|
||||||
|
{
|
||||||
|
u8g_DrawVLine(u8g, x0+x, y0, y+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lower left */
|
||||||
|
if ( option & U8G_DRAW_LOWER_LEFT )
|
||||||
|
{
|
||||||
|
u8g_DrawVLine(u8g, x0-x, y0, y+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_draw_filled_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
|
||||||
|
{
|
||||||
|
u8g_uint_t x, y;
|
||||||
|
u8g_long_t xchg, ychg;
|
||||||
|
u8g_long_t err;
|
||||||
|
u8g_long_t rxrx2;
|
||||||
|
u8g_long_t ryry2;
|
||||||
|
u8g_long_t stopx, stopy;
|
||||||
|
|
||||||
|
rxrx2 = rx;
|
||||||
|
rxrx2 *= rx;
|
||||||
|
rxrx2 *= 2;
|
||||||
|
|
||||||
|
ryry2 = ry;
|
||||||
|
ryry2 *= ry;
|
||||||
|
ryry2 *= 2;
|
||||||
|
|
||||||
|
x = rx;
|
||||||
|
y = 0;
|
||||||
|
|
||||||
|
xchg = 1;
|
||||||
|
xchg -= rx;
|
||||||
|
xchg -= rx;
|
||||||
|
xchg *= ry;
|
||||||
|
xchg *= ry;
|
||||||
|
|
||||||
|
ychg = rx;
|
||||||
|
ychg *= rx;
|
||||||
|
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
stopx = ryry2;
|
||||||
|
stopx *= rx;
|
||||||
|
stopy = 0;
|
||||||
|
|
||||||
|
while( stopx >= stopy )
|
||||||
|
{
|
||||||
|
u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
|
||||||
|
y++;
|
||||||
|
stopy += rxrx2;
|
||||||
|
err += ychg;
|
||||||
|
ychg += rxrx2;
|
||||||
|
if ( 2*err+xchg > 0 )
|
||||||
|
{
|
||||||
|
x--;
|
||||||
|
stopx -= ryry2;
|
||||||
|
err += xchg;
|
||||||
|
xchg += ryry2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x = 0;
|
||||||
|
y = ry;
|
||||||
|
|
||||||
|
xchg = ry;
|
||||||
|
xchg *= ry;
|
||||||
|
|
||||||
|
ychg = 1;
|
||||||
|
ychg -= ry;
|
||||||
|
ychg -= ry;
|
||||||
|
ychg *= rx;
|
||||||
|
ychg *= rx;
|
||||||
|
|
||||||
|
err = 0;
|
||||||
|
|
||||||
|
stopx = 0;
|
||||||
|
|
||||||
|
stopy = rxrx2;
|
||||||
|
stopy *= ry;
|
||||||
|
|
||||||
|
|
||||||
|
while( stopx <= stopy )
|
||||||
|
{
|
||||||
|
u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
|
||||||
|
x++;
|
||||||
|
stopx += ryry2;
|
||||||
|
err += xchg;
|
||||||
|
xchg += ryry2;
|
||||||
|
if ( 2*err+ychg > 0 )
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
stopy -= rxrx2;
|
||||||
|
err += ychg;
|
||||||
|
ychg += rxrx2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_DrawFilledEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
|
||||||
|
{
|
||||||
|
/* check for bounding box */
|
||||||
|
{
|
||||||
|
u8g_uint_t rxp, rxp2;
|
||||||
|
u8g_uint_t ryp, ryp2;
|
||||||
|
|
||||||
|
rxp = rx;
|
||||||
|
rxp++;
|
||||||
|
rxp2 = rxp;
|
||||||
|
rxp2 *= 2;
|
||||||
|
|
||||||
|
ryp = ry;
|
||||||
|
ryp++;
|
||||||
|
ryp2 = ryp;
|
||||||
|
ryp2 *= 2;
|
||||||
|
|
||||||
|
if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_draw_filled_ellipse(u8g, x0, y0, rx, ry, option);
|
||||||
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
@ -120,6 +119,7 @@ static uint8_t u8g_font_GetFontGlyphStructureSize(const u8g_fntpgm_uint8_t *font
|
||||||
{
|
{
|
||||||
case 0: return 6;
|
case 0: return 6;
|
||||||
case 1: return 3;
|
case 1: return 3;
|
||||||
|
case 2: return 6;
|
||||||
}
|
}
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
@ -281,6 +281,7 @@ static void u8g_CopyGlyphDataToCache(u8g_t *u8g, u8g_glyph_t g)
|
||||||
switch( u8g_font_GetFormat(u8g->font) )
|
switch( u8g_font_GetFormat(u8g->font) )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
case 2:
|
||||||
/*
|
/*
|
||||||
format 0
|
format 0
|
||||||
glyph information
|
glyph information
|
||||||
|
@ -961,6 +962,7 @@ int8_t u8g_DrawGlyphFontBBX(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir,
|
||||||
x -= u8g_GetFontBBXOffX(u8g);
|
x -= u8g_GetFontBBXOffX(u8g);
|
||||||
y += u8g_GetFontBBXOffY(u8g);
|
y += u8g_GetFontBBXOffY(u8g);
|
||||||
u8g_draw_glyph(u8g, x, y, encoding);
|
u8g_draw_glyph(u8g, x, y, encoding);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1420,3 +1422,79 @@ void u8g_SetFont(u8g_t *u8g, const u8g_fntpgm_uint8_t *font)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*========================================================================*/
|
||||||
|
/* anti aliasing fonts */
|
||||||
|
|
||||||
|
int8_t u8g_draw_aa_glyph(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t encoding)
|
||||||
|
{
|
||||||
|
const u8g_pgm_uint8_t *data;
|
||||||
|
uint8_t w, h;
|
||||||
|
uint8_t i, j;
|
||||||
|
u8g_uint_t ix, iy;
|
||||||
|
|
||||||
|
{
|
||||||
|
u8g_glyph_t g = u8g_GetGlyph(u8g, encoding);
|
||||||
|
if ( g == NULL )
|
||||||
|
return 0;
|
||||||
|
data = u8g_font_GetGlyphDataStart(u8g->font, g);
|
||||||
|
}
|
||||||
|
|
||||||
|
w = u8g->glyph_width;
|
||||||
|
h = u8g->glyph_height;
|
||||||
|
|
||||||
|
x += u8g->glyph_x;
|
||||||
|
y -= u8g->glyph_y;
|
||||||
|
y--;
|
||||||
|
|
||||||
|
if ( u8g_IsBBXIntersection(u8g, x, y-h+1, w, h) == 0 )
|
||||||
|
return u8g->glyph_dx;
|
||||||
|
|
||||||
|
/* now, w is reused as bytes per line */
|
||||||
|
w += 3;
|
||||||
|
w /= 4;
|
||||||
|
|
||||||
|
iy = y;
|
||||||
|
iy -= h;
|
||||||
|
iy++;
|
||||||
|
|
||||||
|
for( j = 0; j < h; j++ )
|
||||||
|
{
|
||||||
|
ix = x;
|
||||||
|
for( i = 0; i < w; i++ )
|
||||||
|
{
|
||||||
|
u8g_Draw4TPixel(u8g, ix, iy, 0, u8g_pgm_read(data));
|
||||||
|
data++;
|
||||||
|
ix+=4;
|
||||||
|
}
|
||||||
|
iy++;
|
||||||
|
}
|
||||||
|
return u8g->glyph_dx;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t u8g_DrawAAGlyph(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t encoding)
|
||||||
|
{
|
||||||
|
y += u8g->font_calc_vref(u8g);
|
||||||
|
return u8g_draw_aa_glyph(u8g, x, y, encoding);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_uint_t u8g_DrawAAStr(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, const char *s)
|
||||||
|
{
|
||||||
|
u8g_uint_t t = 0;
|
||||||
|
int8_t d;
|
||||||
|
|
||||||
|
if ( u8g_font_GetFormat(u8g->font) != 2 )
|
||||||
|
return 0;
|
||||||
|
//u8g_uint_t u8g_GetStrWidth(u8g, s);
|
||||||
|
//u8g_font_GetFontAscent(u8g->font)-u8g_font_GetFontDescent(u8g->font);
|
||||||
|
|
||||||
|
y += u8g->font_calc_vref(u8g);
|
||||||
|
|
||||||
|
while( *s != '\0' )
|
||||||
|
{
|
||||||
|
d = u8g_draw_aa_glyph(u8g, x, y, *s);
|
||||||
|
x += d;
|
||||||
|
t += d;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -102,6 +102,17 @@ void u8g_Draw8PixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, ui
|
||||||
u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_8PIXEL, arg);
|
u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_8PIXEL, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_Draw4TPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
|
||||||
|
{
|
||||||
|
u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel);
|
||||||
|
arg->x = x;
|
||||||
|
arg->y = y;
|
||||||
|
arg->dir = dir;
|
||||||
|
arg->pixel = pixel;
|
||||||
|
u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_4TPIXEL, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
|
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
|
||||||
uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
|
uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
|
||||||
{
|
{
|
||||||
|
@ -145,7 +156,6 @@ void u8g_UpdateDimension(u8g_t *u8g)
|
||||||
|
|
||||||
static void u8g_init_data(u8g_t *u8g)
|
static void u8g_init_data(u8g_t *u8g)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
|
||||||
u8g->font = NULL;
|
u8g->font = NULL;
|
||||||
u8g->cursor_font = NULL;
|
u8g->cursor_font = NULL;
|
||||||
u8g->cursor_bg_color = 0;
|
u8g->cursor_bg_color = 0;
|
||||||
|
@ -153,8 +163,13 @@ static void u8g_init_data(u8g_t *u8g)
|
||||||
u8g->cursor_encoding = 34;
|
u8g->cursor_encoding = 34;
|
||||||
u8g->cursor_fn = (u8g_draw_cursor_fn)0;
|
u8g->cursor_fn = (u8g_draw_cursor_fn)0;
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
for( i = 0; i < U8G_PIN_LIST_LEN; i++ )
|
for( i = 0; i < U8G_PIN_LIST_LEN; i++ )
|
||||||
u8g->pin_list[i] = U8G_PIN_NONE;
|
u8g->pin_list[i] = U8G_PIN_NONE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
u8g_SetColorIndex(u8g, 1);
|
u8g_SetColorIndex(u8g, 1);
|
||||||
|
|
||||||
|
@ -192,6 +207,33 @@ uint8_t u8g_Init(u8g_t *u8g, u8g_dev_t *dev)
|
||||||
return u8g_Begin(u8g);
|
return u8g_Begin(u8g);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* special init for pure ARM systems */
|
||||||
|
uint8_t u8g_InitComFn(u8g_t *u8g, u8g_dev_t *dev, u8g_com_fnptr com_fn)
|
||||||
|
{
|
||||||
|
u8g_init_data(u8g);
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
for( i = 0; i < U8G_PIN_LIST_LEN; i++ )
|
||||||
|
u8g->pin_list[i] = U8G_PIN_DUMMY;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
u8g->dev = dev;
|
||||||
|
|
||||||
|
/* replace the device procedure with a custom communication procedure */
|
||||||
|
u8g->dev->com_fn = com_fn;
|
||||||
|
|
||||||
|
/* On the Arduino Environment this will lead to two calls to u8g_Begin(), the following line will be called first (by U8glib constructors) */
|
||||||
|
/* if - in future releases - this is removed, then still call u8g_UpdateDimension() */
|
||||||
|
/* if Arduino call u8g_UpdateDimension else u8g_Begin */
|
||||||
|
/* issue 146 */
|
||||||
|
return u8g_Begin(u8g);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(U8G_WITH_PINLIST)
|
||||||
uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
|
uint8_t u8g_InitSPI(u8g_t *u8g, u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -336,6 +378,7 @@ uint8_t u8g_InitRW8Bit(u8g_t *u8g, u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8
|
||||||
|
|
||||||
return u8g_Begin(u8g);
|
return u8g_Begin(u8g);
|
||||||
}
|
}
|
||||||
|
#endif /* defined(U8G_WITH_PINLIST) */
|
||||||
|
|
||||||
void u8g_FirstPage(u8g_t *u8g)
|
void u8g_FirstPage(u8g_t *u8g)
|
||||||
{
|
{
|
||||||
|
@ -377,6 +420,12 @@ void u8g_Draw8Pixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t
|
||||||
u8g_Draw8PixelLL(u8g, u8g->dev, x, y, dir, pixel);
|
u8g_Draw8PixelLL(u8g, u8g->dev, x, y, dir, pixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_Draw4TPixel(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel)
|
||||||
|
{
|
||||||
|
u8g_Draw4TPixelLL(u8g, u8g->dev, x, y, dir, pixel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* u8g_IsBBXIntersection() has been moved to u8g_clip.c */
|
/* u8g_IsBBXIntersection() has been moved to u8g_clip.c */
|
||||||
#ifdef OBSOLETE_CODE
|
#ifdef OBSOLETE_CODE
|
||||||
uint8_t u8g_IsBBXIntersection(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
|
uint8_t u8g_IsBBXIntersection(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
|
||||||
|
@ -394,12 +443,72 @@ uint8_t u8g_IsBBXIntersection(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
idx: index for the palette entry (0..255)
|
||||||
|
r: value for red (0..255)
|
||||||
|
g: value for green (0..255)
|
||||||
|
b: value for blue (0..255)
|
||||||
|
*/
|
||||||
|
void u8g_SetColorEntry(u8g_t *u8g, uint8_t idx, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
u8g_dev_arg_irgb_t irgb;
|
||||||
|
irgb.idx = idx;
|
||||||
|
irgb.r = r;
|
||||||
|
irgb.g = g;
|
||||||
|
irgb.b = b;
|
||||||
|
u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SET_COLOR_ENTRY, &irgb);
|
||||||
|
}
|
||||||
|
|
||||||
void u8g_SetColorIndex(u8g_t *u8g, uint8_t idx)
|
void u8g_SetColorIndex(u8g_t *u8g, uint8_t idx)
|
||||||
{
|
{
|
||||||
u8g->arg_pixel.color = idx;
|
u8g->arg_pixel.color = idx;
|
||||||
/*u8g->color_index = idx; */ /* must be removed */
|
/*u8g->color_index = idx; */ /* must be removed */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_SetHiColor(u8g_t *u8g, uint16_t rgb)
|
||||||
|
{
|
||||||
|
u8g->arg_pixel.color = rgb&255;
|
||||||
|
u8g->arg_pixel.hi_color = rgb>>8;
|
||||||
|
/*u8g->color_index = idx; */ /* must be removed */
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_SetHiColorByRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
|
||||||
|
r &= ~7;
|
||||||
|
g >>= 2;
|
||||||
|
b >>= 3;
|
||||||
|
u8g->arg_pixel.color = b;
|
||||||
|
u8g->arg_pixel.color |= (g & 7) << 5;
|
||||||
|
u8g->arg_pixel.hi_color = r;
|
||||||
|
u8g->arg_pixel.hi_color |= (g>>3) & 7;
|
||||||
|
|
||||||
|
//u8g_SetHiColor(u8g, U8G_GET_HICOLOR_BY_RGB(r,g,b));
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_SetRGB(u8g_t *u8g, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
if ( u8g->mode == U8G_MODE_R3G3B2 )
|
||||||
|
{
|
||||||
|
r &= 0x0e0;
|
||||||
|
g &= 0x0e0;
|
||||||
|
g >>= 3;
|
||||||
|
b >>= 6;
|
||||||
|
u8g->arg_pixel.color = r | g | b;
|
||||||
|
}
|
||||||
|
else if ( u8g->mode == U8G_MODE_HICOLOR )
|
||||||
|
{
|
||||||
|
u8g_SetHiColorByRGB(u8g, r,g,b);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
u8g->arg_pixel.color = r;
|
||||||
|
u8g->arg_pixel.hi_color = g;
|
||||||
|
u8g->arg_pixel.blue = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t u8g_GetColorIndex(u8g_t *u8g)
|
uint8_t u8g_GetColorIndex(u8g_t *u8g)
|
||||||
{
|
{
|
||||||
return u8g->arg_pixel.color;
|
return u8g->arg_pixel.color;
|
||||||
|
@ -420,7 +529,15 @@ uint8_t u8g_GetDefaultForegroundColor(u8g_t *u8g)
|
||||||
|
|
||||||
void u8g_SetDefaultForegroundColor(u8g_t *u8g)
|
void u8g_SetDefaultForegroundColor(u8g_t *u8g)
|
||||||
{
|
{
|
||||||
|
if ( u8g->mode == U8G_MODE_HICOLOR )
|
||||||
|
{
|
||||||
|
u8g->arg_pixel.color = 0x0ff;
|
||||||
|
u8g->arg_pixel.hi_color = 0x0ff;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
u8g_SetColorIndex(u8g, u8g_GetDefaultForegroundColor(u8g));
|
u8g_SetColorIndex(u8g, u8g_GetDefaultForegroundColor(u8g));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t u8g_GetDefaultBackgroundColor(u8g_t *u8g)
|
uint8_t u8g_GetDefaultBackgroundColor(u8g_t *u8g)
|
||||||
|
|
|
@ -187,7 +187,7 @@ uint8_t u8g_dev_pb14v1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -200,7 +200,7 @@ uint8_t u8g_dev_pb16h1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -62,8 +62,8 @@ void u8g_pb16h2_Init(u8g_pb_t *b, void *buf, u8g_uint_t width)
|
||||||
u8g_pb16h2_Clear(b);
|
u8g_pb16h2_Clear(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void u8g_pb16h2_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index) U8G_NOINLINE;
|
static void u8g_pb16h2_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index, uint8_t is_or) U8G_NOINLINE;
|
||||||
static void u8g_pb16h2_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index)
|
static void u8g_pb16h2_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t color_index, uint8_t is_or)
|
||||||
{
|
{
|
||||||
register uint8_t mask;
|
register uint8_t mask;
|
||||||
register uint16_t tmp;
|
register uint16_t tmp;
|
||||||
|
@ -84,18 +84,20 @@ static void u8g_pb16h2_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_
|
||||||
tmp = x;
|
tmp = x;
|
||||||
tmp &= 3;
|
tmp &= 3;
|
||||||
tmp <<= 1;
|
tmp <<= 1;
|
||||||
|
if ( is_or == 0 )
|
||||||
|
{
|
||||||
mask = 3;
|
mask = 3;
|
||||||
mask <<= tmp;
|
mask <<= tmp;
|
||||||
mask = ~mask;
|
mask = ~mask;
|
||||||
|
*ptr &= mask;
|
||||||
|
}
|
||||||
color_index &= 3;
|
color_index &= 3;
|
||||||
color_index <<= tmp;
|
color_index <<= tmp;
|
||||||
|
|
||||||
*ptr &= mask;
|
|
||||||
*ptr |= color_index;
|
*ptr |= color_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void u8g_pb16h2_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel)
|
void u8g_pb16h2_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel, uint8_t is_or)
|
||||||
{
|
{
|
||||||
if ( arg_pixel->y < b->p.page_y0 )
|
if ( arg_pixel->y < b->p.page_y0 )
|
||||||
return;
|
return;
|
||||||
|
@ -103,7 +105,7 @@ void u8g_pb16h2_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixe
|
||||||
return;
|
return;
|
||||||
if ( arg_pixel->x >= b->width )
|
if ( arg_pixel->x >= b->width )
|
||||||
return;
|
return;
|
||||||
u8g_pb16h2_set_pixel(b, arg_pixel->x, arg_pixel->y, arg_pixel->color);
|
u8g_pb16h2_set_pixel(b, arg_pixel->x, arg_pixel->y, arg_pixel->color, is_or);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -114,7 +116,7 @@ void u8g_pb16h2_Set8PixelStd(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
{
|
{
|
||||||
if ( pixel & 128 )
|
if ( pixel & 128 )
|
||||||
{
|
{
|
||||||
u8g_pb16h2_SetPixel(b, arg_pixel);
|
u8g_pb16h2_SetPixel(b, arg_pixel, 0);
|
||||||
}
|
}
|
||||||
switch( arg_pixel->dir )
|
switch( arg_pixel->dir )
|
||||||
{
|
{
|
||||||
|
@ -127,6 +129,24 @@ void u8g_pb16h2_Set8PixelStd(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
} while( pixel != 0 );
|
} while( pixel != 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void u8g_pb16h2_Or4PixelStd(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
|
{
|
||||||
|
register uint8_t pixel = arg_pixel->pixel;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
arg_pixel->color = pixel & 0x0c0;
|
||||||
|
arg_pixel->color >>= 6;
|
||||||
|
u8g_pb16h2_SetPixel(b, arg_pixel, 1);
|
||||||
|
switch( arg_pixel->dir )
|
||||||
|
{
|
||||||
|
case 0: arg_pixel->x++; break;
|
||||||
|
case 1: arg_pixel->y++; break;
|
||||||
|
case 2: arg_pixel->x--; break;
|
||||||
|
case 3: arg_pixel->y--; break;
|
||||||
|
}
|
||||||
|
pixel <<= 2;
|
||||||
|
} while( pixel != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t u8g_dev_pb16h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
uint8_t u8g_dev_pb16h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
@ -141,7 +161,13 @@ uint8_t u8g_dev_pb16h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_PIXEL:
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
u8g_pb16h2_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg);
|
u8g_pb16h2_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg, 0);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_4TPIXEL:
|
||||||
|
u8g_pb16h2_Or4PixelStd(pb, (u8g_dev_arg_pixel_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_TPIXEL:
|
||||||
|
u8g_pb16h2_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg, 1);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_INIT:
|
case U8G_DEV_MSG_INIT:
|
||||||
break;
|
break;
|
||||||
|
@ -169,7 +195,7 @@ uint8_t u8g_dev_pb16h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -187,7 +187,7 @@ uint8_t u8g_dev_pb16v1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -159,7 +159,7 @@ uint8_t u8g_dev_pb16v2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -195,7 +195,7 @@ uint8_t u8g_dev_pb32h1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -376,7 +376,7 @@ uint8_t u8g_dev_pb8h1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -181,7 +181,7 @@ uint8_t u8g_dev_pb8h1f_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *ar
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -154,7 +154,7 @@ uint8_t u8g_dev_pb8h2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
u8g_pb8h8.c
|
u8g_pb8h8.c
|
||||||
|
|
||||||
8 bits per pixel, horizontal
|
8 lines per page, horizontal, 8 bits per pixel
|
||||||
|
(22 May 2013: might also support any number of lines --> needs to be checked)
|
||||||
|
|
||||||
Universal 8bit Graphics Library
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
@ -51,21 +52,26 @@ u8g_dev_t name = { dev_fn, &u8g_index_color_8h8_pb, com_fn }
|
||||||
|
|
||||||
#include "u8g.h"
|
#include "u8g.h"
|
||||||
|
|
||||||
|
/*
|
||||||
#define WIDTH_BITS 7
|
#define WIDTH_BITS 7
|
||||||
#define WIDTH (1<<WIDTH_BITS)
|
#define WIDTH (1<<WIDTH_BITS)
|
||||||
#define PAGE_HEIGHT_BITS 3
|
#define PAGE_HEIGHT_BITS 3
|
||||||
#define PAGE_HEIGHT (1<<PAGE_HEIGHT_BITS)
|
#define PAGE_HEIGHT (1<<PAGE_HEIGHT_BITS)
|
||||||
|
*/
|
||||||
|
|
||||||
void u8g_pb8h8_Clear(u8g_pb_t *b)
|
void u8g_pb8h8_Clear(u8g_pb_t *b)
|
||||||
{
|
{
|
||||||
uint8_t *ptr = (uint8_t *)b->buf;
|
uint8_t *ptr = (uint8_t *)b->buf;
|
||||||
uint8_t *end_ptr = ptr;
|
uint8_t *end_ptr = ptr;
|
||||||
uint8_t cnt = b->p.page_height;
|
uint8_t cnt = b->p.page_height;
|
||||||
|
end_ptr += b->width*cnt;
|
||||||
|
/*
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
end_ptr += b->width;
|
end_ptr += b->width;
|
||||||
cnt--;
|
cnt--;
|
||||||
} while( cnt > 0 );
|
} while( cnt > 0 );
|
||||||
|
*/
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*ptr++ = 0;
|
*ptr++ = 0;
|
||||||
|
@ -167,7 +173,7 @@ uint8_t u8g_dev_pb8h8_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -171,7 +171,7 @@ uint8_t u8g_dev_pb8v1_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -140,7 +140,7 @@ uint8_t u8g_dev_pb8v2_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg
|
||||||
case U8G_DEV_MSG_GET_HEIGHT:
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
*((u8g_uint_t *)arg) = pb->p.total_height;
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_pbxh16.c
|
||||||
|
|
||||||
|
x lines per page, horizontal, 16 bits per pixel (hi color modes)
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
struct _u8g_pb_t
|
||||||
|
{
|
||||||
|
u8g_page_t p;
|
||||||
|
u8g_uint_t width;
|
||||||
|
void *buf;
|
||||||
|
};
|
||||||
|
typedef struct _u8g_pb_t u8g_pb_t;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_index_color_xh16_buf[2*WIDTH*PAGE_HEIGHT] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_index_color_xh16_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_index_color_xh16_buf};
|
||||||
|
u8g_dev_t name = { dev_fn, &u8g_index_color_xh16_pb , com_fn }
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define WIDTH_BITS 7
|
||||||
|
#define WIDTH (1<<WIDTH_BITS)
|
||||||
|
#define PAGE_HEIGHT_BITS 3
|
||||||
|
#define PAGE_HEIGHT (1<<PAGE_HEIGHT_BITS)
|
||||||
|
*/
|
||||||
|
|
||||||
|
void u8g_pbxh16_Clear(u8g_pb_t *b)
|
||||||
|
{
|
||||||
|
uint8_t *ptr = (uint8_t *)b->buf;
|
||||||
|
uint8_t *end_ptr = ptr;
|
||||||
|
uint8_t cnt = b->p.page_height;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
end_ptr += b->width*2;
|
||||||
|
cnt--;
|
||||||
|
} while( cnt > 0 );
|
||||||
|
do
|
||||||
|
{
|
||||||
|
*ptr++ = 0;
|
||||||
|
} while( ptr != end_ptr );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_pbxh16_Init(u8g_pb_t *b, void *buf, u8g_uint_t width)
|
||||||
|
{
|
||||||
|
b->buf = buf;
|
||||||
|
b->width = width;
|
||||||
|
u8g_pbxh16_Clear(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void u8g_pbxh16_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t low, uint8_t high)
|
||||||
|
{
|
||||||
|
uint16_t tmp;
|
||||||
|
uint8_t *ptr = b->buf;
|
||||||
|
y -= b->p.page_y0;
|
||||||
|
tmp = y;
|
||||||
|
tmp *= b->width;
|
||||||
|
tmp += x;
|
||||||
|
tmp <<= 1;
|
||||||
|
ptr += tmp;
|
||||||
|
*ptr = low;
|
||||||
|
ptr++;
|
||||||
|
*ptr = high;
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_pbxh16_SetPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel)
|
||||||
|
{
|
||||||
|
if ( arg_pixel->y < b->p.page_y0 )
|
||||||
|
return;
|
||||||
|
if ( arg_pixel->y > b->p.page_y1 )
|
||||||
|
return;
|
||||||
|
if ( arg_pixel->x >= b->width )
|
||||||
|
return;
|
||||||
|
u8g_pbxh16_set_pixel(b, arg_pixel->x, arg_pixel->y, arg_pixel->color, arg_pixel->hi_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_pbxh16_Set8Pixel(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
|
{
|
||||||
|
register uint8_t pixel = arg_pixel->pixel;
|
||||||
|
u8g_uint_t dx = 0;
|
||||||
|
u8g_uint_t dy = 0;
|
||||||
|
|
||||||
|
switch( arg_pixel->dir )
|
||||||
|
{
|
||||||
|
case 0: dx++; break;
|
||||||
|
case 1: dy++; break;
|
||||||
|
case 2: dx--; break;
|
||||||
|
case 3: dy--; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( pixel & 128 )
|
||||||
|
u8g_pbxh16_SetPixel(b, arg_pixel);
|
||||||
|
arg_pixel->x += dx;
|
||||||
|
arg_pixel->y += dy;
|
||||||
|
pixel <<= 1;
|
||||||
|
} while( pixel != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_pbxh16_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_SET_8PIXEL:
|
||||||
|
if ( u8g_pb_Is8PixelVisible(pb, (u8g_dev_arg_pixel_t *)arg) )
|
||||||
|
u8g_pbxh16_Set8Pixel(pb, (u8g_dev_arg_pixel_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
|
u8g_pbxh16_SetPixel(pb, (u8g_dev_arg_pixel_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_pbxh16_Clear(pb);
|
||||||
|
u8g_page_First(&(pb->p));
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
if ( u8g_page_Next(&(pb->p)) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_pbxh16_Clear(pb);
|
||||||
|
break;
|
||||||
|
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
|
||||||
|
case U8G_DEV_MSG_IS_BBX_INTERSECTION:
|
||||||
|
return u8g_pb_IsIntersection(pb, (u8g_dev_arg_bbx_t *)arg);
|
||||||
|
#endif
|
||||||
|
case U8G_DEV_MSG_GET_PAGE_BOX:
|
||||||
|
u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_WIDTH:
|
||||||
|
*((u8g_uint_t *)arg) = pb->width;
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_HICOLOR;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,287 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_pbxh24.c
|
||||||
|
|
||||||
|
x lines per page, horizontal, 24 bits per pixel (true color modes)
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
struct _u8g_pb_t
|
||||||
|
{
|
||||||
|
u8g_page_t p;
|
||||||
|
u8g_uint_t width;
|
||||||
|
void *buf;
|
||||||
|
};
|
||||||
|
typedef struct _u8g_pb_t u8g_pb_t;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_index_color_xh16_buf[2*WIDTH*PAGE_HEIGHT] U8G_NOCOMMON ;
|
||||||
|
u8g_pb_t u8g_index_color_xh16_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_index_color_xh16_buf};
|
||||||
|
u8g_dev_t name = { dev_fn, &u8g_index_color_xh16_pb , com_fn }
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define WIDTH_BITS 7
|
||||||
|
#define WIDTH (1<<WIDTH_BITS)
|
||||||
|
#define PAGE_HEIGHT_BITS 3
|
||||||
|
#define PAGE_HEIGHT (1<<PAGE_HEIGHT_BITS)
|
||||||
|
*/
|
||||||
|
|
||||||
|
void u8g_pbxh24_Clear(u8g_pb_t *b)
|
||||||
|
{
|
||||||
|
uint8_t *ptr = (uint8_t *)b->buf;
|
||||||
|
uint8_t *end_ptr = ptr;
|
||||||
|
uint8_t cnt = b->p.page_height;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
end_ptr += b->width*3;
|
||||||
|
cnt--;
|
||||||
|
} while( cnt > 0 );
|
||||||
|
do
|
||||||
|
{
|
||||||
|
*ptr++ = 0;
|
||||||
|
} while( ptr != end_ptr );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_pbxh24_Init(u8g_pb_t *b, void *buf, u8g_uint_t width)
|
||||||
|
{
|
||||||
|
b->buf = buf;
|
||||||
|
b->width = width;
|
||||||
|
u8g_pbxh24_Clear(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef OBSOLETE
|
||||||
|
static void u8g_pbxh24_set_pixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
uint16_t tmp;
|
||||||
|
uint8_t *ptr = b->buf;
|
||||||
|
y -= b->p.page_y0;
|
||||||
|
tmp = y;
|
||||||
|
tmp *= b->width;
|
||||||
|
tmp += x;
|
||||||
|
tmp *= 3;
|
||||||
|
ptr += tmp;
|
||||||
|
*ptr = r;
|
||||||
|
ptr++;
|
||||||
|
*ptr = g;
|
||||||
|
ptr++;
|
||||||
|
*ptr = b;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
intensity
|
||||||
|
0..3 intensity value
|
||||||
|
4 replace color
|
||||||
|
*/
|
||||||
|
static void u8g_pbxh24_set_tpixel(u8g_pb_t *b, u8g_uint_t x, u8g_uint_t y, uint8_t red, uint8_t green, uint8_t blue, uint8_t intensity)
|
||||||
|
{
|
||||||
|
uint16_t tmp;
|
||||||
|
uint8_t *ptr = b->buf;
|
||||||
|
|
||||||
|
if ( intensity == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
y -= b->p.page_y0;
|
||||||
|
tmp = y;
|
||||||
|
tmp *= b->width;
|
||||||
|
tmp += x;
|
||||||
|
tmp *= 3;
|
||||||
|
ptr += tmp;
|
||||||
|
|
||||||
|
if ( intensity == 4 )
|
||||||
|
{
|
||||||
|
*ptr = red;
|
||||||
|
ptr++;
|
||||||
|
*ptr = green;
|
||||||
|
ptr++;
|
||||||
|
*ptr = blue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( intensity == 2 )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
red = red/4 + red/2;
|
||||||
|
green = green/4 + green/2;
|
||||||
|
blue = blue/4 + blue/2;
|
||||||
|
*/
|
||||||
|
red >>= 1;
|
||||||
|
green >>= 1;
|
||||||
|
blue >>= 1;
|
||||||
|
}
|
||||||
|
else if ( intensity == 1 )
|
||||||
|
{
|
||||||
|
red >>= 2;
|
||||||
|
green >>= 2;
|
||||||
|
blue >>= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( *ptr >= 255-red ) *ptr = 255;
|
||||||
|
else *ptr += red;
|
||||||
|
ptr++;
|
||||||
|
|
||||||
|
if ( *ptr >= 255-green ) *ptr = 255;
|
||||||
|
else *ptr += green;
|
||||||
|
ptr++;
|
||||||
|
|
||||||
|
if ( *ptr >= 255-blue ) *ptr = 255;
|
||||||
|
else *ptr += blue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if ( *ptr < red ) *ptr = red;
|
||||||
|
ptr++;
|
||||||
|
if ( *ptr < green ) *ptr = green;
|
||||||
|
ptr++;
|
||||||
|
if ( *ptr < blue ) *ptr = blue;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_pbxh24_SetTPixel(u8g_pb_t *b, const u8g_dev_arg_pixel_t * const arg_pixel, uint8_t intensity)
|
||||||
|
{
|
||||||
|
if ( arg_pixel->y < b->p.page_y0 )
|
||||||
|
return;
|
||||||
|
if ( arg_pixel->y > b->p.page_y1 )
|
||||||
|
return;
|
||||||
|
if ( arg_pixel->x >= b->width )
|
||||||
|
return;
|
||||||
|
u8g_pbxh24_set_tpixel(b, arg_pixel->x, arg_pixel->y, arg_pixel->color, arg_pixel->hi_color, arg_pixel->blue, intensity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void u8g_pbxh24_Set8Pixel(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
|
{
|
||||||
|
register uint8_t pixel = arg_pixel->pixel;
|
||||||
|
u8g_uint_t dx = 0;
|
||||||
|
u8g_uint_t dy = 0;
|
||||||
|
|
||||||
|
switch( arg_pixel->dir )
|
||||||
|
{
|
||||||
|
case 0: dx++; break;
|
||||||
|
case 1: dy++; break;
|
||||||
|
case 2: dx--; break;
|
||||||
|
case 3: dy--; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if ( pixel & 128 )
|
||||||
|
u8g_pbxh24_SetTPixel(b, arg_pixel, 4);
|
||||||
|
arg_pixel->x += dx;
|
||||||
|
arg_pixel->y += dy;
|
||||||
|
pixel <<= 1;
|
||||||
|
} while( pixel != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_pbxh24_Set4TPixel(u8g_pb_t *b, u8g_dev_arg_pixel_t *arg_pixel)
|
||||||
|
{
|
||||||
|
register uint8_t pixel = arg_pixel->pixel;
|
||||||
|
u8g_uint_t dx = 0;
|
||||||
|
u8g_uint_t dy = 0;
|
||||||
|
|
||||||
|
switch( arg_pixel->dir )
|
||||||
|
{
|
||||||
|
case 0: dx++; break;
|
||||||
|
case 1: dy++; break;
|
||||||
|
case 2: dx--; break;
|
||||||
|
case 3: dy--; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
u8g_pbxh24_SetTPixel(b, arg_pixel, pixel >> 6);
|
||||||
|
arg_pixel->x += dx;
|
||||||
|
arg_pixel->y += dy;
|
||||||
|
pixel <<= 2;
|
||||||
|
} while( pixel != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t u8g_dev_pbxh24_base_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
case U8G_DEV_MSG_SET_8PIXEL:
|
||||||
|
if ( u8g_pb_Is8PixelVisible(pb, (u8g_dev_arg_pixel_t *)arg) )
|
||||||
|
u8g_pbxh24_Set8Pixel(pb, (u8g_dev_arg_pixel_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
|
u8g_pbxh24_SetTPixel(pb, (u8g_dev_arg_pixel_t *)arg, 4);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_4TPIXEL:
|
||||||
|
u8g_pbxh24_Set4TPixel(pb, (u8g_dev_arg_pixel_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_TPIXEL:
|
||||||
|
u8g_pbxh24_SetTPixel(pb, (u8g_dev_arg_pixel_t *)arg, ((u8g_dev_arg_pixel_t *)arg)->pixel&3);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_INIT:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_STOP:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
|
u8g_pbxh24_Clear(pb);
|
||||||
|
u8g_page_First(&(pb->p));
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
|
if ( u8g_page_Next(&(pb->p)) == 0 )
|
||||||
|
return 0;
|
||||||
|
u8g_pbxh24_Clear(pb);
|
||||||
|
break;
|
||||||
|
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
|
||||||
|
case U8G_DEV_MSG_IS_BBX_INTERSECTION:
|
||||||
|
return u8g_pb_IsIntersection(pb, (u8g_dev_arg_bbx_t *)arg);
|
||||||
|
#endif
|
||||||
|
case U8G_DEV_MSG_GET_PAGE_BOX:
|
||||||
|
u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_WIDTH:
|
||||||
|
*((u8g_uint_t *)arg) = pb->width;
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_HEIGHT:
|
||||||
|
*((u8g_uint_t *)arg) = pb->p.total_height;
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
|
break;
|
||||||
|
case U8G_DEV_MSG_GET_MODE:
|
||||||
|
return U8G_MODE_TRUECOLOR;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,334 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
u8g_polygon.c
|
||||||
|
|
||||||
|
Implementation of a polygon draw algorithm for "convex" polygons.
|
||||||
|
|
||||||
|
Universal 8bit Graphics Library
|
||||||
|
|
||||||
|
Copyright (c) 2013, olikraus@gmail.com
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||||
|
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||||
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
See also:
|
||||||
|
http://www.angelfire.com/linux/myp/ConvexPolRas/ConvexPolRas.html
|
||||||
|
Computer Graphics, Principles and Practice, Foley, van Dam, Feiner, Hughes (pp 92)
|
||||||
|
Michael Abrash's Graphics Programming Black Book, Special Edition (Chapter 38 and 39)
|
||||||
|
|
||||||
|
Optimized for embedded systems
|
||||||
|
- static memory usage only
|
||||||
|
- consistent data types
|
||||||
|
- low flash ROM consumption
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "u8g.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*===========================================*/
|
||||||
|
/* procedures, which should not be inlined (save as much flash ROM as possible */
|
||||||
|
|
||||||
|
static uint8_t pge_Next(struct pg_edge_struct *pge) PG_NOINLINE;
|
||||||
|
static uint8_t pg_inc(pg_struct *pg, uint8_t i) PG_NOINLINE;
|
||||||
|
static uint8_t pg_dec(pg_struct *pg, uint8_t i) PG_NOINLINE;
|
||||||
|
static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx) PG_NOINLINE;
|
||||||
|
static void pg_line_init(pg_struct * const pg, uint8_t pge_index) PG_NOINLINE;
|
||||||
|
|
||||||
|
/*===========================================*/
|
||||||
|
/* line draw algorithm */
|
||||||
|
|
||||||
|
static uint8_t pge_Next(struct pg_edge_struct *pge)
|
||||||
|
{
|
||||||
|
if ( pge->current_y >= pge->max_y )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pge->current_x += pge->current_x_offset;
|
||||||
|
pge->error += pge->error_offset;
|
||||||
|
if ( pge->error > 0 )
|
||||||
|
{
|
||||||
|
pge->current_x += pge->x_direction;
|
||||||
|
pge->error -= pge->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
pge->current_y++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* assumes y2 > y1 */
|
||||||
|
static void pge_Init(struct pg_edge_struct *pge, pg_word_t x1, pg_word_t y1, pg_word_t x2, pg_word_t y2)
|
||||||
|
{
|
||||||
|
pg_word_t dx = x2 - x1;
|
||||||
|
pg_word_t width;
|
||||||
|
|
||||||
|
pge->height = y2 - y1;
|
||||||
|
pge->max_y = y2;
|
||||||
|
pge->current_y = y1;
|
||||||
|
pge->current_x = x1;
|
||||||
|
|
||||||
|
if ( dx >= 0 )
|
||||||
|
{
|
||||||
|
pge->x_direction = 1;
|
||||||
|
width = dx;
|
||||||
|
pge->error = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pge->x_direction = -1;
|
||||||
|
width = -dx;
|
||||||
|
pge->error = 1 - pge->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
pge->current_x_offset = dx / pge->height;
|
||||||
|
pge->error_offset = width % pge->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*===========================================*/
|
||||||
|
/* convex polygon algorithm */
|
||||||
|
|
||||||
|
static uint8_t pg_inc(pg_struct *pg, uint8_t i)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
if ( i >= pg->cnt )
|
||||||
|
i = 0;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t pg_dec(pg_struct *pg, uint8_t i)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
if ( i >= pg->cnt )
|
||||||
|
i = pg->cnt-1;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx)
|
||||||
|
{
|
||||||
|
uint8_t i = pg->pge[pge_idx].curr_idx;
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
i = pg->pge[pge_idx].next_idx_fn(pg, i);
|
||||||
|
if ( pg->list[i].y != min_y )
|
||||||
|
break;
|
||||||
|
pg->pge[pge_idx].curr_idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t pg_prepare(pg_struct *pg)
|
||||||
|
{
|
||||||
|
pg_word_t max_y;
|
||||||
|
pg_word_t min_y;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
/* setup the next index procedures */
|
||||||
|
pg->pge[PG_RIGHT].next_idx_fn = pg_inc;
|
||||||
|
pg->pge[PG_LEFT].next_idx_fn = pg_dec;
|
||||||
|
|
||||||
|
/* search for highest and lowest point */
|
||||||
|
max_y = pg->list[0].y;
|
||||||
|
min_y = pg->list[0].y;
|
||||||
|
pg->pge[PG_LEFT].curr_idx = 0;
|
||||||
|
for( i = 1; i < pg->cnt; i++ )
|
||||||
|
{
|
||||||
|
if ( max_y < pg->list[i].y )
|
||||||
|
{
|
||||||
|
max_y = pg->list[i].y;
|
||||||
|
}
|
||||||
|
if ( min_y > pg->list[i].y )
|
||||||
|
{
|
||||||
|
pg->pge[PG_LEFT].curr_idx = i;
|
||||||
|
min_y = pg->list[i].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* calculate total number of scan lines */
|
||||||
|
pg->total_scan_line_cnt = max_y;
|
||||||
|
pg->total_scan_line_cnt -= min_y;
|
||||||
|
|
||||||
|
/* exit if polygon height is zero */
|
||||||
|
if ( pg->total_scan_line_cnt == 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* if the minimum y side is flat, try to find the lowest and highest x points */
|
||||||
|
pg->pge[PG_RIGHT].curr_idx = pg->pge[PG_LEFT].curr_idx;
|
||||||
|
pg_expand_min_y(pg, min_y, PG_RIGHT);
|
||||||
|
pg_expand_min_y(pg, min_y, PG_LEFT);
|
||||||
|
|
||||||
|
/* check if the min side is really flat (depends on the x values) */
|
||||||
|
pg->is_min_y_not_flat = 1;
|
||||||
|
if ( pg->list[pg->pge[PG_LEFT].curr_idx].x != pg->list[pg->pge[PG_RIGHT].curr_idx].x )
|
||||||
|
{
|
||||||
|
pg->is_min_y_not_flat = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pg->total_scan_line_cnt--;
|
||||||
|
if ( pg->total_scan_line_cnt == 0 )
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pg_hline(pg_struct *pg, u8g_t *u8g)
|
||||||
|
{
|
||||||
|
pg_word_t x1, x2, y;
|
||||||
|
x1 = pg->pge[PG_LEFT].current_x;
|
||||||
|
x2 = pg->pge[PG_RIGHT].current_x;
|
||||||
|
y = pg->pge[PG_RIGHT].current_y;
|
||||||
|
|
||||||
|
if ( y < 0 )
|
||||||
|
return;
|
||||||
|
if ( y >= u8g_GetHeight(u8g) )
|
||||||
|
return;
|
||||||
|
if ( x1 < x2 )
|
||||||
|
{
|
||||||
|
if ( x2 < 0 )
|
||||||
|
return;
|
||||||
|
if ( x1 >= u8g_GetWidth(u8g) )
|
||||||
|
return;
|
||||||
|
if ( x1 < 0 )
|
||||||
|
x1 = 0;
|
||||||
|
if ( x2 >= u8g_GetWidth(u8g) )
|
||||||
|
x2 = u8g_GetWidth(u8g);
|
||||||
|
u8g_DrawHLine(u8g, x1, y, x2 - x1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( x1 < 0 )
|
||||||
|
return;
|
||||||
|
if ( x2 >= u8g_GetWidth(u8g) )
|
||||||
|
return;
|
||||||
|
if ( x2 < 0 )
|
||||||
|
x1 = 0;
|
||||||
|
if ( x1 >= u8g_GetWidth(u8g) )
|
||||||
|
x1 = u8g_GetWidth(u8g);
|
||||||
|
u8g_DrawHLine(u8g, x2, y, x1 - x2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pg_line_init(pg_struct * pg, uint8_t pge_index)
|
||||||
|
{
|
||||||
|
struct pg_edge_struct *pge = pg->pge+pge_index;
|
||||||
|
uint8_t idx;
|
||||||
|
pg_word_t x1;
|
||||||
|
pg_word_t y1;
|
||||||
|
pg_word_t x2;
|
||||||
|
pg_word_t y2;
|
||||||
|
|
||||||
|
idx = pge->curr_idx;
|
||||||
|
y1 = pg->list[idx].y;
|
||||||
|
x1 = pg->list[idx].x;
|
||||||
|
idx = pge->next_idx_fn(pg, idx);
|
||||||
|
y2 = pg->list[idx].y;
|
||||||
|
x2 = pg->list[idx].x;
|
||||||
|
pge->curr_idx = idx;
|
||||||
|
|
||||||
|
pge_Init(pge, x1, y1, x2, y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pg_exec(pg_struct *pg, u8g_t *u8g)
|
||||||
|
{
|
||||||
|
pg_word_t i = pg->total_scan_line_cnt;
|
||||||
|
|
||||||
|
/* first line is skipped if the min y line is not flat */
|
||||||
|
pg_line_init(pg, PG_LEFT);
|
||||||
|
pg_line_init(pg, PG_RIGHT);
|
||||||
|
|
||||||
|
if ( pg->is_min_y_not_flat != 0 )
|
||||||
|
{
|
||||||
|
pge_Next(&(pg->pge[PG_LEFT]));
|
||||||
|
pge_Next(&(pg->pge[PG_RIGHT]));
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
pg_hline(pg, u8g);
|
||||||
|
while ( pge_Next(&(pg->pge[PG_LEFT])) == 0 )
|
||||||
|
{
|
||||||
|
pg_line_init(pg, PG_LEFT);
|
||||||
|
}
|
||||||
|
while ( pge_Next(&(pg->pge[PG_RIGHT])) == 0 )
|
||||||
|
{
|
||||||
|
pg_line_init(pg, PG_RIGHT);
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
} while( i > 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*===========================================*/
|
||||||
|
/* API procedures */
|
||||||
|
|
||||||
|
void pg_ClearPolygonXY(pg_struct *pg)
|
||||||
|
{
|
||||||
|
pg->cnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pg_AddPolygonXY(pg_struct *pg, u8g_t *u8g, int16_t x, int16_t y)
|
||||||
|
{
|
||||||
|
if ( pg->cnt < PG_MAX_POINTS )
|
||||||
|
{
|
||||||
|
pg->list[pg->cnt].x = x;
|
||||||
|
pg->list[pg->cnt].y = y;
|
||||||
|
pg->cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pg_DrawPolygon(pg_struct *pg, u8g_t *u8g)
|
||||||
|
{
|
||||||
|
if ( pg_prepare(pg) == 0 )
|
||||||
|
return;
|
||||||
|
pg_exec(pg, u8g);
|
||||||
|
}
|
||||||
|
|
||||||
|
pg_struct u8g_pg;
|
||||||
|
|
||||||
|
void u8g_ClearPolygonXY(void)
|
||||||
|
{
|
||||||
|
pg_ClearPolygonXY(&u8g_pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_AddPolygonXY(u8g_t *u8g, int16_t x, int16_t y)
|
||||||
|
{
|
||||||
|
pg_AddPolygonXY(&u8g_pg, u8g, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_DrawPolygon(u8g_t *u8g)
|
||||||
|
{
|
||||||
|
pg_DrawPolygon(&u8g_pg, u8g);
|
||||||
|
}
|
||||||
|
|
||||||
|
void u8g_DrawTriangle(u8g_t *u8g, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
|
||||||
|
{
|
||||||
|
u8g_ClearPolygonXY();
|
||||||
|
u8g_AddPolygonXY(u8g, x0, y0);
|
||||||
|
u8g_AddPolygonXY(u8g, x1, y1);
|
||||||
|
u8g_AddPolygonXY(u8g, x2, y2);
|
||||||
|
u8g_DrawPolygon(u8g);
|
||||||
|
}
|
||||||
|
|
|
@ -40,7 +40,12 @@ uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
|
||||||
|
|
||||||
u8g_dev_t u8g_dev_rot = { u8g_dev_rot90_fn, NULL, NULL };
|
uint8_t u8g_dev_rot_dummy_fn(void *u8g, void *dev, uint8_t msg, void *arg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8g_dev_t u8g_dev_rot = { u8g_dev_rot_dummy_fn, NULL, NULL };
|
||||||
|
|
||||||
|
|
||||||
void u8g_UndoRotation(u8g_t *u8g)
|
void u8g_UndoRotation(u8g_t *u8g)
|
||||||
|
@ -95,7 +100,7 @@ uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
case U8G_DEV_MSG_PAGE_FIRST:
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
case U8G_DEV_MSG_PAGE_NEXT:
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
*/
|
*/
|
||||||
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
|
@ -151,6 +156,7 @@ uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
*((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
|
*((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_PIXEL:
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
y = ((u8g_dev_arg_pixel_t *)arg)->x;
|
y = ((u8g_dev_arg_pixel_t *)arg)->x;
|
||||||
|
@ -163,6 +169,7 @@ uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_8PIXEL:
|
case U8G_DEV_MSG_SET_8PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_4TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
//uint16_t x,y;
|
//uint16_t x,y;
|
||||||
|
@ -192,7 +199,7 @@ uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
case U8G_DEV_MSG_PAGE_FIRST:
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
case U8G_DEV_MSG_PAGE_NEXT:
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
*/
|
*/
|
||||||
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
|
@ -248,6 +255,7 @@ uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
*((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g, rotation_chain);
|
*((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g, rotation_chain);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_PIXEL:
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
|
|
||||||
|
@ -265,6 +273,7 @@ uint8_t u8g_dev_rot180_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_8PIXEL:
|
case U8G_DEV_MSG_SET_8PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_4TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
|
|
||||||
|
@ -298,7 +307,7 @@ uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
case U8G_DEV_MSG_STOP:
|
case U8G_DEV_MSG_STOP:
|
||||||
case U8G_DEV_MSG_PAGE_FIRST:
|
case U8G_DEV_MSG_PAGE_FIRST:
|
||||||
case U8G_DEV_MSG_PAGE_NEXT:
|
case U8G_DEV_MSG_PAGE_NEXT:
|
||||||
case U8G_DEV_MSG_SET_COLOR_INDEX:
|
case U8G_DEV_MSG_SET_COLOR_ENTRY:
|
||||||
case U8G_DEV_MSG_SET_XY_CB:
|
case U8G_DEV_MSG_SET_XY_CB:
|
||||||
*/
|
*/
|
||||||
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
return u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
|
@ -353,6 +362,7 @@ uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
*((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
|
*((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_PIXEL:
|
case U8G_DEV_MSG_SET_PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
x = ((u8g_dev_arg_pixel_t *)arg)->y;
|
x = ((u8g_dev_arg_pixel_t *)arg)->y;
|
||||||
|
@ -372,6 +382,7 @@ uint8_t u8g_dev_rot270_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
|
||||||
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
u8g_call_dev_fn(u8g, rotation_chain, msg, arg);
|
||||||
break;
|
break;
|
||||||
case U8G_DEV_MSG_SET_8PIXEL:
|
case U8G_DEV_MSG_SET_8PIXEL:
|
||||||
|
case U8G_DEV_MSG_SET_4TPIXEL:
|
||||||
{
|
{
|
||||||
u8g_uint_t x, y;
|
u8g_uint_t x, y;
|
||||||
x = ((u8g_dev_arg_pixel_t *)arg)->y;
|
x = ((u8g_dev_arg_pixel_t *)arg)->y;
|
||||||
|
|
|
@ -63,6 +63,15 @@ void u8g_SetHardwareBackup(u8g_t *u8g, u8g_state_cb backup_cb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*===============================================================*/
|
||||||
|
/* register variable for restoring interrupt state */
|
||||||
|
|
||||||
|
#if defined(__AVR__)
|
||||||
|
uint8_t global_SREG_backup;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*===============================================================*/
|
/*===============================================================*/
|
||||||
/* AVR */
|
/* AVR */
|
||||||
|
|
||||||
|
@ -82,7 +91,7 @@ void u8g_SetHardwareBackup(u8g_t *u8g, u8g_state_cb backup_cb)
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
static uint8_t u8g_state_avr_spi_memory[2];
|
static uint8_t u8g_state_avr_spi_memory[2];
|
||||||
|
|
||||||
void u8g_backup_avr_spi(uint8_t msg)
|
void u8g_backup_spi(uint8_t msg)
|
||||||
{
|
{
|
||||||
if ( U8G_STATE_MSG_IS_BACKUP(msg) )
|
if ( U8G_STATE_MSG_IS_BACKUP(msg) )
|
||||||
{
|
{
|
||||||
|
@ -98,5 +107,52 @@ void u8g_backup_avr_spi(uint8_t msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined (U8G_RASPBERRY_PI)
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void u8g_backup_spi(uint8_t msg) {
|
||||||
|
printf("u8g_backup_spi %d\r\n",msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(ARDUINO) && defined(__SAM3X8E__) // Arduino Due, maybe we should better check for __SAM3X8E__
|
||||||
|
|
||||||
|
#include "sam.h"
|
||||||
|
|
||||||
|
struct sam_backup_struct
|
||||||
|
{
|
||||||
|
uint32_t mr;
|
||||||
|
uint32_t sr;
|
||||||
|
uint32_t csr[4];
|
||||||
|
} sam_backup[2];
|
||||||
|
|
||||||
|
void u8g_backup_spi(uint8_t msg)
|
||||||
|
{
|
||||||
|
uint8_t idx = U8G_STATE_MSG_GET_IDX(msg);
|
||||||
|
if ( U8G_STATE_MSG_IS_BACKUP(msg) )
|
||||||
|
{
|
||||||
|
sam_backup[idx].mr = SPI0->SPI_MR;
|
||||||
|
sam_backup[idx].sr = SPI0->SPI_SR;
|
||||||
|
sam_backup[idx].csr[0] = SPI0->SPI_CSR[0];
|
||||||
|
sam_backup[idx].csr[1] = SPI0->SPI_CSR[1];
|
||||||
|
sam_backup[idx].csr[2] = SPI0->SPI_CSR[2];
|
||||||
|
sam_backup[idx].csr[3] = SPI0->SPI_CSR[3];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SPI0->SPI_MR = sam_backup[idx].mr;
|
||||||
|
SPI0->SPI_CSR[0] = sam_backup[idx].csr[0];
|
||||||
|
SPI0->SPI_CSR[1] = sam_backup[idx].csr[1];
|
||||||
|
SPI0->SPI_CSR[2] = sam_backup[idx].csr[2];
|
||||||
|
SPI0->SPI_CSR[3] = sam_backup[idx].csr[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void u8g_backup_spi(uint8_t msg)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Reference in a new issue