Grove - Serial LCD
Fork of Grove_Serial_LCD by
SerialLCD.cpp@2:a166e203e4cf, 2013-10-23 (annotated)
- Committer:
- viswesr
- Date:
- Wed Oct 23 02:33:59 2013 +0000
- Revision:
- 2:a166e203e4cf
- Parent:
- 1:83ce5e2a368a
Document update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
seeed | 0:289aecd28ddc | 1 | /* |
seeed | 0:289aecd28ddc | 2 | SerialLCD.h - Serial LCD driver Library |
seeed | 0:289aecd28ddc | 3 | |
viswesr | 1:83ce5e2a368a | 4 | 2010-2013 Copyright (c) Seeed Technology Inc (www.seeedstudio.com) |
viswesr | 1:83ce5e2a368a | 5 | Authors: Jimbo.We, Visweswara R and Frankie.Chu (Orignially written for Seeeduino) |
seeed | 0:289aecd28ddc | 6 | |
viswesr | 1:83ce5e2a368a | 7 | This library can be used under Apache License 2.0 or MIT License. |
viswesr | 1:83ce5e2a368a | 8 | */ |
seeed | 0:289aecd28ddc | 9 | |
seeed | 0:289aecd28ddc | 10 | #include "SerialLCD.h" |
seeed | 0:289aecd28ddc | 11 | |
seeed | 0:289aecd28ddc | 12 | //Initialization Commands or Responses |
seeed | 0:289aecd28ddc | 13 | |
seeed | 0:289aecd28ddc | 14 | #define SLCD_INIT 0xA3 |
seeed | 0:289aecd28ddc | 15 | #define SLCD_INIT_ACK 0xA5 |
seeed | 0:289aecd28ddc | 16 | #define SLCD_INIT_DONE 0xAA |
seeed | 0:289aecd28ddc | 17 | |
seeed | 0:289aecd28ddc | 18 | //WorkingMode Commands or Responses |
seeed | 0:289aecd28ddc | 19 | #define SLCD_CONTROL_HEADER 0x9F |
seeed | 0:289aecd28ddc | 20 | #define SLCD_CHAR_HEADER 0xFE |
seeed | 0:289aecd28ddc | 21 | #define SLCD_CURSOR_HEADER 0xFF |
seeed | 0:289aecd28ddc | 22 | #define SLCD_CURSOR_ACK 0x5A |
seeed | 0:289aecd28ddc | 23 | |
seeed | 0:289aecd28ddc | 24 | #define SLCD_RETURN_HOME 0x61 |
seeed | 0:289aecd28ddc | 25 | #define SLCD_DISPLAY_OFF 0x63 |
seeed | 0:289aecd28ddc | 26 | #define SLCD_DISPLAY_ON 0x64 |
seeed | 0:289aecd28ddc | 27 | #define SLCD_CLEAR_DISPLAY 0x65 |
seeed | 0:289aecd28ddc | 28 | #define SLCD_CURSOR_OFF 0x66 |
seeed | 0:289aecd28ddc | 29 | #define SLCD_CURSOR_ON 0x67 |
seeed | 0:289aecd28ddc | 30 | #define SLCD_BLINK_OFF 0x68 |
seeed | 0:289aecd28ddc | 31 | #define SLCD_BLINK_ON 0x69 |
seeed | 0:289aecd28ddc | 32 | #define SLCD_SCROLL_LEFT 0x6C |
seeed | 0:289aecd28ddc | 33 | #define SLCD_SCROLL_RIGHT 0x72 |
seeed | 0:289aecd28ddc | 34 | #define SLCD_NO_AUTO_SCROLL 0x6A |
seeed | 0:289aecd28ddc | 35 | #define SLCD_AUTO_SCROLL 0x6D |
seeed | 0:289aecd28ddc | 36 | #define SLCD_LEFT_TO_RIGHT 0x70 |
seeed | 0:289aecd28ddc | 37 | #define SLCD_RIGHT_TO_LEFT 0x71 |
seeed | 0:289aecd28ddc | 38 | #define SLCD_POWER_ON 0x83 |
seeed | 0:289aecd28ddc | 39 | #define SLCD_POWER_OFF 0x82 |
seeed | 0:289aecd28ddc | 40 | #define SLCD_INVALIDCOMMAND 0x46 |
seeed | 0:289aecd28ddc | 41 | #define SLCD_BACKLIGHT_ON 0x81 |
seeed | 0:289aecd28ddc | 42 | #define SLCD_BACKLIGHT_OFF 0x80 |
seeed | 0:289aecd28ddc | 43 | |
seeed | 0:289aecd28ddc | 44 | SerialLCD::SerialLCD(PinName rx, PinName tx) : Serial(rx,tx) |
seeed | 0:289aecd28ddc | 45 | { |
seeed | 0:289aecd28ddc | 46 | Serial::baud(9600); |
seeed | 0:289aecd28ddc | 47 | } |
seeed | 0:289aecd28ddc | 48 | |
seeed | 0:289aecd28ddc | 49 | /********** High level commands, for the user! **********/ |
seeed | 0:289aecd28ddc | 50 | |
viswesr | 2:a166e203e4cf | 51 | /// Initialize the Serial LCD Driver. |
seeed | 0:289aecd28ddc | 52 | void SerialLCD::begin() |
seeed | 0:289aecd28ddc | 53 | { |
seeed | 0:289aecd28ddc | 54 | wait_ms(2); |
viswesr | 1:83ce5e2a368a | 55 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 56 | Serial::putc(SLCD_POWER_OFF); |
seeed | 0:289aecd28ddc | 57 | wait_ms(1); |
viswesr | 1:83ce5e2a368a | 58 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 59 | Serial::putc(SLCD_POWER_ON); |
seeed | 0:289aecd28ddc | 60 | wait_ms(1); |
seeed | 0:289aecd28ddc | 61 | Serial::putc(SLCD_INIT_ACK); |
viswesr | 1:83ce5e2a368a | 62 | while(1) { |
seeed | 0:289aecd28ddc | 63 | if (Serial::readable() > 0 &&Serial::getc()==SLCD_INIT_DONE) |
seeed | 0:289aecd28ddc | 64 | break; |
seeed | 0:289aecd28ddc | 65 | } |
seeed | 0:289aecd28ddc | 66 | wait_ms(2); |
seeed | 0:289aecd28ddc | 67 | } |
viswesr | 1:83ce5e2a368a | 68 | /// Clear the display |
seeed | 0:289aecd28ddc | 69 | void SerialLCD::clear() |
seeed | 0:289aecd28ddc | 70 | { |
viswesr | 1:83ce5e2a368a | 71 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 72 | Serial::putc(SLCD_CLEAR_DISPLAY); |
seeed | 0:289aecd28ddc | 73 | } |
viswesr | 1:83ce5e2a368a | 74 | /// Return to home(top-left corner of LCD) |
seeed | 0:289aecd28ddc | 75 | void SerialLCD::home() |
seeed | 0:289aecd28ddc | 76 | { |
seeed | 0:289aecd28ddc | 77 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 78 | Serial::putc(SLCD_RETURN_HOME); |
viswesr | 1:83ce5e2a368a | 79 | wait_ms(2); //this command needs more time; |
seeed | 0:289aecd28ddc | 80 | } |
viswesr | 1:83ce5e2a368a | 81 | /// Set Cursor to (Column,Row) Position |
seeed | 0:289aecd28ddc | 82 | void SerialLCD::setCursor(uint8_t column, uint8_t row) |
seeed | 0:289aecd28ddc | 83 | { |
viswesr | 1:83ce5e2a368a | 84 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 85 | Serial::putc(SLCD_CURSOR_HEADER); //cursor header command |
seeed | 0:289aecd28ddc | 86 | Serial::putc(column); |
seeed | 0:289aecd28ddc | 87 | Serial::putc(row); |
seeed | 0:289aecd28ddc | 88 | } |
viswesr | 1:83ce5e2a368a | 89 | /// Switch the display off without clearing RAM |
viswesr | 1:83ce5e2a368a | 90 | void SerialLCD::noDisplay() |
viswesr | 1:83ce5e2a368a | 91 | { |
viswesr | 1:83ce5e2a368a | 92 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 93 | Serial::putc(SLCD_DISPLAY_OFF); |
viswesr | 1:83ce5e2a368a | 94 | } |
viswesr | 1:83ce5e2a368a | 95 | /// Switch the display on |
viswesr | 1:83ce5e2a368a | 96 | void SerialLCD::display() |
seeed | 0:289aecd28ddc | 97 | { |
seeed | 0:289aecd28ddc | 98 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 99 | Serial::putc(SLCD_DISPLAY_ON); |
seeed | 0:289aecd28ddc | 100 | } |
viswesr | 1:83ce5e2a368a | 101 | /// Switch the underline cursor off |
viswesr | 1:83ce5e2a368a | 102 | void SerialLCD::noCursor() |
seeed | 0:289aecd28ddc | 103 | { |
seeed | 0:289aecd28ddc | 104 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 105 | Serial::putc(SLCD_CURSOR_OFF); |
seeed | 0:289aecd28ddc | 106 | } |
viswesr | 1:83ce5e2a368a | 107 | /// Switch the underline cursor on |
viswesr | 1:83ce5e2a368a | 108 | void SerialLCD::cursor() |
seeed | 0:289aecd28ddc | 109 | { |
seeed | 0:289aecd28ddc | 110 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 111 | Serial::putc(SLCD_CURSOR_ON); |
seeed | 0:289aecd28ddc | 112 | } |
seeed | 0:289aecd28ddc | 113 | |
viswesr | 1:83ce5e2a368a | 114 | /// Switch off the blinking cursor |
viswesr | 1:83ce5e2a368a | 115 | void SerialLCD::noBlink() |
seeed | 0:289aecd28ddc | 116 | { |
seeed | 0:289aecd28ddc | 117 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 118 | Serial::putc(SLCD_BLINK_OFF); |
seeed | 0:289aecd28ddc | 119 | } |
viswesr | 1:83ce5e2a368a | 120 | /// Switch on the blinking cursor |
viswesr | 1:83ce5e2a368a | 121 | void SerialLCD::blink() |
seeed | 0:289aecd28ddc | 122 | { |
seeed | 0:289aecd28ddc | 123 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 124 | Serial::putc(SLCD_BLINK_ON); |
seeed | 0:289aecd28ddc | 125 | } |
viswesr | 1:83ce5e2a368a | 126 | /// Scroll the display left without changing the RAM |
viswesr | 1:83ce5e2a368a | 127 | void SerialLCD::scrollDisplayLeft(void) |
seeed | 0:289aecd28ddc | 128 | { |
seeed | 0:289aecd28ddc | 129 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 130 | Serial::putc(SLCD_SCROLL_LEFT); |
seeed | 0:289aecd28ddc | 131 | } |
viswesr | 1:83ce5e2a368a | 132 | /// Scroll the display right without changing the RAM |
viswesr | 1:83ce5e2a368a | 133 | void SerialLCD::scrollDisplayRight(void) |
seeed | 0:289aecd28ddc | 134 | { |
seeed | 0:289aecd28ddc | 135 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 136 | Serial::putc(SLCD_SCROLL_RIGHT); |
seeed | 0:289aecd28ddc | 137 | } |
viswesr | 1:83ce5e2a368a | 138 | /// Set the text flow "Left to Right" |
viswesr | 1:83ce5e2a368a | 139 | void SerialLCD::leftToRight(void) |
seeed | 0:289aecd28ddc | 140 | { |
seeed | 0:289aecd28ddc | 141 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 142 | Serial::putc(SLCD_LEFT_TO_RIGHT); |
seeed | 0:289aecd28ddc | 143 | } |
viswesr | 1:83ce5e2a368a | 144 | /// Set the text flow "Right to Left" |
viswesr | 1:83ce5e2a368a | 145 | void SerialLCD::rightToLeft(void) |
seeed | 0:289aecd28ddc | 146 | { |
seeed | 0:289aecd28ddc | 147 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 148 | Serial::putc(SLCD_RIGHT_TO_LEFT); |
seeed | 0:289aecd28ddc | 149 | } |
viswesr | 1:83ce5e2a368a | 150 | /// This will 'right justify' text from the cursor |
viswesr | 1:83ce5e2a368a | 151 | void SerialLCD::autoscroll(void) |
seeed | 0:289aecd28ddc | 152 | { |
seeed | 0:289aecd28ddc | 153 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 154 | Serial::putc(SLCD_AUTO_SCROLL); |
seeed | 0:289aecd28ddc | 155 | } |
viswesr | 1:83ce5e2a368a | 156 | /// This will 'left justify' text from the cursor |
viswesr | 1:83ce5e2a368a | 157 | void SerialLCD::noAutoscroll(void) |
seeed | 0:289aecd28ddc | 158 | { |
seeed | 0:289aecd28ddc | 159 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 160 | Serial::putc(SLCD_NO_AUTO_SCROLL); |
seeed | 0:289aecd28ddc | 161 | } |
viswesr | 1:83ce5e2a368a | 162 | /// Switch on the LCD power |
seeed | 0:289aecd28ddc | 163 | void SerialLCD::Power(void) |
seeed | 0:289aecd28ddc | 164 | { |
viswesr | 1:83ce5e2a368a | 165 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 166 | Serial::putc(SLCD_POWER_ON); |
seeed | 0:289aecd28ddc | 167 | } |
viswesr | 1:83ce5e2a368a | 168 | /// Switch off the LCD power |
seeed | 0:289aecd28ddc | 169 | void SerialLCD::noPower(void) |
seeed | 0:289aecd28ddc | 170 | { |
viswesr | 1:83ce5e2a368a | 171 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 172 | Serial::putc(SLCD_POWER_OFF); |
seeed | 0:289aecd28ddc | 173 | } |
viswesr | 1:83ce5e2a368a | 174 | /// Switch off the back light |
seeed | 0:289aecd28ddc | 175 | void SerialLCD::noBacklight(void) |
seeed | 0:289aecd28ddc | 176 | { |
viswesr | 1:83ce5e2a368a | 177 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 178 | Serial::putc(SLCD_BACKLIGHT_OFF); |
seeed | 0:289aecd28ddc | 179 | } |
viswesr | 1:83ce5e2a368a | 180 | /// Switch on the back light |
seeed | 0:289aecd28ddc | 181 | void SerialLCD::backlight(void) |
seeed | 0:289aecd28ddc | 182 | { |
viswesr | 1:83ce5e2a368a | 183 | Serial::putc(SLCD_CONTROL_HEADER); |
viswesr | 1:83ce5e2a368a | 184 | Serial::putc(SLCD_BACKLIGHT_ON); |
seeed | 0:289aecd28ddc | 185 | } |
viswesr | 1:83ce5e2a368a | 186 | /// Print char |
seeed | 0:289aecd28ddc | 187 | void SerialLCD::print(uint8_t b) |
seeed | 0:289aecd28ddc | 188 | { |
seeed | 0:289aecd28ddc | 189 | Serial::putc(SLCD_CHAR_HEADER); |
seeed | 0:289aecd28ddc | 190 | Serial::putc(b); |
seeed | 0:289aecd28ddc | 191 | } |
viswesr | 2:a166e203e4cf | 192 | /// Print char |
seeed | 0:289aecd28ddc | 193 | void SerialLCD::print(const char b[]) |
seeed | 0:289aecd28ddc | 194 | { |
seeed | 0:289aecd28ddc | 195 | Serial::putc(SLCD_CHAR_HEADER); |
seeed | 0:289aecd28ddc | 196 | Serial::puts(b); |
seeed | 0:289aecd28ddc | 197 | } |