From 94ddea4cfac60df45f48db3b25b0d9c62c066d94 Mon Sep 17 00:00:00 2001 From: Stanley Huang Date: Fri, 29 Nov 2013 23:13:15 +1100 Subject: update MultiLCD library --- libraries/MultiLCD/ILI9325D.cpp | 27 +- libraries/MultiLCD/ILI9341.cpp | 590 ++++++++++++++++++++++++++++++++++++++ libraries/MultiLCD/ILI9341.h | 161 +++++++++++ libraries/MultiLCD/MultiLCD.cpp | 196 ++----------- libraries/MultiLCD/MultiLCD.h | 105 ++++--- libraries/MultiLCD/SSD1306.cpp | 8 +- libraries/MultiLCD/SSD1306.h | 9 +- libraries/MultiLCD/ZtLib.cpp | 607 ---------------------------------------- libraries/MultiLCD/ZtLib.h | 128 --------- 9 files changed, 853 insertions(+), 978 deletions(-) create mode 100644 libraries/MultiLCD/ILI9341.cpp create mode 100644 libraries/MultiLCD/ILI9341.h delete mode 100644 libraries/MultiLCD/ZtLib.cpp delete mode 100644 libraries/MultiLCD/ZtLib.h (limited to 'libraries/MultiLCD') diff --git a/libraries/MultiLCD/ILI9325D.cpp b/libraries/MultiLCD/ILI9325D.cpp index 6ffd27a..f977d94 100644 --- a/libraries/MultiLCD/ILI9325D.cpp +++ b/libraries/MultiLCD/ILI9325D.cpp @@ -227,7 +227,7 @@ void LCD_ILI9325D::begin() clear(); } -void LCD_ILI9325D::SetXY(uint16_t x0,uint16_t x1,uint16_t y1,uint16_t y0) +void LCD_ILI9325D::setXY(uint16_t x0,uint16_t x1,uint16_t y1,uint16_t y0) { y1 = 319 - y1; y0 = 319 - y0; @@ -263,7 +263,7 @@ void LCD_ILI9325D::clearPixels(uint16_t pixels) void LCD_ILI9325D::clear(uint16_t x, uint16_t y, uint16_t width, uint16_t height) { unsigned long count = (unsigned long)width * height; - SetXY(y, y + height - 1, x, x + width - 1); + setXY(y, y + height - 1, x, x + width - 1); digitalWrite(RS,HIGH);//LCD_RS=0; digitalWrite(CS,LOW);//LCD_CS =0; @@ -288,17 +288,14 @@ size_t LCD_ILI9325D::write(uint8_t c) m_x += (m_font + 1) << 3; return 0; } else if (c == '\r') { - SetXY(m_x, m_x + 7, m_y, 319); - uint16_t count = (320 - m_y) * 8; - for (uint16_t i=0; i < count; i++) { - WriteData(0, 0); - } + setXY(m_x, m_x + 7, m_y, 319); + clearPixels((320 - m_y) * 8); m_y = 0; return 0; } if (m_font == FONT_SIZE_SMALL) { - SetXY(m_x, m_x + 7, m_y, m_y + 4); + setXY(m_x, m_x + 7, m_y, m_y + 4); m_y += 6; if (m_y >= 320) { m_x += (m_font + 1) << 3; @@ -321,7 +318,7 @@ size_t LCD_ILI9325D::write(uint8_t c) clearPixels(5 * 8); } } else { - SetXY(m_x, m_x + 15, m_y, m_y + 7); + setXY(m_x, m_x + 15, m_y, m_y + 7); m_y += 9; if (m_y >= 320) { m_x += (m_font + 1) << 3; @@ -352,7 +349,7 @@ size_t LCD_ILI9325D::write(uint8_t c) void LCD_ILI9325D::writeDigit(byte n) { if (m_font == FONT_SIZE_SMALL) { - SetXY(m_x, m_x + 7, m_y, m_y + 7); + setXY(m_x, m_x + 7, m_y, m_y + 7); m_y += 8; if (n <= 9) { byte pgm_buffer[8]; @@ -371,7 +368,7 @@ void LCD_ILI9325D::writeDigit(byte n) } else if (m_font == FONT_SIZE_MEDIUM) { write(n <= 9 ? ('0' + n) : ' '); } else if (m_font == FONT_SIZE_LARGE) { - SetXY(m_x, m_x + 15, m_y, m_y + 15); + setXY(m_x, m_x + 15, m_y, m_y + 15); m_y += 16; if (n <= 9) { byte pgm_buffer[32]; @@ -390,7 +387,7 @@ void LCD_ILI9325D::writeDigit(byte n) clearPixels(16 * 16); } } else if (m_font == FONT_SIZE_XLARGE) { - SetXY(m_x, m_x + 23, m_y, m_y + 15); + setXY(m_x, m_x + 23, m_y, m_y + 15); m_y += 18; if (n <= 9) { byte pgm_buffer[48]; @@ -418,7 +415,7 @@ void LCD_ILI9325D::writeDigit(byte n) void LCD_ILI9325D::draw(const PROGMEM byte* buffer, uint16_t x, uint16_t y, uint16_t width, uint16_t height) { byte rows = height >> 3; - SetXY(y, y + height - 1, x, x + width - 1); + setXY(y, y + height - 1, x, x + width - 1); uint16_t i = width - 1; do { for (uint8_t h = 0; h < rows; h++) { @@ -434,7 +431,7 @@ void LCD_ILI9325D::draw2x(const PROGMEM byte* buffer, uint16_t x, uint16_t y, by { char buf[240]; uint16_t pixels = (uint16_t)width * height; - SetXY(y, y + height * 2 - 1, x, x + width * 2- 1); + setXY(y, y + height * 2 - 1, x, x + width * 2- 1); uint16_t i = width - 1; do { memcpy_P(buf, buffer + (uint16_t)i * height * 2, height * 2); @@ -451,7 +448,7 @@ void LCD_ILI9325D::draw2x(const PROGMEM byte* buffer, uint16_t x, uint16_t y, by void LCD_ILI9325D::draw4bpp(const PROGMEM byte* buffer, uint16_t x, uint16_t y, uint16_t width, uint16_t height) { - SetXY(y, y + height - 1, x, x + width - 1); + setXY(y, y + height - 1, x, x + width - 1); uint16_t i = (uint16_t)width * height / 2 - 1; do { byte d = pgm_read_byte_far(buffer + i); diff --git a/libraries/MultiLCD/ILI9341.cpp b/libraries/MultiLCD/ILI9341.cpp new file mode 100644 index 0000000..61bf7f9 --- /dev/null +++ b/libraries/MultiLCD/ILI9341.cpp @@ -0,0 +1,590 @@ +#include +#include +#include "MultiLCD.h" + +/* Pins +D4 : RESET +D5 : CS +D6 : D/C +D7 : LED +D11 : MOSI +D12 : MISO +D13 : SCK +*/ + +#define PIN_RESET 4 +#define PIN_CS 5 +#define PIN_DC 6 +#define PIN_LED 7 + +//Basic Colors +#define RED 0xf800 +#define GREEN 0x07e0 +#define BLUE 0x001f +#define BLACK 0x0000 +#define YELLOW 0xffe0 +#define WHITE 0xffff + +//Other Colors +#define CYAN 0x07ff +#define BRIGHT_RED 0xf810 +#define GRAY1 0x8410 +#define GRAY2 0x4208 + +//TFT resolution 240*320 +#define MIN_X 0 +#define MIN_Y 0 +#define MAX_X 239 +#define MAX_Y 319 + +#define TFT_CS_LOW digitalWrite(PIN_CS, LOW) +#define TFT_CS_HIGH digitalWrite(PIN_CS, HIGH) +#define TFT_DC_LOW digitalWrite(PIN_DC, LOW) +#define TFT_DC_HIGH digitalWrite(PIN_DC, HIGH) +#define TFT_RST_OFF digitalWrite(PIN_RESET, HIGH) +#define TFT_RST_ON digitalWrite(PIN_RESET, LOW) + + +#define YP A2 // must be an analog pin, use "An" notation! +#define XM A1 // must be an analog pin, use "An" notation! +#define YM 14 // can be a digital pin, this is A0 +#define XP 17 // can be a digital pin, this is A3 + +#define TS_MINX 116*2 +#define TS_MAXX 890*2 +#define TS_MINY 83*2 +#define TS_MAXY 913*2 + +void LCD_ILI9341::sendCMD(uint8_t index) +{ + TFT_DC_LOW; + TFT_CS_LOW; + SPI.transfer(index); + TFT_CS_HIGH; +} + +void LCD_ILI9341::WRITE_DATA(uint8_t data) +{ + TFT_DC_HIGH; + TFT_CS_LOW; + SPI.transfer(data); + TFT_CS_HIGH; +} + +void LCD_ILI9341::sendData(uint16_t data) +{ + uint8_t data1 = data>>8; + uint8_t data2 = data&0xff; + TFT_DC_HIGH; + TFT_CS_LOW; + SPI.transfer(data1); + SPI.transfer(data2); + TFT_CS_HIGH; +} + +void LCD_ILI9341::WRITE_Package(uint16_t *data, uint8_t howmany) +{ + uint16_t data1 = 0; + uint8_t data2 = 0; + + TFT_DC_HIGH; + TFT_CS_LOW; + uint8_t count=0; + for(count=0;count>8; + data2 = data[count]&0xff; + SPI.transfer(data1); + SPI.transfer(data2); + } + TFT_CS_HIGH; +} + +uint8_t LCD_ILI9341::Read_Register(uint8_t Addr, uint8_t xParameter) +{ + uint8_t data=0; + sendCMD(0xd9); /* ext command */ + WRITE_DATA(0x10+xParameter); /* 0x11 is the first Parameter */ + TFT_DC_LOW; + TFT_CS_LOW; + SPI.transfer(Addr); + TFT_DC_HIGH; + data = SPI.transfer(0); + TFT_CS_HIGH; + return data; +} + +void LCD_ILI9341::begin (void) +{ + pinMode(PIN_CS, OUTPUT); + pinMode(PIN_DC, OUTPUT); + pinMode(PIN_LED, OUTPUT); + pinMode(PIN_RESET, OUTPUT); + + SPI.begin(); + TFT_CS_HIGH; + TFT_DC_HIGH; + uint8_t i=0, TFTDriver=0; + + TFT_RST_ON; + delay(10); + TFT_RST_OFF; + + for(i=0;i<3;i++) + { + TFTDriver = readID(); + } + + sendCMD(0xCB); + WRITE_DATA(0x39); + WRITE_DATA(0x2C); + WRITE_DATA(0x00); + WRITE_DATA(0x34); + WRITE_DATA(0x02); + + sendCMD(0xCF); + WRITE_DATA(0x00); + WRITE_DATA(0XC1); + WRITE_DATA(0X30); + + sendCMD(0xE8); + WRITE_DATA(0x85); + WRITE_DATA(0x00); + WRITE_DATA(0x78); + + sendCMD(0xEA); + WRITE_DATA(0x00); + WRITE_DATA(0x00); + + sendCMD(0xED); + WRITE_DATA(0x64); + WRITE_DATA(0x03); + WRITE_DATA(0X12); + WRITE_DATA(0X81); + + sendCMD(0xF7); + WRITE_DATA(0x20); + + sendCMD(0xC0); //Power control + WRITE_DATA(0x23); //VRH[5:0] + + sendCMD(0xC1); //Power control + WRITE_DATA(0x10); //SAP[2:0];BT[3:0] + + sendCMD(0xC5); //VCM control + WRITE_DATA(0x3e); //Contrast + WRITE_DATA(0x28); + + sendCMD(0xC7); //VCM control2 + WRITE_DATA(0x86); //-- + + sendCMD(0x36); // Memory Access Control + WRITE_DATA(0x48); //C8 + + sendCMD(0x3A); + WRITE_DATA(0x55); + + sendCMD(0xB1); + WRITE_DATA(0x00); + WRITE_DATA(0x18); + + sendCMD(0xB6); // Display Function Control + WRITE_DATA(0x08); + WRITE_DATA(0x82); + WRITE_DATA(0x27); + + sendCMD(0xF2); // 3Gamma Function Disable + WRITE_DATA(0x00); + + sendCMD(0x26); //Gamma curve selected + WRITE_DATA(0x01); + + sendCMD(0xE0); //Set Gamma + WRITE_DATA(0x0F); + WRITE_DATA(0x31); + WRITE_DATA(0x2B); + WRITE_DATA(0x0C); + WRITE_DATA(0x0E); + WRITE_DATA(0x08); + WRITE_DATA(0x4E); + WRITE_DATA(0xF1); + WRITE_DATA(0x37); + WRITE_DATA(0x07); + WRITE_DATA(0x10); + WRITE_DATA(0x03); + WRITE_DATA(0x0E); + WRITE_DATA(0x09); + WRITE_DATA(0x00); + + sendCMD(0XE1); //Set Gamma + WRITE_DATA(0x00); + WRITE_DATA(0x0E); + WRITE_DATA(0x14); + WRITE_DATA(0x03); + WRITE_DATA(0x11); + WRITE_DATA(0x07); + WRITE_DATA(0x31); + WRITE_DATA(0xC1); + WRITE_DATA(0x48); + WRITE_DATA(0x08); + WRITE_DATA(0x0F); + WRITE_DATA(0x0C); + WRITE_DATA(0x31); + WRITE_DATA(0x36); + WRITE_DATA(0x0F); + + sendCMD(0x11); //Exit Sleep + delay(120); + + sendCMD(0x29); //Display on + sendCMD(0x2c); + clear(); +} + +uint8_t LCD_ILI9341::readID(void) +{ + uint8_t i=0; + uint8_t data[3] ; + uint8_t ID[3] = {0x00, 0x93, 0x41}; + uint8_t ToF=1; + for(i=0;i<3;i++) + { + data[i]=Read_Register(0xd3,i+1); + if(data[i] != ID[i]) + { + ToF=0; + } + } + if(!ToF) /* data!=ID */ + { +#if 0 + Serial.print("Read TFT ID failed, ID should be 0x09341, but read ID = 0x"); + for(i=0;i<3;i++) + { + Serial.print(data[i],HEX); + } + Serial.println(); +#endif + } + return ToF; +} + +void LCD_ILI9341::setCol(uint16_t StartCol,uint16_t EndCol) +{ + sendCMD(0x2A); /* Column Command address */ + sendData(StartCol); + sendData(EndCol); +} + +void LCD_ILI9341::setPage(uint16_t StartPage,uint16_t EndPage) +{ + sendCMD(0x2B); /* Column Command address */ + sendData(StartPage); + sendData(EndPage); +} + +void LCD_ILI9341::clear(uint16_t XL, uint16_t XR, uint16_t YU, uint16_t YD, uint16_t color) +{ + unsigned long XY=0; + unsigned long i=0; + + if(XL > XR) + { + XL = XL^XR; + XR = XL^XR; + XL = XL^XR; + } + if(YU > YD) + { + YU = YU^YD; + YD = YU^YD; + YU = YU^YD; + } + XL = constrain(XL, MIN_X,MAX_X); + XR = constrain(XR, MIN_X,MAX_X); + YU = constrain(YU, MIN_Y,MAX_Y); + YD = constrain(YD, MIN_Y,MAX_Y); + + XY = (XR-XL+1); + XY = XY*(YD-YU+1); + + setCol(XL,XR); + setPage(YU, YD); + sendCMD(0x2c); /* start to write to display ra */ + /* m */ + + TFT_DC_HIGH; + TFT_CS_LOW; + + uint8_t Hcolor = color>>8; + uint8_t Lcolor = color&0xff; + for(i=0; i < XY; i++) + { + SPI.transfer(Hcolor); + SPI.transfer(Lcolor); + } + + TFT_CS_HIGH; +} + +void LCD_ILI9341::clear(void) +{ + setCol(0, 239); + setPage(0, 319); + sendCMD(0x2c); /* start to write to display ra */ + /* m */ + + TFT_DC_HIGH; + TFT_CS_LOW; + for(uint16_t i=0; i<38400; i++) + { + SPI.transfer(0); + SPI.transfer(0); + SPI.transfer(0); + SPI.transfer(0); + } + TFT_CS_HIGH; + + m_x = 0; + m_y = 0; +} + + +void LCD_ILI9341::setXY(uint16_t x0, uint16_t x1, uint16_t y0, uint16_t y1) +{ + setCol(x0, x1); + setPage(319 - y1, 319 - y0); + sendCMD(0x2c); +} + +void LCD_ILI9341::setPixel(uint16_t poX, uint16_t poY,uint16_t color) +{ + setXY(poX, poY, poX, poY); + sendData(color); +} + +void LCD_ILI9341::backlight(bool on) +{ + digitalWrite(PIN_LED, on); +} + +void LCD_ILI9341::clearPixels(uint16_t pixels) +{ + TFT_DC_HIGH; + TFT_CS_LOW; + for(uint16_t i = 0; i < pixels; i++) + { + SPI.transfer(0); + SPI.transfer(0); + SPI.transfer(0); + SPI.transfer(0); + } + TFT_CS_HIGH; +} + +size_t LCD_ILI9341::write(uint8_t c) +{ + if (c == '\n') { + m_x += (m_font + 1) << 3; + return 0; + } else if (c == '\r') { + setXY(m_x, m_x + 7, m_y, 319); + clearPixels((320 - m_y) * 8); + m_y = 0; + return 0; + } + + if (m_font == FONT_SIZE_SMALL) { + setXY(m_x, m_x + 7, m_y, m_y + 4); + m_y += 6; + if (m_y >= 320) { + m_x += (m_font + 1) << 3; + m_y = 0; + if (m_x >= 240) { + m_x = 0; + } + } + if (c > 0x20 && c < 0x7f) { + byte pgm_buffer[5]; + memcpy_P(pgm_buffer, &font5x8[c - 0x21], 5); + byte i = 4; + TFT_DC_HIGH; + TFT_CS_LOW; + do { + unsigned char d = pgm_buffer[i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } while (i--); + TFT_CS_HIGH; + } else { + clearPixels(5 * 8); + } + } else { + setXY(m_x, m_x + 15, m_y, m_y + 7); + m_y += 9; + if (m_y >= 320) { + m_x += (m_font + 1) << 3; + m_y = 0; + if (m_x >= 240) { + m_x = 0; + } + } + if (c > 0x20 && c < 0x7f) { + byte pgm_buffer[16]; + memcpy_P(pgm_buffer, &font8x16_terminal[c - 0x21], 16); + TFT_DC_HIGH; + TFT_CS_LOW; + for (byte i = 0; i < 16; i += 2) { + unsigned char d = pgm_buffer[14 - i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + d = pgm_buffer[15 - i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } + TFT_CS_HIGH; + } else { + clearPixels(8 * 16); + } + } +} + +void LCD_ILI9341::writeDigit(byte n) +{ + if (m_font == FONT_SIZE_SMALL) { + setXY(m_x, m_x + 7, m_y, m_y + 7); + sendCMD(0x2c); + if (n <= 9) { + byte pgm_buffer[8]; + memcpy_P(pgm_buffer, &digits8x8[n], 8); + byte i = 7; + TFT_DC_HIGH; + TFT_CS_LOW; + do { + unsigned char d = pgm_buffer[i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } while (i--); + TFT_CS_HIGH; + m_y += 8; + } else { + clearPixels(8 * 8); + } + } else if (m_font == FONT_SIZE_MEDIUM) { + write(n <= 9 ? ('0' + n) : ' '); + } else if (m_font == FONT_SIZE_LARGE) { + setXY(m_x, m_x + 15, m_y, m_y + 15); + m_y += 16; + if (n <= 9) { + byte pgm_buffer[32]; + memcpy_P(pgm_buffer, &digits16x16[n], sizeof(pgm_buffer)); + TFT_DC_HIGH; + TFT_CS_LOW; + for (byte i = 0; i < 16; i++) { + unsigned char d = pgm_buffer[15 - i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + d = pgm_buffer[31 - i]; + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } + TFT_CS_HIGH; + } else { + clearPixels(16 * 16); + } + } else if (m_font == FONT_SIZE_XLARGE) { + setXY(m_x, m_x + 23, m_y, m_y + 15); + m_y += 18; + if (n <= 9) { + byte pgm_buffer[48]; + memcpy_P(pgm_buffer, &digits16x24[n], sizeof(pgm_buffer)); + TFT_DC_HIGH; + TFT_CS_LOW; + for (int i = 0; i < 48; i += 3) { + unsigned char d = pgm_buffer[45 - i]; + for (int j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + d = pgm_buffer[46 - i]; + for (int j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + d = pgm_buffer[47 - i]; + for (int j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } + TFT_CS_HIGH; + } else { + clearPixels(16 * 24); + } + } +} + +void LCD_ILI9341::draw(const PROGMEM byte* buffer, uint16_t x, uint16_t y, uint16_t width, uint16_t height) +{ + byte rows = height >> 3; + setXY(y, y + height - 1, x, x + width - 1); + uint16_t i = width - 1; + TFT_DC_HIGH; + TFT_CS_LOW; + do { + for (uint8_t h = 0; h < rows; h++) { + byte d = pgm_read_byte(buffer + i + width * h); + for (byte j = 0; j < 8; j++, d >>= 1) { + SPI.transfer(m_color[d & 1][1]); + SPI.transfer(m_color[d & 1][0]); + } + } + } while (i--); + TFT_CS_HIGH; +} + +void LCD_ILI9341::draw2x(const PROGMEM byte* buffer, uint16_t x, uint16_t y, byte width, byte height) +{ + byte rows = height >> 3; + setXY(y, y + height * 2 - 1, x, x + width * 2 - 1); + uint16_t i = width - 1; + TFT_DC_HIGH; + TFT_CS_LOW; + do { + for (uint8_t h = 0; h < rows; h++) { + byte d = pgm_read_byte(buffer + i + width * h); + for (byte j = 0; j < 8; j++, d >>= 1) { + byte h = m_color[d & 1][1]; + byte l = m_color[d & 1][0]; + SPI.transfer(h); + SPI.transfer(l); + SPI.transfer(h); + SPI.transfer(l); + } + } + for (uint8_t h = 0; h < rows; h++) { + byte d = pgm_read_byte(buffer + i + width * h); + for (byte j = 0; j < 8; j++, d >>= 1) { + byte h = m_color[d & 1][1]; + byte l = m_color[d & 1][0]; + SPI.transfer(h); + SPI.transfer(l); + SPI.transfer(h); + SPI.transfer(l); + } + } + } while (i--); + TFT_CS_HIGH; +} diff --git a/libraries/MultiLCD/ILI9341.h b/libraries/MultiLCD/ILI9341.h new file mode 100644 index 0000000..e0075c4 --- /dev/null +++ b/libraries/MultiLCD/ILI9341.h @@ -0,0 +1,161 @@ +/* + 2012 Copyright (c) Seeed Technology Inc. + + Authors: Albert.Miao & Loovee, + Visweswara R (with initializtion code from TFT vendor) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ +#ifndef TFTv2_h +#define TFTv2_h + +#if defined(ARDUINO) && ARDUINO >= 100 +#define SEEEDUINO +#include +#else +#include +#endif +#include + +#include + +//Basic Colors +#define RED 0xf800 +#define GREEN 0x07e0 +#define BLUE 0x001f +#define BLACK 0x0000 +#define YELLOW 0xffe0 +#define WHITE 0xffff + +//Other Colors +#define CYAN 0x07ff +#define BRIGHT_RED 0xf810 +#define GRAY1 0x8410 +#define GRAY2 0x4208 + +//TFT resolution 240*320 +#define MIN_X 0 +#define MIN_Y 0 +#define MAX_X 239 +#define MAX_Y 319 + +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + +#define TFT_CS_LOW {DDRE |= 0x08;PORTE &=~ 0x08;} +#define TFT_CS_HIGH {DDRE |= 0x08;PORTE |= 0x08;} +#define TFT_DC_LOW {DDRH |= 0x08;PORTH &=~ 0x08;} +#define TFT_DC_HIGH {DDRH |= 0x08;PORTH |= 0x08;} +#define TFT_BL_OFF {DDRH |= 0x10;PORTH &=~ 0x10;} +#define TFT_BL_ON {DDRH |= 0x10;PORTH |= 0x10;} +#define TFT_RST_OFF {DDRD |= 0x10;PORTD |= 0x10;} +#define TFT_RST_ON {DDRD |= 0x10;PORTD &=~ 0x10;} + +#define YP A2 // must be an analog pin, use "An" notation! +#define XM A1 // must be an analog pin, use "An" notation! +#define YM 54 // can be a digital pin, this is A0 +#define XP 57 // can be a digital pin, this is A3 + +#elif defined(__AVR_ATmega32U4__) + +#define TFT_CS_LOW {DDRC |= 0x40;PORTC &=~ 0x40;} +#define TFT_CS_HIGH {DDRC |= 0x40;PORTC |= 0x40;} +#define TFT_DC_LOW {DDRD |= 0x80;PORTD &=~ 0x80;} +#define TFT_DC_HIGH {DDRD |= 0x80;PORTD |= 0x80;} +#define TFT_BL_OFF {DDRE |= 0x40;PORTE &=~ 0x40;} +#define TFT_BL_ON {DDRE |= 0x40;PORTE |= 0x40;} +#define TFT_RST_OFF {DDRD |= 0x10;PORTD |= 0x10;} +#define TFT_RST_ON {DDRD |= 0x10;PORTD &=~ 0x10;} + +#define YP A2 // must be an analog pin, use "An" notation! +#define XM A1 // must be an analog pin, use "An" notation! +#define YM 18 // can be a digital pin, this is A0 +#define XP 21 // can be a digital pin, this is A3 + +#else +#define TFT_CS_LOW {DDRD |= 0x20;PORTD &=~ 0x20;} +#define TFT_CS_HIGH {DDRD |= 0x20;PORTD |= 0x20;} +#define TFT_DC_LOW {DDRD |= 0x40;PORTD &=~ 0x40;} +#define TFT_DC_HIGH {DDRD |= 0x40;PORTD |= 0x40;} +#define TFT_BL_OFF {DDRD |= 0x80;PORTD &=~ 0x80;} +#define TFT_BL_ON {DDRD |= 0x80;PORTD |= 0x80;} +#define TFT_RST_OFF {DDRD |= 0x10;PORTD |= 0x10;} +#define TFT_RST_ON {DDRD |= 0x10;PORTD &=~ 0x10;} + + +#define YP A2 // must be an analog pin, use "An" notation! +#define XM A1 // must be an analog pin, use "An" notation! +#define YM 14 // can be a digital pin, this is A0 +#define XP 17 // can be a digital pin, this is A3 + +#endif + +#define TS_MINX 116*2 +#define TS_MAXX 890*2 +#define TS_MINY 83*2 +#define TS_MAXY 913*2 + +#ifndef INT8U +#define INT8U unsigned char +#endif +#ifndef INT16U +#define INT16U unsigned int +#endif + +extern const PROGMEM unsigned char simpleFont[][8]; + +class TFT +{ +public: + void TFTinit (void); + void setCol(INT16U StartCol,INT16U EndCol); + void setPage(INT16U StartPage,INT16U EndPage); + void setXY(INT16U poX, INT16U poY); + void setPixel(INT16U poX, INT16U poY,INT16U color); + void sendCMD(INT8U index); + void WRITE_Package(INT16U *data,INT8U howmany); + void WRITE_DATA(INT8U data); + void sendData(INT16U data); + INT8U Read_Register(INT8U Addr,INT8U xParameter); + void fillScreen(INT16U XL,INT16U XR,INT16U YU,INT16U YD,INT16U color); + void fillScreen(void); + INT8U readID(void); + + void drawChar(INT8U ascii,INT16U poX, INT16U poY,INT16U size, INT16U fgcolor); + void drawString(char *string,INT16U poX, INT16U poY,INT16U size,INT16U fgcolor); + void fillRectangle(INT16U poX, INT16U poY, INT16U length, INT16U width, INT16U color); + + void drawLine(INT16U x0,INT16U y0,INT16U x1,INT16U y1,INT16U color); + void drawVerticalLine(INT16U poX, INT16U poY,INT16U length,INT16U color); + void drawHorizontalLine(INT16U poX, INT16U poY,INT16U length,INT16U color); + void drawRectangle(INT16U poX, INT16U poY, INT16U length,INT16U width,INT16U color); + + void drawCircle(int poX, int poY, int r,INT16U color); + void fillCircle(int poX, int poY, int r,INT16U color); + + void drawTraingle(int poX1, int poY1, int poX2, int poY2, int poX3, int poY3, INT16U color); + INT8U drawNumber(long long_num,INT16U poX, INT16U poY,INT16U size,INT16U fgcolor); + INT8U drawFloat(float floatNumber,INT8U decimal,INT16U poX, INT16U poY,INT16U size,INT16U fgcolor); + INT8U drawFloat(float floatNumber,INT16U poX, INT16U poY,INT16U size,INT16U fgcolor); + +}; + +extern TFT Tft; + +#endif + +/********************************************************************************************************* + END FILE +*********************************************************************************************************/ diff --git a/libraries/MultiLCD/MultiLCD.cpp b/libraries/MultiLCD/MultiLCD.cpp index 2d46b59..cb3c3a5 100644 --- a/libraries/MultiLCD/MultiLCD.cpp +++ b/libraries/MultiLCD/MultiLCD.cpp @@ -9,10 +9,10 @@ #include #include "MultiLCD.h" -void LCD_Common::printInt(unsigned int value, char padding) +void LCD_Common::printInt(uint16_t value, int8_t padding) { - unsigned int den = 10000; - for (byte i = 5; i > 0; i--) { + uint16_t den = 10000; + for (int8_t i = 5; i > 0; i--) { byte v = (byte)(value / den); value -= v * den; den /= 10; @@ -27,10 +27,10 @@ void LCD_Common::printInt(unsigned int value, char padding) } } -void LCD_Common::printLong(unsigned long value, char padding) +void LCD_Common::printLong(uint32_t value, int8_t padding) { - unsigned long den = 1000000000; - for (byte i = 10; i > 0; i--) { + uint32_t den = 1000000000; + for (int8_t i = 10; i > 0; i--) { byte v = (byte)(value / den); value -= v * den; den /= 10; @@ -45,98 +45,6 @@ void LCD_Common::printLong(unsigned long value, char padding) } } -void LCD_ZTOLED::setCursor(byte column, byte line) -{ - m_column = column; - m_page = line; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - delay(1); -} - -size_t LCD_ZTOLED::write(uint8_t c) -{ - if (c == '\n') { - m_column = 0; - m_page += (m_font == FONT_SIZE_SMALL) ? 1 : 2; - return 0; - } else if (c == '\r') { - m_column = 0; - return 0; - } - if (m_font == FONT_SIZE_SMALL) { - if (c <= 0x20 || c >= 0x7f) { - ScI2cMxFillArea(OLED_ADDRESS, m_column, m_column + 5, m_page, m_page, 0); - } else { - ScI2cMxDisplayDot(OLED_ADDRESS, font5x8[c - 0x21], 5); - } - m_column += 6; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - } else { - char s[2] = {c}; - ScI2cMxDisplay8x16Str(OLED_ADDRESS, m_page, m_column, s); - m_column += 8; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - } - return 1; -} - -/* -void LCD_ZTOLED::print(const char* s) -{ - ScI2cMxDisplay8x16Str(OLED_ADDRESS, m_page, m_column, s); - m_column += (strlen(s) << 3); - m_page += (m_column >> 7) << 1; - m_column %= 0x7f; -} -*/ - -void LCD_ZTOLED::writeDigit(byte n) -{ - if (m_font == FONT_SIZE_SMALL) { - if (n <= 9) - ScI2cMxDisplayDot(OLED_ADDRESS, font5x8[n + ('0' - 0x21)], 5); - else - ScI2cMxFillArea(OLED_ADDRESS, m_column, m_column + 5, m_page, m_page, 0); - m_column += 6; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - } else if (m_font == FONT_SIZE_MEDIUM) { - if (n <= 9) { - ScI2cMxDisplayDot(OLED_ADDRESS, digits8x8[n], 8); - } else { - ScI2cMxFillArea(OLED_ADDRESS, m_column, m_column + 7, m_page, m_page, 0); - - } - m_column += 8; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - } else if (m_font == FONT_SIZE_LARGE) { - write('0' + n); - } else { - unsigned char data[32]; - if (n <= 9) { - memcpy_P(data, digits16x16[n], 32); - } else { - memset(data, 0, sizeof(data)); - } - ScI2cMxDisplayDot16x16(OLED_ADDRESS, m_page, m_column, data); - m_column += 16; - ScI2cMxSetLocation(OLED_ADDRESS, m_page, m_column); - } -} - -void LCD_ZTOLED::clear() -{ - ScI2cMxFillArea(OLED_ADDRESS, 0, 7, 0, 127, 0); - delay(10); - setCursor(0, 0); -} - -void LCD_ZTOLED::begin() -{ - I2cInit(); - ScI2cMxReset(OLED_ADDRESS); - clear(); -} - void LCD_PCD8544::writeDigit(byte n) { if (m_font == FONT_SIZE_SMALL) { @@ -280,8 +188,8 @@ size_t LCD_SSD1306::write(uint8_t c) void LCD_SSD1306::writeDigit(byte n) { - uint8_t twbrbackup = TWBR; - TWBR = 18; // upgrade to 400KHz! + //uint8_t twbrbackup = TWBR; + //TWBR = 18; // upgrade to 400KHz! if (m_font == FONT_SIZE_SMALL) { Wire.beginTransmission(_i2caddr); Wire.write(0x40); @@ -299,73 +207,7 @@ void LCD_SSD1306::writeDigit(byte n) Wire.endTransmission(); m_col += 6; } else if (m_font == FONT_SIZE_MEDIUM) { -#ifndef MEMORY_SAVING - if (n <= 9) { - n += '0' - 0x21; - ssd1306_command(0xB0 + m_row);//set page address - ssd1306_command(m_col & 0xf);//set lower column address - ssd1306_command(0x10 | (m_col >> 4));//set higher column address - - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - for (byte i = 0; i <= 14; i += 2) { - byte d = pgm_read_byte(&font8x16_terminal[n][i]); - Wire.write(d); - if (m_flags & FLAG_PIXEL_DOUBLE_H) Wire.write(d); - } - Wire.endTransmission(); - - ssd1306_command(0xB0 + m_row + 1);//set page address - ssd1306_command(m_col & 0xf);//set lower column address - ssd1306_command(0x10 | (m_col >> 4));//set higher column address - - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - for (byte i = 1; i <= 15; i += 2) { - byte d = pgm_read_byte(&font8x16_terminal[n][i]); - Wire.write(d); - if (m_flags & FLAG_PIXEL_DOUBLE_H) Wire.write(d); - } - Wire.endTransmission(); - } else { - ssd1306_command(0xB0 + m_row);//set page address - ssd1306_command(m_col & 0xf);//set lower column address - ssd1306_command(0x10 | (m_col >> 4));//set higher column address - - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - for (byte i = (m_flags & FLAG_PIXEL_DOUBLE_H) ? 16 : 8; i > 0; i--) { - Wire.write(0); - } - Wire.endTransmission(); - - ssd1306_command(0xB0 + m_row + 1);//set page address - ssd1306_command(m_col & 0xf);//set lower column address - ssd1306_command(0x10 | (m_col >> 4));//set higher column address - - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - for (byte i = (m_flags & FLAG_PIXEL_DOUBLE_H) ? 16 : 8; i > 0; i--) { - Wire.write(0); - } - Wire.endTransmission(); - } - m_col += (m_flags & FLAG_PIXEL_DOUBLE_H) ? 17 : 9; -#else - Wire.beginTransmission(_i2caddr); - Wire.write(0x40); - if (n <= 9) { - for (byte i = 0; i < 8; i++) { - Wire.write(pgm_read_byte(&digits8x8[n][i])); - } - } else { - for (byte i = 0; i < 8; i++) { - Wire.write(0); - } - } - Wire.endTransmission(); - m_col += 8; -#endif + write(n <= 9 ? ('0' + n) : ' '); } else if (m_font == FONT_SIZE_LARGE) { if (n <= 9) { byte i; @@ -495,7 +337,7 @@ void LCD_SSD1306::writeDigit(byte n) } m_col += (m_flags & FLAG_PIXEL_DOUBLE_H) ? 30 : 16; } - TWBR = twbrbackup; + //TWBR = twbrbackup; } void LCD_SSD1306::draw(const PROGMEM byte* buffer, byte x, byte y, byte width, byte height) @@ -505,8 +347,8 @@ void LCD_SSD1306::draw(const PROGMEM byte* buffer, byte x, byte y, byte width, b ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 // save I2C bitrate - uint8_t twbrbackup = TWBR; - TWBR = 18; // upgrade to 400KHz! + //uint8_t twbrbackup = TWBR; + //TWBR = 18; // upgrade to 400KHz! const PROGMEM byte *p = buffer; height >>= 3; @@ -527,7 +369,7 @@ void LCD_SSD1306::draw(const PROGMEM byte* buffer, byte x, byte y, byte width, b Wire.endTransmission(); } } - TWBR = twbrbackup; + //TWBR = twbrbackup; } void LCD_SSD1306::clearLine(byte line) @@ -537,8 +379,8 @@ void LCD_SSD1306::clearLine(byte line) ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 // save I2C bitrate - uint8_t twbrbackup = TWBR; - TWBR = 18; // upgrade to 400KHz! + //uint8_t twbrbackup = TWBR; + //TWBR = 18; // upgrade to 400KHz! // send a bunch of data in one xmission ssd1306_command(0xB0 + line);//set page address @@ -554,7 +396,7 @@ void LCD_SSD1306::clearLine(byte line) Wire.endTransmission(); } - TWBR = twbrbackup; + //TWBR = twbrbackup; } void LCD_SSD1306::clear(byte x, byte y, byte width, byte height) @@ -564,8 +406,8 @@ void LCD_SSD1306::clear(byte x, byte y, byte width, byte height) ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 // save I2C bitrate - uint8_t twbrbackup = TWBR; - TWBR = 18; // upgrade to 400KHz! + //uint8_t twbrbackup = TWBR; + //TWBR = 18; // upgrade to 400KHz! height >>= 3; width >>= 3; @@ -587,5 +429,5 @@ void LCD_SSD1306::clear(byte x, byte y, byte width, byte height) } setCursor(0, 0); - TWBR = twbrbackup; + //TWBR = twbrbackup; } diff --git a/libraries/MultiLCD/MultiLCD.h b/libraries/MultiLCD/MultiLCD.h index 7799a19..126ca0e 100644 --- a/libraries/MultiLCD/MultiLCD.h +++ b/libraries/MultiLCD/MultiLCD.h @@ -33,8 +33,8 @@ public: void setFlags(byte flags) { m_flags = flags; } virtual void backlight(bool on) {} virtual void draw(const PROGMEM byte* buffer, byte x, byte y, byte width, byte height) {} - void printInt(uint16_t value, char padding = -1); - void printLong(unsigned long value, char padding = -1); + void printInt(uint16_t value, int8_t padding = -1); + void printLong(uint32_t value, int8_t padding = -1); protected: virtual void writeDigit(byte n) {} byte m_font; @@ -73,32 +73,6 @@ private: void writeDigit(byte n); }; -#include "ZtLib.h" - -#define OLED_ADDRESS 0x27 - -class LCD_ZTOLED : public LCD_Common, public ZtLib, public Print -{ -public: - byte getLines() { return 4; } - byte getCols() { return 16; } - void setCursor(byte column, byte line); - size_t write(uint8_t c); - //void print(const char* s); - void writeDigit(byte n); - void clear(); - void begin(); - void backlight(bool on) {} - void clearLine(byte line) - { - setCursor(0, line); - for (byte i = 16; i > 0; i--) write(' '); - } -private: - unsigned char m_column; - unsigned char m_page; -}; - #include "LCD4Bit_mod.h" class LCD_1602 : public LCD_Common, public LCD4Bit_mod { @@ -134,19 +108,24 @@ private: byte m_row; }; +#define TFT_LINE_HEIGHT 10 + class LCD_ILI9325D : public LCD_Common, public Print { public: - LCD_ILI9325D():m_lineHeight(10) { m_font = FONT_SIZE_MEDIUM; } + LCD_ILI9325D() { m_font = FONT_SIZE_MEDIUM; } void setCursor(uint16_t column, uint16_t line) { m_y = column; - m_x = line * m_lineHeight; + m_x = line * TFT_LINE_HEIGHT; } - void setColor(uint16_t textColor, uint16_t bgColor = 0) + void setTextColor(uint8_t R, uint8_t G, uint8_t B) { - m_color[0] = bgColor; - m_color[1] = textColor; + m_color[1] = ((uint16_t)R << 11) | ((uint16_t)G << 5) | B; + } + void SetBGColor(uint8_t R, uint8_t G, uint8_t B) + { + m_color[0] = ((uint16_t)R << 11) | ((uint16_t)G << 5) | B; } void begin(); void clear(uint16_t x = 0, uint16_t y = 0, uint16_t width = 320, uint16_t height = 240); @@ -156,15 +135,14 @@ public: size_t write(uint8_t); void clearLine(byte line) { - clear(0, line * m_lineHeight, 320, 8); + clear(0, line * TFT_LINE_HEIGHT, 320, 8); } - void setLineHeight(byte lineHeight) { m_lineHeight = lineHeight; } byte getLines() { return 53; } byte getCols() { return 30; } private: void writeDigit(byte n); void clearPixels(uint16_t pixels); - void SetXY(uint16_t x0,uint16_t x1,uint16_t y0,uint16_t y1); + void setXY(uint16_t x0,uint16_t x1,uint16_t y0,uint16_t y1); void WriteData(uint16_t c); void WriteData(byte l, byte h); void WriteCommandData(uint16_t cmd,uint16_t dat); @@ -172,9 +150,58 @@ private: void Disable(); void SetCommandMode(); void SetDataMode(); - int m_x; - int m_y; + uint16_t m_x; + uint16_t m_y; uint16_t m_color[2]; - byte m_lineHeight; byte lastData; }; + +class LCD_ILI9341 : public LCD_Common, public Print +{ +public: + LCD_ILI9341() { m_font = FONT_SIZE_MEDIUM; } + void setCursor(uint16_t column, uint16_t line) + { + m_y = column; + m_x = line * TFT_LINE_HEIGHT; + } + void setTextColor(uint8_t R, uint8_t G, uint8_t B) + { + uint16_t color = ((uint16_t)R << 11) | ((uint16_t)G << 5) | B; + m_color[1][0] = color & 0xff; + m_color[1][1] = color >> 8; + } + void SetBGColor(uint8_t R, uint8_t G, uint8_t B) + { + uint16_t color = ((uint16_t)R << 11) | ((uint16_t)G << 5) | B; + m_color[0][0] = color & 0xff; + m_color[0][1] = color >> 8; + } + void clearLine(byte line) + { + clear(0, line * TFT_LINE_HEIGHT, 320, 8); + } + void begin (void); + void setXY(uint16_t x0, uint16_t x1, uint16_t y0, uint16_t y1); + void setPixel(uint16_t poX, uint16_t poY,uint16_t color); + void clear(uint16_t XL,uint16_t XR,uint16_t YU,uint16_t YD,uint16_t color = 0); + void clear(void); + size_t write(uint8_t); + void backlight(bool on); + void draw(const PROGMEM byte* buffer, uint16_t x, uint16_t y, uint16_t width, uint16_t height); + void draw2x(const PROGMEM byte* buffer, uint16_t x, uint16_t y, byte width, byte height); +private: + void writeDigit(byte n); + void clearPixels(uint16_t pixels); + void setCol(uint16_t StartCol,uint16_t EndCol); + void setPage(uint16_t StartPage,uint16_t EndPage); + void sendCMD(uint8_t index); + void WRITE_Package(uint16_t *data,uint8_t howmany); + void WRITE_DATA(uint8_t data); + void sendData(uint16_t data); + uint8_t Read_Register(uint8_t Addr,uint8_t xParameter); + uint8_t readID(void); + uint8_t m_color[2][2]; + uint16_t m_x; + uint16_t m_y; +}; diff --git a/libraries/MultiLCD/SSD1306.cpp b/libraries/MultiLCD/SSD1306.cpp index 7f7b8e8..5fc1ba0 100644 --- a/libraries/MultiLCD/SSD1306.cpp +++ b/libraries/MultiLCD/SSD1306.cpp @@ -1,5 +1,5 @@ #include -#include +//#include #include #include #include "SSD1306.h" @@ -238,8 +238,8 @@ void SSD1306::fill(unsigned char dat) ssd1306_command(0x10);//set higher column address ssd1306_command(0xB0);//set page address - uint8_t twbrbackup = TWBR; - TWBR = 18; // upgrade to 400KHz! + //uint8_t twbrbackup = TWBR; + //TWBR = 18; // upgrade to 400KHz! for (byte i=0; i<(SSD1306_LCDHEIGHT/8); i++) { // send a bunch of data in one xmission @@ -256,7 +256,7 @@ void SSD1306::fill(unsigned char dat) Wire.endTransmission(); } } - TWBR = twbrbackup; + //TWBR = twbrbackup; } void SSD1306::draw8x8(byte* buffer, uint8_t x, uint8_t y) diff --git a/libraries/MultiLCD/SSD1306.h b/libraries/MultiLCD/SSD1306.h index aaa3534..ae7f339 100644 --- a/libraries/MultiLCD/SSD1306.h +++ b/libraries/MultiLCD/SSD1306.h @@ -1,11 +1,4 @@ -#if ARDUINO >= 100 - #include "Arduino.h" -#else - #include "WProgram.h" -#endif - -#define BLACK 0 -#define WHITE 1 +#include "Arduino.h" #define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D // Address for 128x32 is 0x3C diff --git a/libraries/MultiLCD/ZtLib.cpp b/libraries/MultiLCD/ZtLib.cpp deleted file mode 100644 index ecda4c4..0000000 --- a/libraries/MultiLCD/ZtLib.cpp +++ /dev/null @@ -1,607 +0,0 @@ -/* - ZtLib.cpp - ZT module Drive Library for Wiring & Arduino - Copyright (c) 2012 Alvin Li(Kozig/www.kozig.com). All right reserved. - This library is free software; - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - Version:V1.1 -*/ - -#include -extern "C" { - #include "../Wire/utility/twi.h" -} - -#include "ZtLib.h" - -///ZT.SEG8B4A036A PART///-------------------------------------------------------------------s -unsigned char codetable[] = -{ - 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x77, 0x7C,0x39,0x5E,0x79,0x71,0x00 -}; - -// Public Methods ////////////////////////////////////////////////////////////// -/* - * Function I2cInit - * Desc TWI/I2C init - * Input none - * Output none - */ -void ZtLib::I2cInit(void) -{ - twi_init(); -} -/* - * Function Seg8b4a036aSleep - * Desc Set ZT.SEG8B4A036A Go to Sleep - * Input addr:ZT.SEG8B4A036A Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aSleep(uint8_t addr) -{ - uint8_t buff[5]={REG_SLEEP, SLEEP_ON, 0, 0, 0}; - - return twi_writeTo(addr, buff, 5, 1, 1); -} -/* - * Function Seg8b4a036aUnSleep - * Desc Set ZT.SEG8B4A036A Wait Up From Sleep - * Input addr:ZT.SEG8B4A036A Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aUnSleep(uint8_t addr) -{ - uint8_t buff[5]={REG_SLEEP, SLEEP_OFF, 0, 0, 0}; - - return twi_writeTo(addr, buff, 5, 1, 1); -} -/* - * Function Seg8b4a036aReadState - * Desc Read ZT.SEG8B4A036A Status - * Input addr:ZT.SEG8B4A036A Address - * Output !=0xFF ZT.SC-I2CMx Status - * 0xFF .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aReadState(uint8_t addr) -{ - uint8_t state = 0xFF; - uint8_t temp; - uint8_t buff[1] = {REG_STATUS}; - temp = twi_writeTo(addr, buff, 1, 1, 0); // no stop - if (temp ==0) - { - temp = twi_readFrom(addr, buff, 1, 1); - } - if (temp==1) - { - state = buff[0]; - } - - return state; -} -/* - * Function Seg8b4a036aReadVersion - * Desc Read ZT.SEG8B4A036A Fireware Version - * Input addr:ZT.SEG8B4A036A Address - *buf:Version Buffer - * Output .. number bytes of Version Read out - */ -int ZtLib::Seg8b4a036aReadVersion(uint8_t addr, uint8_t *buf) -{ - uint8_t state = 0xFF; - uint8_t temp; - uint8_t regv[1] = {REG_VERSION}; - temp = twi_writeTo(addr, regv, 1, 1, 0); // no stop - if (temp ==0) - { - temp = twi_readFrom(addr, &(*buf), 19, 1); - } - return temp; -} -/* - * Function Seg8b4a036aDisplayDec - * Desc ZT.SEG8B4A036A Display decimal numeral - * Input addr:ZT.SEG8B4A036A Address - val: Display Val - bitnum:Display Bit Number - dotbit: Dot Display - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aDisplayDec(uint8_t addr,unsigned short val, uint8_t bitnum, uint8_t dotbit) -{ - uint8_t i; - uint8_t segnum[5]; - if (val>9999) return 0xFF; - - segnum[0] = REG_DAT; - segnum[1] = val%10; - segnum[2] = (val%100)/10; - segnum[3] = (val/100)%10; - segnum[4] = val/1000; - for (i=1; i<5; i++) - { - segnum[i] = codetable[segnum[i]]; - if (dotbit&0x01) - { - segnum[i] |= 0x80; - } - dotbit >>= 1; - } - - if (bitnum==DISP_0BIT) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;segnum[1] = 0;} - else if (bitnum==DISP_1BIT) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;} - else if (bitnum==DISP_2BIT) {segnum[4] = 0;segnum[3] = 0;} - else if (bitnum==DISP_3BIT) {segnum[4] = 0;} - else if (bitnum==DISP_AUTO) - { - if (val<10) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;} - else if (val<100) {segnum[4] = 0;segnum[3] = 0;} - else if (val<1000) {segnum[4] = 0;} - } - - return twi_writeTo(addr, segnum, 5, 1, 1); -} -/* - * Function Seg8b4a036aDisplayHex - * Desc Read ZT.SEG8B4A036A Display hexadecimal number - * Input addr:ZT.SEG8B4A036A Address - val: Display Val - bitnum:Display Bit Number - dotbit: Dot Display - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aDisplayHex(uint8_t addr,unsigned short val, uint8_t bitnum, uint8_t dotbit) -{ - uint8_t i; - unsigned short temp; - uint8_t segnum[5]; - segnum[0] = REG_DAT; - temp = val; - for (i=1; i<5; i++) - { - segnum[i] = temp&0x000F; - temp >>= 4; - segnum[i] = codetable[segnum[i]]; - if (dotbit&0x01) - { - segnum[i] |= 0x80; - } - dotbit >>= 1; - } - - if (bitnum==DISP_0BIT) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;segnum[1] = 0;} - else if (bitnum==DISP_1BIT) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;} - else if (bitnum==DISP_2BIT) {segnum[4] = 0;segnum[3] = 0;} - else if (bitnum==DISP_3BIT) {segnum[4] = 0;} - else if (bitnum==DISP_AUTO) - { - if (!(val&0xFFF0)) {segnum[4] = 0;segnum[3] = 0;segnum[2] = 0;} - else if (!(val&0xFF00)) {segnum[4] = 0;segnum[3] = 0;} - else if (!(val&0xF000)) {segnum[4] = 0;} - } - - return twi_writeTo(addr, segnum, 5, 1, 1); -} -/* - * Function Seg8b4a036aSetBrightness - * Desc Set ZT.SEG8B4A036A Brightness - * Input addr:ZT.SEG8B4A036A Address - OnDelay: - OffDelay: - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aSetBrightness(uint8_t addr, uint8_t OnDelay, uint8_t OffDelay) -{ - uint8_t buff[5] = {REG_BRIGHTNESS, OnDelay, OffDelay, 0, 0}; - return twi_writeTo(addr, buff, 5, 1, 1); -} -/* - * Function Seg8b4a036aSetAddress - * Desc Set ZT.SEG8B4A036A New Address - * Input val:ZT.SEG8B4A036A Address New Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aSetAddress(uint8_t val) -{ - uint8_t buff[2] = {REG_ADDRESS, val}; - return twi_writeTo(ZTSEG8B4A036A_DADDR, buff, 2, 1, 1); -} -/* - * Function Seg8b4a036aDisplayBuff - * Desc Set ZT.SEG8B4A036A Brightness - * Input addr:ZT.SEG8B4A036A Address - *buf: Display buffer - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::Seg8b4a036aDisplayBuff(uint8_t addr,uint8_t *buf) -{ - uint8_t buff[5]={REG_DAT, buf[0], buf[1], buf[2], buf[3]}; - - return twi_writeTo(addr, buff, 5, 1, 1); -} - - -///ZT.ScI2cMx PART///------------------------------------------------------------------- -/* - * Function ScI2cMxReadState - * Desc Read ZT.SC-I2CMx Status - * Input addr:ZT.SC-I2CMx Address - * Output !=0xFF ZT.SC-I2CMx Status - * 0xFF .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxReadState(uint8_t addr) -{ - uint8_t state = 0xFF; - uint8_t temp; - uint8_t buff[1] = {REG_STATUS}; - temp = twi_writeTo(addr, buff, 1, 1, 0); // no stop - if (temp ==0) - { - temp = twi_readFrom(addr, buff, 1, 1); - } - if (temp==1) - { - state = buff[0]; - } - - return state; -} - -/* - * Function ScI2cMxReadVersion - * Desc Read ZT.SC-I2CMx Fireware Version - * Input addr:ZT.SC-I2CMx Address - *buf:Version Buffer - * Output !=0xFF ZT.SC-I2CMx Status - * othe .. number bytes of Version Read out - */ -int ZtLib::ScI2cMxReadVersion(uint8_t addr, uint8_t *buf) -{ - uint8_t state = 0xFF; - uint8_t temp; - uint8_t regv[1] = {REG_VERSION}; - temp = twi_writeTo(addr, regv, 1, 1, 0); // no stop - if (temp ==0) - { - temp = twi_readFrom(addr, &(*buf), 16, 1); - } - return temp; -} -/* - * Function ScI2cMxSetAddress - * Desc Set ZT.SC-I2CMx New Address - * Input val:ZT.SC-I2CMx Address New Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxSetAddress(uint8_t newaddr) -{ - uint8_t buff[2] = {REG_ADDRESS, newaddr}; - return twi_writeTo(ZTSCI2CMX_DADDRESS, buff, 2, 1, 1); -} - -/* - * Function ScI2cMxSetBrightness - * Desc Set ZT.SC-I2CMx Brightness - * Input addr:ZT.SC-I2CMx Address - val: Brightness 0~0xFF - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxSetBrightness(uint8_t addr, uint8_t val) -{ - uint8_t buff[2] = {REG_BRIGHTNESS, val}; - return twi_writeTo(addr, buff, 2, 1, 1); -} -/* - * Function ScI2cMxSetVcomH - * Desc Set ZT.SC-I2CMx VcomH - * Input addr:ZT.SC-I2CMx Address - val: Brightness 0~7 - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxSetVcomH(uint8_t addr, uint8_t val) -{ - uint8_t buff[2] = {REG_VCOMH, val}; - return twi_writeTo(addr, buff, 2, 1, 1); -} - -/* - * Function ScI2cMxDisplay8x16Str - * Desc ZT.SC-I2CMx Display 8x16 English String - * Input addr:ZT.SC-I2CMx Address - page: location page - column: location column - *str: 8X16 English String - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxDisplay8x16Str(uint8_t addr, uint8_t page, uint8_t column, const char *str) -{ - uint8_t i=0; - uint8_t buff[19]; - buff[0] = REG_8X16STR; - buff[1] = page; - buff[2] = column; - i=0; - while ((*str != '\0') && (i<16)) - { - buff[i+3] = (uint8_t)*str++; - i++; - } - return twi_writeTo(addr, buff, i+3, 1, 1); -} -/* - * Function ScI2cMxFillArea - * Desc ZT.SC-I2CMx Fill Area - * Input addr:ZT.SC-I2CMx Address - spage: start page - epage: end page - scolumn: start column - ecolumn: end column - filldata: fill data - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxFillArea(uint8_t addr, uint8_t spage, uint8_t epage,uint8_t scolumn, uint8_t ecolumn,uint8_t filldata) -{ - uint8_t buff[6] = {REG_FILL_AREA, spage, epage, scolumn, ecolumn, filldata}; - return twi_writeTo(addr, buff, 6, 1, 1); -} -/* - * Function ScI2cMxScrollingHorizontal - * Desc ZT.SC-I2CMx Scrolling Horizontal - * Input addr:ZT.SC-I2CMx Address - lr: Scroll direction - spage: start page - epage: end page - frames: Scroll fram - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxScrollingHorizontal(uint8_t addr, uint8_t lr, uint8_t spage, uint8_t epage,uint8_t frames) -{ - uint8_t buff[9] = {REG_CMD, 0x2E, 0x00, spage, frames, epage, 0x00, 0xFF, 0x2F}; - twi_writeTo(addr, buff, 2, 1, 1); - buff[0] = REG_CMD; - buff[1] = lr; - for (int i=0; i<10; i++); - return twi_writeTo(addr, buff, 9, 1, 1); -} -/* - * Function ScI2cMxScrollingHorizontal - * Desc ZT.SC-I2CMx Scrolling Vertical - * Input addr:ZT.SC-I2CMx Address - lr: Scroll direction - rowsfixed: rows fixed - rowsscroll: rows scroll - scrollstep: scroll step - stepdelay: step delay - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxScrollingVertical(uint8_t addr, uint8_t scrollupdown, uint8_t rowsfixed, uint8_t rowsscroll, uint8_t scrollstep, uint8_t stepdelay) -{ - uint8_t buff[6] = {REG_SCROVER, scrollupdown, rowsfixed, rowsscroll, scrollstep, stepdelay}; - return twi_writeTo(addr, buff, 6, 1, 1); -} -/* - * function ScI2cMxScrollingVerticalHorizontal - * Desc Continuous Vertical / Horizontal / Diagonal Scrolling (Partial or Full Screen) - * input : - Sdirection: Scrolling Direction - "0x00" (Vertical & Rightward) - "0x01" (Vertical & Leftward) - spage: Define Start Page Address (Horizontal / Diagonal Scrolling) - epage: Define End Page Address (Horizontal / Diagonal Scrolling) - fixedarea: Set Top Fixed Area (Vertical Scrolling) - scrollarea: Set Vertical Scroll Area (Vertical Scrolling) - frames: Set Time Interval between Each Scroll Step in Terms of Frame Frequency - offset: Set Numbers of Row Scroll per Step (Vertical / Diagonal Scrolling) - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxScrollingVerticalHorizontal(uint8_t addr, uint8_t Sdirection, uint8_t spage, uint8_t epage, uint8_t fixedarea, uint8_t scrollarea, uint8_t offset, uint8_t frames) -{ - uint8_t buff[8] = {REG_SCROVERHOR, Sdirection, spage, epage, fixedarea, scrollarea, offset, frames}; - return twi_writeTo(addr, buff, 8, 1, 1); -} -/* - * Function ScI2cMxDeactivateScroll - * Desc ZT.SC-I2CMx Deactivate Scroll - * Input addr:ZT.SC-I2CMx Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxDeactivateScroll(uint8_t addr) -{ - uint8_t buff[2] = {REG_CMD, 0x2E}; - return twi_writeTo(addr, buff, 2, 1, 1); -} - -/* - * Function ScI2cMxReset - * Desc ZT.SC-I2CMx Reset OLED - * Input addr:ZT.SC-I2CMx Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxReset(uint8_t addr) -{ - uint8_t buff[2] = {REG_RESET,RESET_OLED}; - return twi_writeTo(addr, buff, 2, 1, 1); -} - -/* - * Function ScI2cMxSetLocation - * Desc Set ZT.SC-I2CMx SetLocation - * Input addr:ZT.SC-I2CMx Address - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -int ZtLib::ScI2cMxSetLocation(uint8_t addr, uint8_t page,uint8_t column) -{ - uint8_t buff[4] = {REG_CMD, (0xB0|page), (column%16), (column/16+0x10)}; - return twi_writeTo(addr, buff, 4, 1, 1); -} -/* - * Function ScI2cMxDisplayDot16x16 - * Desc Set ZT.SC-I2CMx Display 16*16 Dot - * Input addr:ZT.SC-I2CMx Address - page:page - column:column - *str:16*16 Dot Data - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -void ZtLib::ScI2cMxDisplayDot16x16(uint8_t addr, uint8_t page, uint8_t column, unsigned char *str) -{ - uint8_t buff[17]; - buff[0] = REG_DAT; - ScI2cMxSetLocation(addr, page, column); - for (int i=0; i<16; i++) - { - buff[i+1] = str[i]; - } - twi_writeTo(addr, buff, 17, 1, 1); - ScI2cMxSetLocation(addr, page+1, column); - for (int i=0; i<16; i++) - { - buff[i+1] = str[i+16]; - } - twi_writeTo(addr, buff, 17, 1, 1); -} - -void ZtLib::ScI2cMxDisplayDot(uint8_t addr, const PROGMEM uint8_t* buffer, uint8_t len) -{ - uint8_t buff[9] = {REG_DAT}; - memcpy_P(buff + 1, buffer, len); - twi_writeTo(addr, buff, 9, 1, 1); -} - -/* - * Function ScI2cMxDisplayArea - * Desc Set ZT.SC-I2CMx Display Area - * Input addr:ZT.SC-I2CMx Address - spage: start page - epage: end page - scolumn: start column - ecolumn: end column - *pt: Data - * Output 0 .. success - * 1 .. length to long for buffer - * 2 .. address send, NACK received - * 3 .. data send, NACK received - * 4 .. other twi error (lost bus arbitration, bus error, ..) - */ -void ZtLib::ScI2cMxDisplayArea(uint8_t addr, uint8_t spage, uint8_t epage, uint8_t scolumn, uint8_t ecolumn, const char *pt) -{ - uint8_t i = 0; - uint8_t j = 0; - uint8_t h = 0; - uint8_t w = 0; - uint16_t cnt = 0; - uint8_t buff[32]; - buff[0] = REG_DAT; - - h = epage - spage; - w = ecolumn - scolumn; - - while ( j=31) - { - for (int n=0; n<31; n++) - { - buff[1+n] = pt[cnt++]; - } - twi_writeTo(addr, buff, 32, 1, 1); - p -= 31; - } - else - { - int n; - for (n=0; n - -////////////////// -#define ZTSEG8B4A036A_DADDR 0x51 -#define SET_ADDR 0x61 -#define WRITE_CODE 0xAA -#define WRITE_CMD 0x55 - -#define DOT_NONE (0) -#define DOT_BIT1 (1<<0) -#define DOT_BIT2 (1<<1) -#define DOT_BIT3 (1<<2) -#define DOT_BIT4 (1<<3) - -#define DISP_0BIT (0) -#define DISP_1BIT (1) -#define DISP_2BIT (2) -#define DISP_3BIT (3) -#define DISP_4BIT (4) -#define DISP_AUTO (5) -/////////////////////////////////// - -#define ZTSCI2CMX_DADDRESS 0x51 -// Ä£¿é¼Ä´æÆ÷µØÖ· -#define REG_CMD 0x01 -#define REG_DAT 0x02 -#define REG_RESET 0x03 - #define RESET_OLED 0x06 -#define REG_VERSION 0x1F -#define REG_SLEEP 0x04 - #define SLEEP_ON 0xA5 - #define SLEEP_OFF 0xA1 -#define REG_VCOMH 0x05 -#define REG_STATUS 0x06 - #define STATUS_RUN 0x00 - #define STATUS_RUN 0x00 - #define STATUS_SLEEP 0x01 - #define STATUS_SET_ADDRESS 0x02 - #define STATUS_TEST 0x04 - #define STATUS_BUSY 0x10 - -#define REG_ADDRESS 0x08 -#define REG_BRIGHTNESS 0x0A -#define REG_8X16STR 0x52 -#define REG_OLED_XY 0x60 -#define REG_FILL_AREA 0x61 -#define REG_SCROHOR 0x62 -#define REG_SCROVER 0x63 -#define REG_SCROVERHOR 0x64 - -#define PAGE0 0x00 -#define PAGE1 0x01 -#define PAGE2 0x02 -#define PAGE3 0x03 -#define PAGE4 0x04 -#define PAGE5 0x05 -#define PAGE6 0x06 -#define PAGE7 0x07 - -#define SCROLL_UP 0x01 -#define SCROLL_DOWN 0x00 -#define SCROLL_RIGHT 0x26 -#define SCROLL_LEFT 0x27 -#define SCROLL_VR 0x29 -#define SCROLL_VL 0x2A - -#define FRAMS_2 0x07 -#define FRAMS_3 0x04 -#define FRAMS_4 0x05 -#define FRAMS_5 0x00 -#define FRAMS_25 0x06 -#define FRAMS_64 0x01 -#define FRAMS_128 0x02 -#define FRAMS_256 0x03 - -class ZtLib -{ - private: - - public: - void I2cInit(void); -// Module ZT.SEG8B4A036A FUNCTION - int Seg8b4a036aSleep(uint8_t); - int Seg8b4a036aUnSleep(uint8_t); - int Seg8b4a036aReadState(uint8_t addr); - int Seg8b4a036aReadVersion(uint8_t addr, uint8_t *buf); - int Seg8b4a036aDisplayDec(uint8_t,unsigned short, uint8_t, uint8_t); - int Seg8b4a036aDisplayHex(uint8_t,unsigned short, uint8_t, uint8_t); - int Seg8b4a036aSetBrightness(uint8_t, uint8_t, uint8_t); - int Seg8b4a036aSetAddress(uint8_t); - int Seg8b4a036aDisplayBuff(uint8_t,uint8_t *); -// Module ZT.SC-I2CMx - int ScI2cMxReadState(uint8_t); - int ScI2cMxReadVersion(uint8_t, uint8_t *); - int ScI2cMxSetAddress(uint8_t); - int ScI2cMxSetBrightness(uint8_t, uint8_t); - int ScI2cMxSetVcomH(uint8_t, uint8_t); - int ScI2cMxDisplay8x16Str(uint8_t, uint8_t, uint8_t, const char *); - int ScI2cMxFillArea(uint8_t, uint8_t, uint8_t,uint8_t, uint8_t,uint8_t); - int ScI2cMxScrollingHorizontal(uint8_t, uint8_t, uint8_t, uint8_t,uint8_t); - int ScI2cMxScrollingVertical(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); - int ScI2cMxScrollingVerticalHorizontal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); - int ScI2cMxDeactivateScroll(uint8_t); - int ScI2cMxReset(uint8_t); - int ScI2cMxSetLocation(uint8_t, uint8_t, uint8_t); - void ScI2cMxDisplayDot(uint8_t, const PROGMEM uint8_t* buffer, uint8_t len); - void ScI2cMxDisplayDot16x16(uint8_t, uint8_t, uint8_t, unsigned char *); - void ScI2cMxDisplayArea(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, const char *); -}; - - -extern ZtLib ZT; - -#endif - -- cgit v1.2.3