コネクタ4 : LED コネクタ7 : Buzzer コネクタ13 : Relay コネクタUART:Serial LCD 4つを動かしています

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 */