From 4ff68b8f1a9706aa2bb936ed541848343602517c Mon Sep 17 00:00:00 2001 From: Stanley Huang Date: Thu, 4 Jul 2013 16:58:54 +0800 Subject: update MultiLCD library --- libraries/MultiLCD/MultiLCD.cpp | 37 ++++++++++++++++++++++++++++++++++++- libraries/MultiLCD/MultiLCD.h | 11 ----------- libraries/MultiLCD/PCD8544.cpp | 19 ++++++++++--------- 3 files changed, 46 insertions(+), 21 deletions(-) (limited to 'libraries') diff --git a/libraries/MultiLCD/MultiLCD.cpp b/libraries/MultiLCD/MultiLCD.cpp index 1856a21..1865cc5 100644 --- a/libraries/MultiLCD/MultiLCD.cpp +++ b/libraries/MultiLCD/MultiLCD.cpp @@ -55,6 +55,14 @@ void LCD_ZTOLED::setCursor(byte column, byte line) 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); @@ -72,6 +80,16 @@ size_t LCD_ZTOLED::write(uint8_t c) 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) { @@ -166,6 +184,13 @@ void LCD_SSD1306::setCursor(byte column, byte line) size_t LCD_SSD1306::write(uint8_t c) { + if (c == '\n') { + setCursor(0, m_row + ((m_font == FONT_SIZE_SMALL) ? 1 : 2)); + return 1; + } else if (c == '\r') { + m_col = 0; + return 1; + } if (m_font == FONT_SIZE_SMALL) { Wire.beginTransmission(_i2caddr); Wire.write(0x40); @@ -181,7 +206,11 @@ size_t LCD_SSD1306::write(uint8_t c) } } Wire.endTransmission(); - m_col += 8; + m_col += 6; + if (m_col >= 128) { + m_col = 0; + m_row ++; + } } else { if (c > 0x20 && c < 0x7f) { c -= 0x21; @@ -231,6 +260,10 @@ size_t LCD_SSD1306::write(uint8_t c) Wire.endTransmission(); } m_col += 9; + if (m_col >= 128) { + m_col = 0; + m_row += 2; + } } return 1; } @@ -456,5 +489,7 @@ void LCD_SSD1306::clear(byte x, byte y, byte width, byte height) Wire.endTransmission(); } } + + setCursor(0, 0); TWBR = twbrbackup; } diff --git a/libraries/MultiLCD/MultiLCD.h b/libraries/MultiLCD/MultiLCD.h index 0809bf6..734ed70 100644 --- a/libraries/MultiLCD/MultiLCD.h +++ b/libraries/MultiLCD/MultiLCD.h @@ -28,7 +28,6 @@ public: virtual void backlight(bool on) {} virtual byte getLines() = 0; virtual byte getCols() = 0; - virtual void changeLine() {} virtual void clearLine(byte line) {} void draw(const PROGMEM byte* buffer, byte x, byte y, byte width, byte height) {} void printInt(uint16_t value, char padding = -1); @@ -53,11 +52,6 @@ public: setCursor(0, line); for (byte i = 14; i > 0; i--) write(' '); } - void changeLine() - { - column = 0; - line ++; - } void draw(const PROGMEM byte* buffer, byte x, byte y, byte width, byte height); private: void writeDigit(byte n); @@ -73,11 +67,6 @@ public: byte getLines() { return 4; } byte getCols() { return 16; } void setCursor(byte column, byte line); - void changeLine() - { - m_column = 0; - m_page += 2; - } size_t write(uint8_t c); //void print(const char* s); void writeDigit(byte n); diff --git a/libraries/MultiLCD/PCD8544.cpp b/libraries/MultiLCD/PCD8544.cpp index 9bd62c5..6b339fe 100644 --- a/libraries/MultiLCD/PCD8544.cpp +++ b/libraries/MultiLCD/PCD8544.cpp @@ -185,19 +185,20 @@ void PCD8544::createChar(unsigned char chr, const unsigned char *glyph) } -#if ARDUINO < 100 -void PCD8544::write(uint8_t chr) -#else size_t PCD8544::write(uint8_t chr) -#endif { // ASCII 7-bit only... - if (chr >= 0x80) { -#if ARDUINO < 100 - return; -#else + if (chr >= 0x7f) { + return 0; + } + + if (chr == '\n') { + column = 0; + line = (line + 1) % (PCD8544_HEIGHT/9 + 1); + return 0; + } else if (chr == '\r') { + column = 0; return 0; -#endif } const unsigned char *glyph; -- cgit v1.2.3