Grove - Serial LCD

Fork of Grove_Serial_LCD by Seeed Studio

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?

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