Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Grove_Serial_LCD by
Diff: SerialLCD.cpp
- 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);
+}
    