Removed example code and keep only the library.
Dependents: Arch_GroveSerialLCD_Ex1 Arch_GroveSerialLCD_Ex2
Fork of Grove_Serial_LCD by
SerialLCD/SerialLCD.cpp@0:289aecd28ddc, 2013-09-23 (annotated)
- Committer:
- seeed
- Date:
- Mon Sep 23 02:15:27 2013 +0000
- Revision:
- 0:289aecd28ddc
Grove - Serial LCD example
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 | 2010 Copyright (c) Seeed Technology Inc. All right reserved. |
seeed | 0:289aecd28ddc | 4 | |
seeed | 0:289aecd28ddc | 5 | Original Author: Jimbo.We |
seeed | 0:289aecd28ddc | 6 | Contribution: Visweswara R |
seeed | 0:289aecd28ddc | 7 | |
seeed | 0:289aecd28ddc | 8 | This library is free software; you can redistribute it and/or |
seeed | 0:289aecd28ddc | 9 | modify it under the terms of the GNU Lesser General Public |
seeed | 0:289aecd28ddc | 10 | License as published by the Free Software Foundation; either |
seeed | 0:289aecd28ddc | 11 | version 2.1 of the License, or (at your option) any later version. |
seeed | 0:289aecd28ddc | 12 | |
seeed | 0:289aecd28ddc | 13 | This library is distributed in the hope that it will be useful, |
seeed | 0:289aecd28ddc | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
seeed | 0:289aecd28ddc | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
seeed | 0:289aecd28ddc | 16 | Lesser General Public License for more details. |
seeed | 0:289aecd28ddc | 17 | |
seeed | 0:289aecd28ddc | 18 | You should have received a copy of the GNU Lesser General Public |
seeed | 0:289aecd28ddc | 19 | License along with this library; if not, write to the Free Software |
seeed | 0:289aecd28ddc | 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
seeed | 0:289aecd28ddc | 21 | */ |
seeed | 0:289aecd28ddc | 22 | |
seeed | 0:289aecd28ddc | 23 | #include "SerialLCD.h" |
seeed | 0:289aecd28ddc | 24 | |
seeed | 0:289aecd28ddc | 25 | //Initialization Commands or Responses |
seeed | 0:289aecd28ddc | 26 | |
seeed | 0:289aecd28ddc | 27 | #define SLCD_INIT 0xA3 |
seeed | 0:289aecd28ddc | 28 | #define SLCD_INIT_ACK 0xA5 |
seeed | 0:289aecd28ddc | 29 | #define SLCD_INIT_DONE 0xAA |
seeed | 0:289aecd28ddc | 30 | |
seeed | 0:289aecd28ddc | 31 | //WorkingMode Commands or Responses |
seeed | 0:289aecd28ddc | 32 | #define SLCD_CONTROL_HEADER 0x9F |
seeed | 0:289aecd28ddc | 33 | #define SLCD_CHAR_HEADER 0xFE |
seeed | 0:289aecd28ddc | 34 | #define SLCD_CURSOR_HEADER 0xFF |
seeed | 0:289aecd28ddc | 35 | #define SLCD_CURSOR_ACK 0x5A |
seeed | 0:289aecd28ddc | 36 | |
seeed | 0:289aecd28ddc | 37 | #define SLCD_RETURN_HOME 0x61 |
seeed | 0:289aecd28ddc | 38 | #define SLCD_DISPLAY_OFF 0x63 |
seeed | 0:289aecd28ddc | 39 | #define SLCD_DISPLAY_ON 0x64 |
seeed | 0:289aecd28ddc | 40 | #define SLCD_CLEAR_DISPLAY 0x65 |
seeed | 0:289aecd28ddc | 41 | #define SLCD_CURSOR_OFF 0x66 |
seeed | 0:289aecd28ddc | 42 | #define SLCD_CURSOR_ON 0x67 |
seeed | 0:289aecd28ddc | 43 | #define SLCD_BLINK_OFF 0x68 |
seeed | 0:289aecd28ddc | 44 | #define SLCD_BLINK_ON 0x69 |
seeed | 0:289aecd28ddc | 45 | #define SLCD_SCROLL_LEFT 0x6C |
seeed | 0:289aecd28ddc | 46 | #define SLCD_SCROLL_RIGHT 0x72 |
seeed | 0:289aecd28ddc | 47 | #define SLCD_NO_AUTO_SCROLL 0x6A |
seeed | 0:289aecd28ddc | 48 | #define SLCD_AUTO_SCROLL 0x6D |
seeed | 0:289aecd28ddc | 49 | #define SLCD_LEFT_TO_RIGHT 0x70 |
seeed | 0:289aecd28ddc | 50 | #define SLCD_RIGHT_TO_LEFT 0x71 |
seeed | 0:289aecd28ddc | 51 | #define SLCD_POWER_ON 0x83 |
seeed | 0:289aecd28ddc | 52 | #define SLCD_POWER_OFF 0x82 |
seeed | 0:289aecd28ddc | 53 | #define SLCD_INVALIDCOMMAND 0x46 |
seeed | 0:289aecd28ddc | 54 | #define SLCD_BACKLIGHT_ON 0x81 |
seeed | 0:289aecd28ddc | 55 | #define SLCD_BACKLIGHT_OFF 0x80 |
seeed | 0:289aecd28ddc | 56 | |
seeed | 0:289aecd28ddc | 57 | SerialLCD::SerialLCD(PinName rx, PinName tx) : Serial(rx,tx) |
seeed | 0:289aecd28ddc | 58 | { |
seeed | 0:289aecd28ddc | 59 | Serial::baud(9600); |
seeed | 0:289aecd28ddc | 60 | } |
seeed | 0:289aecd28ddc | 61 | |
seeed | 0:289aecd28ddc | 62 | /********** High level commands, for the user! **********/ |
seeed | 0:289aecd28ddc | 63 | |
seeed | 0:289aecd28ddc | 64 | // Initialize the Serial LCD Driver. SerialLCD Module initiates the communication. |
seeed | 0:289aecd28ddc | 65 | void SerialLCD::begin() |
seeed | 0:289aecd28ddc | 66 | { |
seeed | 0:289aecd28ddc | 67 | wait_ms(2); |
seeed | 0:289aecd28ddc | 68 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 69 | Serial::putc(SLCD_POWER_OFF); |
seeed | 0:289aecd28ddc | 70 | wait_ms(1); |
seeed | 0:289aecd28ddc | 71 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 72 | Serial::putc(SLCD_POWER_ON); |
seeed | 0:289aecd28ddc | 73 | wait_ms(1); |
seeed | 0:289aecd28ddc | 74 | Serial::putc(SLCD_INIT_ACK); |
seeed | 0:289aecd28ddc | 75 | while(1) |
seeed | 0:289aecd28ddc | 76 | { |
seeed | 0:289aecd28ddc | 77 | if (Serial::readable() > 0 &&Serial::getc()==SLCD_INIT_DONE) |
seeed | 0:289aecd28ddc | 78 | break; |
seeed | 0:289aecd28ddc | 79 | } |
seeed | 0:289aecd28ddc | 80 | wait_ms(2); |
seeed | 0:289aecd28ddc | 81 | } |
seeed | 0:289aecd28ddc | 82 | |
seeed | 0:289aecd28ddc | 83 | // Clear the display |
seeed | 0:289aecd28ddc | 84 | void SerialLCD::clear() |
seeed | 0:289aecd28ddc | 85 | { |
seeed | 0:289aecd28ddc | 86 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 87 | Serial::putc(SLCD_CLEAR_DISPLAY); |
seeed | 0:289aecd28ddc | 88 | } |
seeed | 0:289aecd28ddc | 89 | |
seeed | 0:289aecd28ddc | 90 | // Return to home(top-left corner of LCD) |
seeed | 0:289aecd28ddc | 91 | void SerialLCD::home() |
seeed | 0:289aecd28ddc | 92 | { |
seeed | 0:289aecd28ddc | 93 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 94 | Serial::putc(SLCD_RETURN_HOME); |
seeed | 0:289aecd28ddc | 95 | wait_ms(2);//this command needs more time; |
seeed | 0:289aecd28ddc | 96 | } |
seeed | 0:289aecd28ddc | 97 | |
seeed | 0:289aecd28ddc | 98 | // Set Cursor to (Column,Row) Position |
seeed | 0:289aecd28ddc | 99 | void SerialLCD::setCursor(uint8_t column, uint8_t row) |
seeed | 0:289aecd28ddc | 100 | { |
seeed | 0:289aecd28ddc | 101 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 102 | Serial::putc(SLCD_CURSOR_HEADER); //cursor header command |
seeed | 0:289aecd28ddc | 103 | Serial::putc(column); |
seeed | 0:289aecd28ddc | 104 | Serial::putc(row); |
seeed | 0:289aecd28ddc | 105 | } |
seeed | 0:289aecd28ddc | 106 | |
seeed | 0:289aecd28ddc | 107 | // Switch the display off without clearing RAM |
seeed | 0:289aecd28ddc | 108 | void SerialLCD::noDisplay() |
seeed | 0:289aecd28ddc | 109 | { |
seeed | 0:289aecd28ddc | 110 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 111 | Serial::putc(SLCD_DISPLAY_OFF); |
seeed | 0:289aecd28ddc | 112 | } |
seeed | 0:289aecd28ddc | 113 | |
seeed | 0:289aecd28ddc | 114 | // Switch the display on |
seeed | 0:289aecd28ddc | 115 | void SerialLCD::display() |
seeed | 0:289aecd28ddc | 116 | { |
seeed | 0:289aecd28ddc | 117 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 118 | Serial::putc(SLCD_DISPLAY_ON); |
seeed | 0:289aecd28ddc | 119 | } |
seeed | 0:289aecd28ddc | 120 | |
seeed | 0:289aecd28ddc | 121 | // Switch the underline cursor off |
seeed | 0:289aecd28ddc | 122 | void SerialLCD::noCursor() |
seeed | 0:289aecd28ddc | 123 | { |
seeed | 0:289aecd28ddc | 124 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 125 | Serial::putc(SLCD_CURSOR_OFF); |
seeed | 0:289aecd28ddc | 126 | } |
seeed | 0:289aecd28ddc | 127 | |
seeed | 0:289aecd28ddc | 128 | // Switch the underline cursor on |
seeed | 0:289aecd28ddc | 129 | void SerialLCD::cursor() |
seeed | 0:289aecd28ddc | 130 | { |
seeed | 0:289aecd28ddc | 131 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 132 | Serial::putc(SLCD_CURSOR_ON); |
seeed | 0:289aecd28ddc | 133 | } |
seeed | 0:289aecd28ddc | 134 | |
seeed | 0:289aecd28ddc | 135 | // Switch off the blinking cursor |
seeed | 0:289aecd28ddc | 136 | void SerialLCD::noBlink() |
seeed | 0:289aecd28ddc | 137 | { |
seeed | 0:289aecd28ddc | 138 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 139 | Serial::putc(SLCD_BLINK_OFF); |
seeed | 0:289aecd28ddc | 140 | } |
seeed | 0:289aecd28ddc | 141 | |
seeed | 0:289aecd28ddc | 142 | // Switch on the blinking cursor |
seeed | 0:289aecd28ddc | 143 | void SerialLCD::blink() |
seeed | 0:289aecd28ddc | 144 | { |
seeed | 0:289aecd28ddc | 145 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 146 | Serial::putc(SLCD_BLINK_ON); |
seeed | 0:289aecd28ddc | 147 | } |
seeed | 0:289aecd28ddc | 148 | |
seeed | 0:289aecd28ddc | 149 | // Scroll the display left without changing the RAM |
seeed | 0:289aecd28ddc | 150 | void SerialLCD::scrollDisplayLeft(void) |
seeed | 0:289aecd28ddc | 151 | { |
seeed | 0:289aecd28ddc | 152 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 153 | Serial::putc(SLCD_SCROLL_LEFT); |
seeed | 0:289aecd28ddc | 154 | } |
seeed | 0:289aecd28ddc | 155 | |
seeed | 0:289aecd28ddc | 156 | // Scroll the display right without changing the RAM |
seeed | 0:289aecd28ddc | 157 | void SerialLCD::scrollDisplayRight(void) |
seeed | 0:289aecd28ddc | 158 | { |
seeed | 0:289aecd28ddc | 159 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 160 | Serial::putc(SLCD_SCROLL_RIGHT); |
seeed | 0:289aecd28ddc | 161 | } |
seeed | 0:289aecd28ddc | 162 | |
seeed | 0:289aecd28ddc | 163 | // Set the text flow "Left to Right" |
seeed | 0:289aecd28ddc | 164 | void SerialLCD::leftToRight(void) |
seeed | 0:289aecd28ddc | 165 | { |
seeed | 0:289aecd28ddc | 166 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 167 | Serial::putc(SLCD_LEFT_TO_RIGHT); |
seeed | 0:289aecd28ddc | 168 | } |
seeed | 0:289aecd28ddc | 169 | |
seeed | 0:289aecd28ddc | 170 | // Set the text flow "Right to Left" |
seeed | 0:289aecd28ddc | 171 | void SerialLCD::rightToLeft(void) |
seeed | 0:289aecd28ddc | 172 | { |
seeed | 0:289aecd28ddc | 173 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 174 | Serial::putc(SLCD_RIGHT_TO_LEFT); |
seeed | 0:289aecd28ddc | 175 | } |
seeed | 0:289aecd28ddc | 176 | |
seeed | 0:289aecd28ddc | 177 | // This will 'right justify' text from the cursor |
seeed | 0:289aecd28ddc | 178 | void SerialLCD::autoscroll(void) |
seeed | 0:289aecd28ddc | 179 | { |
seeed | 0:289aecd28ddc | 180 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 181 | Serial::putc(SLCD_AUTO_SCROLL); |
seeed | 0:289aecd28ddc | 182 | } |
seeed | 0:289aecd28ddc | 183 | |
seeed | 0:289aecd28ddc | 184 | // This will 'left justify' text from the cursor |
seeed | 0:289aecd28ddc | 185 | void SerialLCD::noAutoscroll(void) |
seeed | 0:289aecd28ddc | 186 | { |
seeed | 0:289aecd28ddc | 187 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 188 | Serial::putc(SLCD_NO_AUTO_SCROLL); |
seeed | 0:289aecd28ddc | 189 | } |
seeed | 0:289aecd28ddc | 190 | void SerialLCD::Power(void) |
seeed | 0:289aecd28ddc | 191 | { |
seeed | 0:289aecd28ddc | 192 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 193 | Serial::putc(SLCD_POWER_ON); |
seeed | 0:289aecd28ddc | 194 | } |
seeed | 0:289aecd28ddc | 195 | void SerialLCD::noPower(void) |
seeed | 0:289aecd28ddc | 196 | { |
seeed | 0:289aecd28ddc | 197 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 198 | Serial::putc(SLCD_POWER_OFF); |
seeed | 0:289aecd28ddc | 199 | } |
seeed | 0:289aecd28ddc | 200 | //Turn off the backlight |
seeed | 0:289aecd28ddc | 201 | void SerialLCD::noBacklight(void) |
seeed | 0:289aecd28ddc | 202 | { |
seeed | 0:289aecd28ddc | 203 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 204 | Serial::putc(SLCD_BACKLIGHT_OFF); |
seeed | 0:289aecd28ddc | 205 | } |
seeed | 0:289aecd28ddc | 206 | //Turn on the back light |
seeed | 0:289aecd28ddc | 207 | void SerialLCD::backlight(void) |
seeed | 0:289aecd28ddc | 208 | { |
seeed | 0:289aecd28ddc | 209 | Serial::putc(SLCD_CONTROL_HEADER); |
seeed | 0:289aecd28ddc | 210 | Serial::putc(SLCD_BACKLIGHT_ON); |
seeed | 0:289aecd28ddc | 211 | } |
seeed | 0:289aecd28ddc | 212 | // Print Commands |
seeed | 0:289aecd28ddc | 213 | |
seeed | 0:289aecd28ddc | 214 | void SerialLCD::print(uint8_t b) |
seeed | 0:289aecd28ddc | 215 | { |
seeed | 0:289aecd28ddc | 216 | Serial::putc(SLCD_CHAR_HEADER); |
seeed | 0:289aecd28ddc | 217 | Serial::putc(b); |
seeed | 0:289aecd28ddc | 218 | } |
seeed | 0:289aecd28ddc | 219 | void SerialLCD::print(const char b[]) |
seeed | 0:289aecd28ddc | 220 | { |
seeed | 0:289aecd28ddc | 221 | Serial::putc(SLCD_CHAR_HEADER); |
seeed | 0:289aecd28ddc | 222 | Serial::puts(b); |
seeed | 0:289aecd28ddc | 223 | } |
seeed | 0:289aecd28ddc | 224 | |
seeed | 0:289aecd28ddc | 225 | void SerialLCD::print(unsigned long n, uint8_t base) |
seeed | 0:289aecd28ddc | 226 | { |
seeed | 0:289aecd28ddc | 227 | unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. |
seeed | 0:289aecd28ddc | 228 | unsigned long i = 0; |
seeed | 0:289aecd28ddc | 229 | |
seeed | 0:289aecd28ddc | 230 | if (base == 0) print(n); |
seeed | 0:289aecd28ddc | 231 | |
seeed | 0:289aecd28ddc | 232 | else if(base!=0) |
seeed | 0:289aecd28ddc | 233 | { |
seeed | 0:289aecd28ddc | 234 | if (n == 0) { |
seeed | 0:289aecd28ddc | 235 | print('0'); |
seeed | 0:289aecd28ddc | 236 | return; |
seeed | 0:289aecd28ddc | 237 | } |
seeed | 0:289aecd28ddc | 238 | |
seeed | 0:289aecd28ddc | 239 | while (n > 0) { |
seeed | 0:289aecd28ddc | 240 | buf[i++] = n % base; |
seeed | 0:289aecd28ddc | 241 | n /= base; |
seeed | 0:289aecd28ddc | 242 | } |
seeed | 0:289aecd28ddc | 243 | |
seeed | 0:289aecd28ddc | 244 | for (; i > 0; i--) |
seeed | 0:289aecd28ddc | 245 | print((char) (buf[i - 1] < 10 ? |
seeed | 0:289aecd28ddc | 246 | '0' + buf[i - 1] : |
seeed | 0:289aecd28ddc | 247 | 'A' + buf[i - 1] - 10)); |
seeed | 0:289aecd28ddc | 248 | } |
seeed | 0:289aecd28ddc | 249 | } |