Grove - Serial LCD

Fork of Grove_Serial_LCD by Seeed Studio

Revision:
1:83ce5e2a368a
Parent:
0:289aecd28ddc
Child:
2:a166e203e4cf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SerialLCD.cpp	Wed Oct 23 02:19:38 2013 +0000
@@ -0,0 +1,197 @@
+/*
+  SerialLCD.h - Serial LCD driver Library
+
+  2010-2013 Copyright (c) Seeed Technology Inc (www.seeedstudio.com)
+  Authors: Jimbo.We, Visweswara R and Frankie.Chu  (Orignially written for Seeeduino)
+
+  This library can be used under Apache License 2.0 or MIT License.
+ */
+
+#include "SerialLCD.h"
+
+//Initialization Commands or Responses
+
+#define SLCD_INIT   0xA3
+#define SLCD_INIT_ACK   0xA5
+#define SLCD_INIT_DONE  0xAA
+
+//WorkingMode Commands or Responses
+#define SLCD_CONTROL_HEADER 0x9F
+#define SLCD_CHAR_HEADER    0xFE
+#define SLCD_CURSOR_HEADER  0xFF
+#define SLCD_CURSOR_ACK     0x5A
+
+#define SLCD_RETURN_HOME    0x61
+#define SLCD_DISPLAY_OFF    0x63
+#define SLCD_DISPLAY_ON     0x64
+#define SLCD_CLEAR_DISPLAY  0x65
+#define SLCD_CURSOR_OFF     0x66
+#define SLCD_CURSOR_ON      0x67
+#define SLCD_BLINK_OFF      0x68
+#define SLCD_BLINK_ON       0x69
+#define SLCD_SCROLL_LEFT    0x6C
+#define SLCD_SCROLL_RIGHT   0x72
+#define SLCD_NO_AUTO_SCROLL 0x6A
+#define SLCD_AUTO_SCROLL    0x6D
+#define SLCD_LEFT_TO_RIGHT  0x70
+#define SLCD_RIGHT_TO_LEFT  0x71
+#define SLCD_POWER_ON       0x83
+#define SLCD_POWER_OFF      0x82
+#define SLCD_INVALIDCOMMAND 0x46
+#define SLCD_BACKLIGHT_ON   0x81
+#define SLCD_BACKLIGHT_OFF  0x80
+
+SerialLCD::SerialLCD(PinName rx, PinName tx) : Serial(rx,tx)
+{
+    Serial::baud(9600);
+}
+
+/********** High level commands, for the user! **********/
+
+/// Initialize the Serial LCD Driver. SerialLCD Module initiates the communication.
+void SerialLCD::begin()
+{
+    wait_ms(2);
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_POWER_OFF);
+    wait_ms(1);
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_POWER_ON);
+    wait_ms(1);
+    Serial::putc(SLCD_INIT_ACK);
+    while(1) {
+        if (Serial::readable() > 0 &&Serial::getc()==SLCD_INIT_DONE)
+            break;
+    }
+    wait_ms(2);
+}
+/// Clear the display
+void SerialLCD::clear()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_CLEAR_DISPLAY);
+}
+/// Return to home(top-left corner of LCD)
+void SerialLCD::home()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_RETURN_HOME);
+    wait_ms(2); //this command needs more time;
+}
+/// Set Cursor to (Column,Row) Position
+void SerialLCD::setCursor(uint8_t column, uint8_t row)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_CURSOR_HEADER); //cursor header command
+    Serial::putc(column);
+    Serial::putc(row);
+}
+/// Switch the display off without clearing RAM
+void SerialLCD::noDisplay()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_DISPLAY_OFF);
+}
+/// Switch the display on
+void SerialLCD::display()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_DISPLAY_ON);
+}
+/// Switch the underline cursor off
+void SerialLCD::noCursor()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_CURSOR_OFF);
+}
+/// Switch the underline cursor on
+void SerialLCD::cursor()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_CURSOR_ON);
+}
+
+/// Switch off the blinking cursor
+void SerialLCD::noBlink()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_BLINK_OFF);
+}
+/// Switch on the blinking cursor
+void SerialLCD::blink()
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_BLINK_ON);
+}
+/// Scroll the display left without changing the RAM
+void SerialLCD::scrollDisplayLeft(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_SCROLL_LEFT);
+}
+/// Scroll the display right without changing the RAM
+void SerialLCD::scrollDisplayRight(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_SCROLL_RIGHT);
+}
+/// Set the text flow "Left to Right"
+void SerialLCD::leftToRight(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_LEFT_TO_RIGHT);
+}
+/// Set the text flow "Right to Left"
+void SerialLCD::rightToLeft(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_RIGHT_TO_LEFT);
+}
+/// This will 'right justify' text from the cursor
+void SerialLCD::autoscroll(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_AUTO_SCROLL);
+}
+/// This will 'left justify' text from the cursor
+void SerialLCD::noAutoscroll(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_NO_AUTO_SCROLL);
+}
+/// Switch on the LCD power
+void SerialLCD::Power(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_POWER_ON);
+}
+/// Switch off the LCD  power
+void SerialLCD::noPower(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_POWER_OFF);
+}
+/// Switch off the back light
+void SerialLCD::noBacklight(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_BACKLIGHT_OFF);
+}
+/// Switch on the back light
+void SerialLCD::backlight(void)
+{
+    Serial::putc(SLCD_CONTROL_HEADER);
+    Serial::putc(SLCD_BACKLIGHT_ON);
+}
+/// Print char
+void SerialLCD::print(uint8_t b)
+{
+    Serial::putc(SLCD_CHAR_HEADER);
+    Serial::putc(b);
+}
+/// Print char
+void SerialLCD::print(const char b[])
+{
+    Serial::putc(SLCD_CHAR_HEADER);
+    Serial::puts(b);
+}