Yuji Notsu
/
Groove-Base-Shield
コネクタ4 : LED コネクタ7 : Buzzer コネクタ13 : Relay コネクタUART:Serial LCD 4つを動かしています
SerialLCD.cpp@0:3acc8fa91b79, 2014-01-16 (annotated)
- Committer:
- y_notsu
- Date:
- Thu Jan 16 13:27:49 2014 +0000
- Revision:
- 0:3acc8fa91b79
LPC800 MAX?Grove-Base Shield???????????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
y_notsu | 0:3acc8fa91b79 | 1 | /* |
y_notsu | 0:3acc8fa91b79 | 2 | SerialLCD.h - Serial LCD driver Library |
y_notsu | 0:3acc8fa91b79 | 3 | 2010 Copyright (c) Seeed Technology Inc. All right reserved. |
y_notsu | 0:3acc8fa91b79 | 4 | |
y_notsu | 0:3acc8fa91b79 | 5 | Original Author: Jimbo.We |
y_notsu | 0:3acc8fa91b79 | 6 | Contribution: Visweswara R |
y_notsu | 0:3acc8fa91b79 | 7 | |
y_notsu | 0:3acc8fa91b79 | 8 | This library is free software; you can redistribute it and/or |
y_notsu | 0:3acc8fa91b79 | 9 | modify it under the terms of the GNU Lesser General Public |
y_notsu | 0:3acc8fa91b79 | 10 | License as published by the Free Software Foundation; either |
y_notsu | 0:3acc8fa91b79 | 11 | version 2.1 of the License, or (at your option) any later version. |
y_notsu | 0:3acc8fa91b79 | 12 | |
y_notsu | 0:3acc8fa91b79 | 13 | This library is distributed in the hope that it will be useful, |
y_notsu | 0:3acc8fa91b79 | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
y_notsu | 0:3acc8fa91b79 | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
y_notsu | 0:3acc8fa91b79 | 16 | Lesser General Public License for more details. |
y_notsu | 0:3acc8fa91b79 | 17 | |
y_notsu | 0:3acc8fa91b79 | 18 | You should have received a copy of the GNU Lesser General Public |
y_notsu | 0:3acc8fa91b79 | 19 | License along with this library; if not, write to the Free Software |
y_notsu | 0:3acc8fa91b79 | 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
y_notsu | 0:3acc8fa91b79 | 21 | */ |
y_notsu | 0:3acc8fa91b79 | 22 | #include "mbed.h" |
y_notsu | 0:3acc8fa91b79 | 23 | #include "SerialLCD.h" |
y_notsu | 0:3acc8fa91b79 | 24 | /* |
y_notsu | 0:3acc8fa91b79 | 25 | SerialLCD::SerialLCD(uint8_t rx, uint8_t tx):SoftwareSerial(rx,tx) |
y_notsu | 0:3acc8fa91b79 | 26 | { |
y_notsu | 0:3acc8fa91b79 | 27 | |
y_notsu | 0:3acc8fa91b79 | 28 | } |
y_notsu | 0:3acc8fa91b79 | 29 | */ |
y_notsu | 0:3acc8fa91b79 | 30 | /********** High level commands, for the user! **********/ |
y_notsu | 0:3acc8fa91b79 | 31 | /* |
y_notsu | 0:3acc8fa91b79 | 32 | // Initialize the Serial LCD Driver. SerialLCD Module initiates the communication. |
y_notsu | 0:3acc8fa91b79 | 33 | void SerialLCD::begin() |
y_notsu | 0:3acc8fa91b79 | 34 | { |
y_notsu | 0:3acc8fa91b79 | 35 | SoftwareSerial::begin(9600); |
y_notsu | 0:3acc8fa91b79 | 36 | delay(2); |
y_notsu | 0:3acc8fa91b79 | 37 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 38 | SoftwareSerial::write(SLCD_POWER_OFF); |
y_notsu | 0:3acc8fa91b79 | 39 | delay(1); |
y_notsu | 0:3acc8fa91b79 | 40 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 41 | SoftwareSerial::write(SLCD_POWER_ON); |
y_notsu | 0:3acc8fa91b79 | 42 | delay(1); |
y_notsu | 0:3acc8fa91b79 | 43 | SoftwareSerial::write(SLCD_INIT_ACK); |
y_notsu | 0:3acc8fa91b79 | 44 | while(1) |
y_notsu | 0:3acc8fa91b79 | 45 | { |
y_notsu | 0:3acc8fa91b79 | 46 | if (SoftwareSerial::available() > 0 &&SoftwareSerial::read()==SLCD_INIT_DONE) |
y_notsu | 0:3acc8fa91b79 | 47 | break; |
y_notsu | 0:3acc8fa91b79 | 48 | } |
y_notsu | 0:3acc8fa91b79 | 49 | delay(2); |
y_notsu | 0:3acc8fa91b79 | 50 | } |
y_notsu | 0:3acc8fa91b79 | 51 | |
y_notsu | 0:3acc8fa91b79 | 52 | // Clear the display |
y_notsu | 0:3acc8fa91b79 | 53 | void SerialLCD::clear() |
y_notsu | 0:3acc8fa91b79 | 54 | { |
y_notsu | 0:3acc8fa91b79 | 55 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 56 | SoftwareSerial::write(SLCD_CLEAR_DISPLAY); |
y_notsu | 0:3acc8fa91b79 | 57 | } |
y_notsu | 0:3acc8fa91b79 | 58 | |
y_notsu | 0:3acc8fa91b79 | 59 | // Return to home(top-left corner of LCD) |
y_notsu | 0:3acc8fa91b79 | 60 | void SerialLCD::home() |
y_notsu | 0:3acc8fa91b79 | 61 | { |
y_notsu | 0:3acc8fa91b79 | 62 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 63 | SoftwareSerial::write(SLCD_RETURN_HOME); |
y_notsu | 0:3acc8fa91b79 | 64 | delay(2);//this command needs more time; |
y_notsu | 0:3acc8fa91b79 | 65 | } |
y_notsu | 0:3acc8fa91b79 | 66 | |
y_notsu | 0:3acc8fa91b79 | 67 | // Set Cursor to (Column,Row) Position |
y_notsu | 0:3acc8fa91b79 | 68 | void SerialLCD::setCursor(uint8_t column, uint8_t row) |
y_notsu | 0:3acc8fa91b79 | 69 | { |
y_notsu | 0:3acc8fa91b79 | 70 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 71 | SoftwareSerial::write(SLCD_CURSOR_HEADER); //cursor header command |
y_notsu | 0:3acc8fa91b79 | 72 | SoftwareSerial::write(column); |
y_notsu | 0:3acc8fa91b79 | 73 | SoftwareSerial::write(row); |
y_notsu | 0:3acc8fa91b79 | 74 | } |
y_notsu | 0:3acc8fa91b79 | 75 | |
y_notsu | 0:3acc8fa91b79 | 76 | // Switch the display off without clearing RAM |
y_notsu | 0:3acc8fa91b79 | 77 | void SerialLCD::noDisplay() |
y_notsu | 0:3acc8fa91b79 | 78 | { |
y_notsu | 0:3acc8fa91b79 | 79 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 80 | SoftwareSerial::write(SLCD_DISPLAY_OFF); |
y_notsu | 0:3acc8fa91b79 | 81 | } |
y_notsu | 0:3acc8fa91b79 | 82 | |
y_notsu | 0:3acc8fa91b79 | 83 | // Switch the display on |
y_notsu | 0:3acc8fa91b79 | 84 | void SerialLCD::display() |
y_notsu | 0:3acc8fa91b79 | 85 | { |
y_notsu | 0:3acc8fa91b79 | 86 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 87 | SoftwareSerial::write(SLCD_DISPLAY_ON); |
y_notsu | 0:3acc8fa91b79 | 88 | } |
y_notsu | 0:3acc8fa91b79 | 89 | |
y_notsu | 0:3acc8fa91b79 | 90 | // Switch the underline cursor off |
y_notsu | 0:3acc8fa91b79 | 91 | void SerialLCD::noCursor() |
y_notsu | 0:3acc8fa91b79 | 92 | { |
y_notsu | 0:3acc8fa91b79 | 93 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 94 | SoftwareSerial::write(SLCD_CURSOR_OFF); |
y_notsu | 0:3acc8fa91b79 | 95 | } |
y_notsu | 0:3acc8fa91b79 | 96 | |
y_notsu | 0:3acc8fa91b79 | 97 | // Switch the underline cursor on |
y_notsu | 0:3acc8fa91b79 | 98 | void SerialLCD::cursor() |
y_notsu | 0:3acc8fa91b79 | 99 | { |
y_notsu | 0:3acc8fa91b79 | 100 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 101 | SoftwareSerial::write(SLCD_CURSOR_ON); |
y_notsu | 0:3acc8fa91b79 | 102 | } |
y_notsu | 0:3acc8fa91b79 | 103 | |
y_notsu | 0:3acc8fa91b79 | 104 | // Switch off the blinking cursor |
y_notsu | 0:3acc8fa91b79 | 105 | void SerialLCD::noBlink() |
y_notsu | 0:3acc8fa91b79 | 106 | { |
y_notsu | 0:3acc8fa91b79 | 107 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 108 | SoftwareSerial::write(SLCD_BLINK_OFF); |
y_notsu | 0:3acc8fa91b79 | 109 | } |
y_notsu | 0:3acc8fa91b79 | 110 | |
y_notsu | 0:3acc8fa91b79 | 111 | // Switch on the blinking cursor |
y_notsu | 0:3acc8fa91b79 | 112 | void SerialLCD::blink() |
y_notsu | 0:3acc8fa91b79 | 113 | { |
y_notsu | 0:3acc8fa91b79 | 114 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 115 | SoftwareSerial::write(SLCD_BLINK_ON); |
y_notsu | 0:3acc8fa91b79 | 116 | } |
y_notsu | 0:3acc8fa91b79 | 117 | |
y_notsu | 0:3acc8fa91b79 | 118 | // Scroll the display left without changing the RAM |
y_notsu | 0:3acc8fa91b79 | 119 | void SerialLCD::scrollDisplayLeft(void) |
y_notsu | 0:3acc8fa91b79 | 120 | { |
y_notsu | 0:3acc8fa91b79 | 121 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 122 | SoftwareSerial::write(SLCD_SCROLL_LEFT); |
y_notsu | 0:3acc8fa91b79 | 123 | } |
y_notsu | 0:3acc8fa91b79 | 124 | |
y_notsu | 0:3acc8fa91b79 | 125 | // Scroll the display right without changing the RAM |
y_notsu | 0:3acc8fa91b79 | 126 | void SerialLCD::scrollDisplayRight(void) |
y_notsu | 0:3acc8fa91b79 | 127 | { |
y_notsu | 0:3acc8fa91b79 | 128 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 129 | SoftwareSerial::write(SLCD_SCROLL_RIGHT); |
y_notsu | 0:3acc8fa91b79 | 130 | } |
y_notsu | 0:3acc8fa91b79 | 131 | |
y_notsu | 0:3acc8fa91b79 | 132 | // Set the text flow "Left to Right" |
y_notsu | 0:3acc8fa91b79 | 133 | void SerialLCD::leftToRight(void) |
y_notsu | 0:3acc8fa91b79 | 134 | { |
y_notsu | 0:3acc8fa91b79 | 135 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 136 | SoftwareSerial::write(SLCD_LEFT_TO_RIGHT); |
y_notsu | 0:3acc8fa91b79 | 137 | } |
y_notsu | 0:3acc8fa91b79 | 138 | |
y_notsu | 0:3acc8fa91b79 | 139 | // Set the text flow "Right to Left" |
y_notsu | 0:3acc8fa91b79 | 140 | void SerialLCD::rightToLeft(void) |
y_notsu | 0:3acc8fa91b79 | 141 | { |
y_notsu | 0:3acc8fa91b79 | 142 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 143 | SoftwareSerial::write(SLCD_RIGHT_TO_LEFT); |
y_notsu | 0:3acc8fa91b79 | 144 | } |
y_notsu | 0:3acc8fa91b79 | 145 | |
y_notsu | 0:3acc8fa91b79 | 146 | // This will 'right justify' text from the cursor |
y_notsu | 0:3acc8fa91b79 | 147 | void SerialLCD::autoscroll(void) |
y_notsu | 0:3acc8fa91b79 | 148 | { |
y_notsu | 0:3acc8fa91b79 | 149 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 150 | SoftwareSerial::write(SLCD_AUTO_SCROLL); |
y_notsu | 0:3acc8fa91b79 | 151 | } |
y_notsu | 0:3acc8fa91b79 | 152 | |
y_notsu | 0:3acc8fa91b79 | 153 | // This will 'left justify' text from the cursor |
y_notsu | 0:3acc8fa91b79 | 154 | void SerialLCD::noAutoscroll(void) |
y_notsu | 0:3acc8fa91b79 | 155 | { |
y_notsu | 0:3acc8fa91b79 | 156 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 157 | SoftwareSerial::write(SLCD_NO_AUTO_SCROLL); |
y_notsu | 0:3acc8fa91b79 | 158 | } |
y_notsu | 0:3acc8fa91b79 | 159 | void SerialLCD::Power(void) |
y_notsu | 0:3acc8fa91b79 | 160 | { |
y_notsu | 0:3acc8fa91b79 | 161 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 162 | SoftwareSerial::write(SLCD_POWER_ON); |
y_notsu | 0:3acc8fa91b79 | 163 | } |
y_notsu | 0:3acc8fa91b79 | 164 | void SerialLCD::noPower(void) |
y_notsu | 0:3acc8fa91b79 | 165 | { |
y_notsu | 0:3acc8fa91b79 | 166 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 167 | SoftwareSerial::write(SLCD_POWER_OFF); |
y_notsu | 0:3acc8fa91b79 | 168 | } |
y_notsu | 0:3acc8fa91b79 | 169 | //Turn off the backlight |
y_notsu | 0:3acc8fa91b79 | 170 | void SerialLCD::noBacklight(void) |
y_notsu | 0:3acc8fa91b79 | 171 | { |
y_notsu | 0:3acc8fa91b79 | 172 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 173 | SoftwareSerial::write(SLCD_BACKLIGHT_OFF); |
y_notsu | 0:3acc8fa91b79 | 174 | } |
y_notsu | 0:3acc8fa91b79 | 175 | //Turn on the back light |
y_notsu | 0:3acc8fa91b79 | 176 | void SerialLCD::backlight(void) |
y_notsu | 0:3acc8fa91b79 | 177 | { |
y_notsu | 0:3acc8fa91b79 | 178 | SoftwareSerial::write(SLCD_CONTROL_HEADER); |
y_notsu | 0:3acc8fa91b79 | 179 | SoftwareSerial::write(SLCD_BACKLIGHT_ON); |
y_notsu | 0:3acc8fa91b79 | 180 | } |
y_notsu | 0:3acc8fa91b79 | 181 | // Print Commands |
y_notsu | 0:3acc8fa91b79 | 182 | |
y_notsu | 0:3acc8fa91b79 | 183 | void SerialLCD::print(uint8_t b) |
y_notsu | 0:3acc8fa91b79 | 184 | { |
y_notsu | 0:3acc8fa91b79 | 185 | SoftwareSerial::write(SLCD_CHAR_HEADER); |
y_notsu | 0:3acc8fa91b79 | 186 | SoftwareSerial::write(b); |
y_notsu | 0:3acc8fa91b79 | 187 | } |
y_notsu | 0:3acc8fa91b79 | 188 | void SerialLCD::print(const char b[]) |
y_notsu | 0:3acc8fa91b79 | 189 | { |
y_notsu | 0:3acc8fa91b79 | 190 | SoftwareSerial::write(SLCD_CHAR_HEADER); |
y_notsu | 0:3acc8fa91b79 | 191 | SoftwareSerial::write(b); |
y_notsu | 0:3acc8fa91b79 | 192 | } |
y_notsu | 0:3acc8fa91b79 | 193 | |
y_notsu | 0:3acc8fa91b79 | 194 | void SerialLCD::print(unsigned long n, uint8_t base) |
y_notsu | 0:3acc8fa91b79 | 195 | { |
y_notsu | 0:3acc8fa91b79 | 196 | unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. |
y_notsu | 0:3acc8fa91b79 | 197 | unsigned long i = 0; |
y_notsu | 0:3acc8fa91b79 | 198 | |
y_notsu | 0:3acc8fa91b79 | 199 | if (base == 0) print(n); |
y_notsu | 0:3acc8fa91b79 | 200 | |
y_notsu | 0:3acc8fa91b79 | 201 | else if(base!=0) |
y_notsu | 0:3acc8fa91b79 | 202 | { |
y_notsu | 0:3acc8fa91b79 | 203 | if (n == 0) { |
y_notsu | 0:3acc8fa91b79 | 204 | print('0'); |
y_notsu | 0:3acc8fa91b79 | 205 | return; |
y_notsu | 0:3acc8fa91b79 | 206 | } |
y_notsu | 0:3acc8fa91b79 | 207 | |
y_notsu | 0:3acc8fa91b79 | 208 | while (n > 0) { |
y_notsu | 0:3acc8fa91b79 | 209 | buf[i++] = n % base; |
y_notsu | 0:3acc8fa91b79 | 210 | n /= base; |
y_notsu | 0:3acc8fa91b79 | 211 | } |
y_notsu | 0:3acc8fa91b79 | 212 | |
y_notsu | 0:3acc8fa91b79 | 213 | for (; i > 0; i--) |
y_notsu | 0:3acc8fa91b79 | 214 | print((char) (buf[i - 1] < 10 ? |
y_notsu | 0:3acc8fa91b79 | 215 | '0' + buf[i - 1] : |
y_notsu | 0:3acc8fa91b79 | 216 | 'A' + buf[i - 1] - 10)); |
y_notsu | 0:3acc8fa91b79 | 217 | } |
y_notsu | 0:3acc8fa91b79 | 218 | } |
y_notsu | 0:3acc8fa91b79 | 219 | |
y_notsu | 0:3acc8fa91b79 | 220 | */ |