Removed example code and keep only the library.

Dependents:   Arch_GroveSerialLCD_Ex1 Arch_GroveSerialLCD_Ex2

Fork of Grove_Serial_LCD by Seeed Studio

Committer:
seeed
Date:
Mon Sep 23 02:15:27 2013 +0000
Revision:
0:289aecd28ddc
Grove - Serial LCD example

Who changed what in which revision?

UserRevisionLine numberNew 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 }