Digole Serial Display FRDM-KL25Z Test Program Requires pull-ups on the SDA & SCL data lines. Digole Serial modified with extra Stop commands so that it works with the FRDM-KL25Z I2C library functions. Works fine on LPC1768 without extra Stop commands.

Dependencies:   mbed

Committer:
PhilG1300
Date:
Sat Jun 22 09:33:42 2013 +0000
Revision:
0:535e018f97b9
Digole Serial Display FRDM-KL25Z I2C Test Program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PhilG1300 0:535e018f97b9 1 /** Digole Serial Display library
PhilG1300 0:535e018f97b9 2 *
PhilG1300 0:535e018f97b9 3 * @Author: Digole Digital Solutions : www.digole.com ported to mbed by Michael Shimniok www.bot-thoughts.com
PhilG1300 0:535e018f97b9 4 */
PhilG1300 0:535e018f97b9 5
PhilG1300 0:535e018f97b9 6 #include "mbed.h"
PhilG1300 0:535e018f97b9 7 #include "DigoleSerialDisp.h"
PhilG1300 0:535e018f97b9 8 #include <stdio.h>
PhilG1300 0:535e018f97b9 9 #include <string.h>
PhilG1300 0:535e018f97b9 10 #include <inttypes.h>
PhilG1300 0:535e018f97b9 11
PhilG1300 0:535e018f97b9 12 char null = 0;
PhilG1300 0:535e018f97b9 13
PhilG1300 0:535e018f97b9 14
PhilG1300 0:535e018f97b9 15 // that resetting the Arduino doesn't reset the LCD, so we
PhilG1300 0:535e018f97b9 16 // can't assume that its in that state when a sketch starts (and the
PhilG1300 0:535e018f97b9 17 // LiquidCrystal constructor is called).
PhilG1300 0:535e018f97b9 18
PhilG1300 0:535e018f97b9 19 //UART function
PhilG1300 0:535e018f97b9 20
PhilG1300 0:535e018f97b9 21 char buf[128];
PhilG1300 0:535e018f97b9 22 char tmp[128];
PhilG1300 0:535e018f97b9 23
PhilG1300 0:535e018f97b9 24 DigoleSerialDisp::DigoleSerialDisp(PinName sda, PinName scl, uint8_t address):
PhilG1300 0:535e018f97b9 25 _device(sda, scl)
PhilG1300 0:535e018f97b9 26 {
PhilG1300 0:535e018f97b9 27 _address = (address<<1);
PhilG1300 0:535e018f97b9 28 _device.frequency(100000);
PhilG1300 0:535e018f97b9 29 _Comdelay=70;
PhilG1300 0:535e018f97b9 30 }
PhilG1300 0:535e018f97b9 31
PhilG1300 0:535e018f97b9 32 size_t DigoleSerialDisp::write(const char x)
PhilG1300 0:535e018f97b9 33 {
PhilG1300 0:535e018f97b9 34 _device.write(_address, (char *) &x, 1);
PhilG1300 0:535e018f97b9 35 _device.stop();
PhilG1300 0:535e018f97b9 36 return 1;
PhilG1300 0:535e018f97b9 37 }
PhilG1300 0:535e018f97b9 38
PhilG1300 0:535e018f97b9 39 size_t DigoleSerialDisp::write(const char *str)
PhilG1300 0:535e018f97b9 40 {
PhilG1300 0:535e018f97b9 41 if (str == NULL) return 0;
PhilG1300 0:535e018f97b9 42 return write(str, strlen(str));
PhilG1300 0:535e018f97b9 43 }
PhilG1300 0:535e018f97b9 44
PhilG1300 0:535e018f97b9 45 size_t DigoleSerialDisp::write(const char *buffer, size_t size)
PhilG1300 0:535e018f97b9 46 {
PhilG1300 0:535e018f97b9 47 int len = 0;
PhilG1300 0:535e018f97b9 48 if (buffer != NULL) {
PhilG1300 0:535e018f97b9 49 _device.write(_address, (char *) buffer, size);
PhilG1300 0:535e018f97b9 50 len = size;
PhilG1300 0:535e018f97b9 51 delay(7);
PhilG1300 0:535e018f97b9 52 _device.stop();
PhilG1300 0:535e018f97b9 53 }
PhilG1300 0:535e018f97b9 54 return len;
PhilG1300 0:535e018f97b9 55 }
PhilG1300 0:535e018f97b9 56
PhilG1300 0:535e018f97b9 57
PhilG1300 0:535e018f97b9 58 size_t DigoleSerialDisp::print(const char c)
PhilG1300 0:535e018f97b9 59 {
PhilG1300 0:535e018f97b9 60 buf[0] = 'T';
PhilG1300 0:535e018f97b9 61 buf[1] = 'T';
PhilG1300 0:535e018f97b9 62 buf[2] = c;
PhilG1300 0:535e018f97b9 63 buf[3] = 0;
PhilG1300 0:535e018f97b9 64 write(buf);
PhilG1300 0:535e018f97b9 65 write(null);
PhilG1300 0:535e018f97b9 66 return 1;
PhilG1300 0:535e018f97b9 67 }
PhilG1300 0:535e018f97b9 68
PhilG1300 0:535e018f97b9 69 size_t DigoleSerialDisp::print(const char s[])
PhilG1300 0:535e018f97b9 70 {
PhilG1300 0:535e018f97b9 71 int len = strlen(s);
PhilG1300 0:535e018f97b9 72
PhilG1300 0:535e018f97b9 73 if (s == NULL) return 0;
PhilG1300 0:535e018f97b9 74
PhilG1300 0:535e018f97b9 75 buf[0] = 'T';
PhilG1300 0:535e018f97b9 76 buf[1] = 'T';
PhilG1300 0:535e018f97b9 77 buf[2] = 0;
PhilG1300 0:535e018f97b9 78 strncat(buf, s, 125);
PhilG1300 0:535e018f97b9 79 write(buf);
PhilG1300 0:535e018f97b9 80 write(null);
PhilG1300 0:535e018f97b9 81 return len;
PhilG1300 0:535e018f97b9 82 }
PhilG1300 0:535e018f97b9 83
PhilG1300 0:535e018f97b9 84 size_t DigoleSerialDisp::println(const char s[])
PhilG1300 0:535e018f97b9 85 {
PhilG1300 0:535e018f97b9 86 return print(s);
PhilG1300 0:535e018f97b9 87 }
PhilG1300 0:535e018f97b9 88
PhilG1300 0:535e018f97b9 89 /*
PhilG1300 0:535e018f97b9 90 Print.cpp - Base class that provides print() and println()
PhilG1300 0:535e018f97b9 91 Copyright (c) 2008 David A. Mellis. All right reserved.
PhilG1300 0:535e018f97b9 92
PhilG1300 0:535e018f97b9 93 This library is free software; you can redistribute it and/or
PhilG1300 0:535e018f97b9 94 modify it under the terms of the GNU Lesser General Public
PhilG1300 0:535e018f97b9 95 License as published by the Free Software Foundation; either
PhilG1300 0:535e018f97b9 96 version 2.1 of the License, or (at your option) any later version.
PhilG1300 0:535e018f97b9 97
PhilG1300 0:535e018f97b9 98 This library is distributed in the hope that it will be useful,
PhilG1300 0:535e018f97b9 99 but WITHOUT ANY WARRANTY; without even the implied warranty of
PhilG1300 0:535e018f97b9 100 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
PhilG1300 0:535e018f97b9 101 Lesser General Public License for more details.
PhilG1300 0:535e018f97b9 102
PhilG1300 0:535e018f97b9 103 You should have received a copy of the GNU Lesser General Public
PhilG1300 0:535e018f97b9 104 License along with this library; if not, write to the Free Software
PhilG1300 0:535e018f97b9 105 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
PhilG1300 0:535e018f97b9 106
PhilG1300 0:535e018f97b9 107 Modified 23 November 2006 by David A. Mellis
PhilG1300 0:535e018f97b9 108 */
PhilG1300 0:535e018f97b9 109
PhilG1300 0:535e018f97b9 110 size_t DigoleSerialDisp::print(unsigned char b, int base)
PhilG1300 0:535e018f97b9 111 {
PhilG1300 0:535e018f97b9 112 return print((unsigned long) b, base);
PhilG1300 0:535e018f97b9 113 }
PhilG1300 0:535e018f97b9 114
PhilG1300 0:535e018f97b9 115 size_t DigoleSerialDisp::print(int n, int base)
PhilG1300 0:535e018f97b9 116 {
PhilG1300 0:535e018f97b9 117 return print((long) n, base);
PhilG1300 0:535e018f97b9 118 }
PhilG1300 0:535e018f97b9 119
PhilG1300 0:535e018f97b9 120 size_t DigoleSerialDisp::print(unsigned int n, int base)
PhilG1300 0:535e018f97b9 121 {
PhilG1300 0:535e018f97b9 122 return print((unsigned long) n, base);
PhilG1300 0:535e018f97b9 123 }
PhilG1300 0:535e018f97b9 124
PhilG1300 0:535e018f97b9 125 size_t DigoleSerialDisp::print(long n, int base)
PhilG1300 0:535e018f97b9 126 {
PhilG1300 0:535e018f97b9 127 if (base == 0) {
PhilG1300 0:535e018f97b9 128 return write(n);
PhilG1300 0:535e018f97b9 129 } else if (base == 10) {
PhilG1300 0:535e018f97b9 130 if (n < 0) {
PhilG1300 0:535e018f97b9 131 int t = print('-');
PhilG1300 0:535e018f97b9 132 n = -n;
PhilG1300 0:535e018f97b9 133 return printNumber(n, 10) + t;
PhilG1300 0:535e018f97b9 134 }
PhilG1300 0:535e018f97b9 135 return printNumber(n, 10);
PhilG1300 0:535e018f97b9 136 } else {
PhilG1300 0:535e018f97b9 137 return printNumber(n, base);
PhilG1300 0:535e018f97b9 138 }
PhilG1300 0:535e018f97b9 139 }
PhilG1300 0:535e018f97b9 140
PhilG1300 0:535e018f97b9 141 size_t DigoleSerialDisp::print(unsigned long n, int base)
PhilG1300 0:535e018f97b9 142 {
PhilG1300 0:535e018f97b9 143 if (base == 0) return write(n);
PhilG1300 0:535e018f97b9 144 else return printNumber(n, base);
PhilG1300 0:535e018f97b9 145 }
PhilG1300 0:535e018f97b9 146
PhilG1300 0:535e018f97b9 147 size_t DigoleSerialDisp::print(double n, int digits)
PhilG1300 0:535e018f97b9 148 {
PhilG1300 0:535e018f97b9 149 return printFloat(n, digits);
PhilG1300 0:535e018f97b9 150 }
PhilG1300 0:535e018f97b9 151
PhilG1300 0:535e018f97b9 152 size_t DigoleSerialDisp::println(unsigned char b, int base)
PhilG1300 0:535e018f97b9 153 {
PhilG1300 0:535e018f97b9 154 size_t n = print(b, base);
PhilG1300 0:535e018f97b9 155 n += println();
PhilG1300 0:535e018f97b9 156 return n;
PhilG1300 0:535e018f97b9 157 }
PhilG1300 0:535e018f97b9 158
PhilG1300 0:535e018f97b9 159 size_t DigoleSerialDisp::println(int num, int base)
PhilG1300 0:535e018f97b9 160 {
PhilG1300 0:535e018f97b9 161 size_t n = print(num, base);
PhilG1300 0:535e018f97b9 162 n += println();
PhilG1300 0:535e018f97b9 163 return n;
PhilG1300 0:535e018f97b9 164 }
PhilG1300 0:535e018f97b9 165
PhilG1300 0:535e018f97b9 166 size_t DigoleSerialDisp::println(unsigned int num, int base)
PhilG1300 0:535e018f97b9 167 {
PhilG1300 0:535e018f97b9 168 size_t n = print(num, base);
PhilG1300 0:535e018f97b9 169 n += println();
PhilG1300 0:535e018f97b9 170 return n;
PhilG1300 0:535e018f97b9 171 }
PhilG1300 0:535e018f97b9 172
PhilG1300 0:535e018f97b9 173 size_t DigoleSerialDisp::println(long num, int base)
PhilG1300 0:535e018f97b9 174 {
PhilG1300 0:535e018f97b9 175 size_t n = print(num, base);
PhilG1300 0:535e018f97b9 176 n += println();
PhilG1300 0:535e018f97b9 177 return n;
PhilG1300 0:535e018f97b9 178 }
PhilG1300 0:535e018f97b9 179
PhilG1300 0:535e018f97b9 180 size_t DigoleSerialDisp::println(unsigned long num, int base)
PhilG1300 0:535e018f97b9 181 {
PhilG1300 0:535e018f97b9 182 size_t n = print(num, base);
PhilG1300 0:535e018f97b9 183 n += println();
PhilG1300 0:535e018f97b9 184 return n;
PhilG1300 0:535e018f97b9 185 }
PhilG1300 0:535e018f97b9 186
PhilG1300 0:535e018f97b9 187 size_t DigoleSerialDisp::println(double num, int digits)
PhilG1300 0:535e018f97b9 188 {
PhilG1300 0:535e018f97b9 189 size_t n = print(num, digits);
PhilG1300 0:535e018f97b9 190 n += println();
PhilG1300 0:535e018f97b9 191 return n;
PhilG1300 0:535e018f97b9 192 }
PhilG1300 0:535e018f97b9 193
PhilG1300 0:535e018f97b9 194 size_t DigoleSerialDisp::println(void)
PhilG1300 0:535e018f97b9 195 {
PhilG1300 0:535e018f97b9 196 return 1;
PhilG1300 0:535e018f97b9 197 }
PhilG1300 0:535e018f97b9 198
PhilG1300 0:535e018f97b9 199 // Private Methods /////////////////////////////////////////////////////////////
PhilG1300 0:535e018f97b9 200
PhilG1300 0:535e018f97b9 201 size_t DigoleSerialDisp::printNumber(unsigned long n, uint8_t base) {
PhilG1300 0:535e018f97b9 202 char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
PhilG1300 0:535e018f97b9 203 char *str = &buf[sizeof(buf) - 1];
PhilG1300 0:535e018f97b9 204
PhilG1300 0:535e018f97b9 205 *str = '\0';
PhilG1300 0:535e018f97b9 206
PhilG1300 0:535e018f97b9 207 // prevent crash if called with base == 1
PhilG1300 0:535e018f97b9 208 if (base < 2) base = 10;
PhilG1300 0:535e018f97b9 209
PhilG1300 0:535e018f97b9 210 do {
PhilG1300 0:535e018f97b9 211 unsigned long m = n;
PhilG1300 0:535e018f97b9 212 n /= base;
PhilG1300 0:535e018f97b9 213 char c = m - base * n;
PhilG1300 0:535e018f97b9 214 *--str = c < 10 ? c + '0' : c + 'A' - 10;
PhilG1300 0:535e018f97b9 215 } while(n);
PhilG1300 0:535e018f97b9 216
PhilG1300 0:535e018f97b9 217 return write(str);
PhilG1300 0:535e018f97b9 218 }
PhilG1300 0:535e018f97b9 219
PhilG1300 0:535e018f97b9 220 size_t DigoleSerialDisp::printFloat(double number, uint8_t digits)
PhilG1300 0:535e018f97b9 221 {
PhilG1300 0:535e018f97b9 222 size_t n = 0;
PhilG1300 0:535e018f97b9 223
PhilG1300 0:535e018f97b9 224 if (isnan(number)) return print("nan");
PhilG1300 0:535e018f97b9 225 if (isinf(number)) return print("inf");
PhilG1300 0:535e018f97b9 226 if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
PhilG1300 0:535e018f97b9 227 if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
PhilG1300 0:535e018f97b9 228
PhilG1300 0:535e018f97b9 229 // Handle negative numbers
PhilG1300 0:535e018f97b9 230 if (number < 0.0)
PhilG1300 0:535e018f97b9 231 {
PhilG1300 0:535e018f97b9 232 n += print('-');
PhilG1300 0:535e018f97b9 233 number = -number;
PhilG1300 0:535e018f97b9 234 }
PhilG1300 0:535e018f97b9 235
PhilG1300 0:535e018f97b9 236 // Round correctly so that print(1.999, 2) prints as "2.00"
PhilG1300 0:535e018f97b9 237 double rounding = 0.5;
PhilG1300 0:535e018f97b9 238 for (uint8_t i=0; i<digits; ++i)
PhilG1300 0:535e018f97b9 239 rounding /= 10.0;
PhilG1300 0:535e018f97b9 240
PhilG1300 0:535e018f97b9 241 number += rounding;
PhilG1300 0:535e018f97b9 242
PhilG1300 0:535e018f97b9 243 // Extract the integer part of the number and print it
PhilG1300 0:535e018f97b9 244 unsigned long int_part = (unsigned long)number;
PhilG1300 0:535e018f97b9 245 double remainder = number - (double)int_part;
PhilG1300 0:535e018f97b9 246 n += print(int_part);
PhilG1300 0:535e018f97b9 247
PhilG1300 0:535e018f97b9 248 // Print the decimal point, but only if there are digits beyond
PhilG1300 0:535e018f97b9 249 if (digits > 0) {
PhilG1300 0:535e018f97b9 250 n += print(".");
PhilG1300 0:535e018f97b9 251 }
PhilG1300 0:535e018f97b9 252
PhilG1300 0:535e018f97b9 253 // Extract digits from the remainder one at a time
PhilG1300 0:535e018f97b9 254 while (digits-- > 0)
PhilG1300 0:535e018f97b9 255 {
PhilG1300 0:535e018f97b9 256 remainder *= 10.0;
PhilG1300 0:535e018f97b9 257 int toPrint = int(remainder);
PhilG1300 0:535e018f97b9 258 n += print(toPrint);
PhilG1300 0:535e018f97b9 259 remainder -= toPrint;
PhilG1300 0:535e018f97b9 260 }
PhilG1300 0:535e018f97b9 261
PhilG1300 0:535e018f97b9 262 return n;
PhilG1300 0:535e018f97b9 263 }
PhilG1300 0:535e018f97b9 264
PhilG1300 0:535e018f97b9 265 /*---------functions for Text and Graphic LCD adapters---------*/
PhilG1300 0:535e018f97b9 266 void DigoleSerialDisp::disableCursor(void)
PhilG1300 0:535e018f97b9 267 {
PhilG1300 0:535e018f97b9 268 write("CS");
PhilG1300 0:535e018f97b9 269 write(null);
PhilG1300 0:535e018f97b9 270 }
PhilG1300 0:535e018f97b9 271
PhilG1300 0:535e018f97b9 272 void DigoleSerialDisp::enableCursor(void)
PhilG1300 0:535e018f97b9 273 {
PhilG1300 0:535e018f97b9 274 write("CS");
PhilG1300 0:535e018f97b9 275 write(1);
PhilG1300 0:535e018f97b9 276 }
PhilG1300 0:535e018f97b9 277
PhilG1300 0:535e018f97b9 278 void DigoleSerialDisp::drawStr(uint8_t x, uint8_t y, const char *s)
PhilG1300 0:535e018f97b9 279 {
PhilG1300 0:535e018f97b9 280 write("TP");
PhilG1300 0:535e018f97b9 281 write(x);
PhilG1300 0:535e018f97b9 282 write(y);
PhilG1300 0:535e018f97b9 283 write("TT");
PhilG1300 0:535e018f97b9 284 write(s);
PhilG1300 0:535e018f97b9 285 write(null);
PhilG1300 0:535e018f97b9 286 }
PhilG1300 0:535e018f97b9 287
PhilG1300 0:535e018f97b9 288 void DigoleSerialDisp::setPrintPos(uint8_t x, uint8_t y, uint8_t graph)
PhilG1300 0:535e018f97b9 289 {
PhilG1300 0:535e018f97b9 290 if (graph == _TEXT_) {
PhilG1300 0:535e018f97b9 291 write("TP");
PhilG1300 0:535e018f97b9 292 write(x);
PhilG1300 0:535e018f97b9 293 write(y);
PhilG1300 0:535e018f97b9 294 } else {
PhilG1300 0:535e018f97b9 295 write("GP");
PhilG1300 0:535e018f97b9 296 write(x);
PhilG1300 0:535e018f97b9 297 write(y);
PhilG1300 0:535e018f97b9 298 }
PhilG1300 0:535e018f97b9 299 }
PhilG1300 0:535e018f97b9 300
PhilG1300 0:535e018f97b9 301 void DigoleSerialDisp::clearScreen(void)
PhilG1300 0:535e018f97b9 302 {
PhilG1300 0:535e018f97b9 303 //write(null);
PhilG1300 0:535e018f97b9 304 write("CL");
PhilG1300 0:535e018f97b9 305 }
PhilG1300 0:535e018f97b9 306
PhilG1300 0:535e018f97b9 307 void DigoleSerialDisp::setLCDColRow(uint8_t col, uint8_t row)
PhilG1300 0:535e018f97b9 308 {
PhilG1300 0:535e018f97b9 309 write("STCR");
PhilG1300 0:535e018f97b9 310 write(col);
PhilG1300 0:535e018f97b9 311 write(row);
PhilG1300 0:535e018f97b9 312 write("\x80\xC0\x94\xD4");
PhilG1300 0:535e018f97b9 313 }
PhilG1300 0:535e018f97b9 314
PhilG1300 0:535e018f97b9 315 void DigoleSerialDisp::setI2CAddress(uint8_t add)
PhilG1300 0:535e018f97b9 316 {
PhilG1300 0:535e018f97b9 317 write("SI2CA");
PhilG1300 0:535e018f97b9 318 write(add);
PhilG1300 0:535e018f97b9 319 _address = (add<<1);
PhilG1300 0:535e018f97b9 320 }
PhilG1300 0:535e018f97b9 321
PhilG1300 0:535e018f97b9 322 void DigoleSerialDisp::displayConfig(uint8_t v)
PhilG1300 0:535e018f97b9 323 {
PhilG1300 0:535e018f97b9 324 write("DC");
PhilG1300 0:535e018f97b9 325 write(v);
PhilG1300 0:535e018f97b9 326 }
PhilG1300 0:535e018f97b9 327
PhilG1300 0:535e018f97b9 328 void DigoleSerialDisp::preprint(void)
PhilG1300 0:535e018f97b9 329 {
PhilG1300 0:535e018f97b9 330 //print("TT");
PhilG1300 0:535e018f97b9 331 }
PhilG1300 0:535e018f97b9 332
PhilG1300 0:535e018f97b9 333 /*----------Functions for Graphic LCD/OLED adapters only---------*/
PhilG1300 0:535e018f97b9 334 void DigoleSerialDisp::drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap) {
PhilG1300 0:535e018f97b9 335 uint8_t i = 0;
PhilG1300 0:535e018f97b9 336 if ((w & 7) != 0)
PhilG1300 0:535e018f97b9 337 i = 1;
PhilG1300 0:535e018f97b9 338 write("DIM");
PhilG1300 0:535e018f97b9 339 write(x); //x;
PhilG1300 0:535e018f97b9 340 write(y);
PhilG1300 0:535e018f97b9 341 write(w);
PhilG1300 0:535e018f97b9 342 write(h);
PhilG1300 0:535e018f97b9 343 for (int j = 0; j < h * ((w >> 3) + i); j++) {
PhilG1300 0:535e018f97b9 344 write( (const char *) (bitmap+j) );
PhilG1300 0:535e018f97b9 345 delay(1);
PhilG1300 0:535e018f97b9 346 }
PhilG1300 0:535e018f97b9 347 }
PhilG1300 0:535e018f97b9 348
PhilG1300 0:535e018f97b9 349 void DigoleSerialDisp::setRot90(void) {
PhilG1300 0:535e018f97b9 350 write("SD1");
PhilG1300 0:535e018f97b9 351 }
PhilG1300 0:535e018f97b9 352
PhilG1300 0:535e018f97b9 353 void DigoleSerialDisp::setRot180(void) {
PhilG1300 0:535e018f97b9 354 write("SD2");
PhilG1300 0:535e018f97b9 355 }
PhilG1300 0:535e018f97b9 356
PhilG1300 0:535e018f97b9 357 void DigoleSerialDisp::setRot270(void) {
PhilG1300 0:535e018f97b9 358 write("SD3");
PhilG1300 0:535e018f97b9 359 }
PhilG1300 0:535e018f97b9 360
PhilG1300 0:535e018f97b9 361 void DigoleSerialDisp::undoRotation(void) {
PhilG1300 0:535e018f97b9 362 write("SD0");
PhilG1300 0:535e018f97b9 363 }
PhilG1300 0:535e018f97b9 364
PhilG1300 0:535e018f97b9 365 void DigoleSerialDisp::setRotation(uint8_t d) {
PhilG1300 0:535e018f97b9 366 write("SD");
PhilG1300 0:535e018f97b9 367 write(d);
PhilG1300 0:535e018f97b9 368 }
PhilG1300 0:535e018f97b9 369
PhilG1300 0:535e018f97b9 370 void DigoleSerialDisp::setContrast(uint8_t c) {
PhilG1300 0:535e018f97b9 371 write("CT");
PhilG1300 0:535e018f97b9 372 write(c);
PhilG1300 0:535e018f97b9 373 }
PhilG1300 0:535e018f97b9 374
PhilG1300 0:535e018f97b9 375 void DigoleSerialDisp::drawBox(uint8_t x, uint8_t y, uint8_t w, uint8_t h) {
PhilG1300 0:535e018f97b9 376 write("FR");
PhilG1300 0:535e018f97b9 377 write(x);
PhilG1300 0:535e018f97b9 378 write(y);
PhilG1300 0:535e018f97b9 379 write(x + w);
PhilG1300 0:535e018f97b9 380 write(y + h);
PhilG1300 0:535e018f97b9 381 }
PhilG1300 0:535e018f97b9 382
PhilG1300 0:535e018f97b9 383 void DigoleSerialDisp::drawCircle(uint8_t x, uint8_t y, uint8_t r, uint8_t f) {
PhilG1300 0:535e018f97b9 384 write("CC");
PhilG1300 0:535e018f97b9 385 write(x);
PhilG1300 0:535e018f97b9 386 write(y);
PhilG1300 0:535e018f97b9 387 write(r);
PhilG1300 0:535e018f97b9 388 write(f);
PhilG1300 0:535e018f97b9 389 }
PhilG1300 0:535e018f97b9 390
PhilG1300 0:535e018f97b9 391 void DigoleSerialDisp::drawDisc(uint8_t x, uint8_t y, uint8_t r) {
PhilG1300 0:535e018f97b9 392 drawCircle(x, y, r, 1);
PhilG1300 0:535e018f97b9 393 }
PhilG1300 0:535e018f97b9 394
PhilG1300 0:535e018f97b9 395 void DigoleSerialDisp::drawFrame(uint8_t x, uint8_t y, uint8_t w, uint8_t h) {
PhilG1300 0:535e018f97b9 396 write("DR");
PhilG1300 0:535e018f97b9 397 write(x);
PhilG1300 0:535e018f97b9 398 write(y);
PhilG1300 0:535e018f97b9 399 write(x + w);
PhilG1300 0:535e018f97b9 400 write(y + h);
PhilG1300 0:535e018f97b9 401 }
PhilG1300 0:535e018f97b9 402
PhilG1300 0:535e018f97b9 403 void DigoleSerialDisp::drawPixel(uint8_t x, uint8_t y, uint8_t color) {
PhilG1300 0:535e018f97b9 404 write("DP");
PhilG1300 0:535e018f97b9 405 write(x);
PhilG1300 0:535e018f97b9 406 write(y);
PhilG1300 0:535e018f97b9 407 write(color);
PhilG1300 0:535e018f97b9 408 }
PhilG1300 0:535e018f97b9 409
PhilG1300 0:535e018f97b9 410 void DigoleSerialDisp::drawLine(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1) {
PhilG1300 0:535e018f97b9 411 write("LN");
PhilG1300 0:535e018f97b9 412 write(x);
PhilG1300 0:535e018f97b9 413 write(y);
PhilG1300 0:535e018f97b9 414 write(x1);
PhilG1300 0:535e018f97b9 415 write(y1);
PhilG1300 0:535e018f97b9 416 }
PhilG1300 0:535e018f97b9 417
PhilG1300 0:535e018f97b9 418 void DigoleSerialDisp::drawLineTo(uint8_t x, uint8_t y) {
PhilG1300 0:535e018f97b9 419 write("LT");
PhilG1300 0:535e018f97b9 420 write(x);
PhilG1300 0:535e018f97b9 421 write(y);
PhilG1300 0:535e018f97b9 422 }
PhilG1300 0:535e018f97b9 423
PhilG1300 0:535e018f97b9 424 void DigoleSerialDisp::drawHLine(uint8_t x, uint8_t y, uint8_t w) {
PhilG1300 0:535e018f97b9 425 drawLine(x, y, x + w, y);
PhilG1300 0:535e018f97b9 426 }
PhilG1300 0:535e018f97b9 427
PhilG1300 0:535e018f97b9 428 void DigoleSerialDisp::drawVLine(uint8_t x, uint8_t y, uint8_t h) {
PhilG1300 0:535e018f97b9 429 drawLine(x, y, x, y + h);
PhilG1300 0:535e018f97b9 430 }
PhilG1300 0:535e018f97b9 431
PhilG1300 0:535e018f97b9 432 void DigoleSerialDisp::nextTextLine(void) {
PhilG1300 0:535e018f97b9 433 write(null);
PhilG1300 0:535e018f97b9 434 write("TRT");
PhilG1300 0:535e018f97b9 435 }
PhilG1300 0:535e018f97b9 436
PhilG1300 0:535e018f97b9 437 void DigoleSerialDisp::setFont(uint8_t font) {
PhilG1300 0:535e018f97b9 438 write("SF");
PhilG1300 0:535e018f97b9 439 write(font);
PhilG1300 0:535e018f97b9 440 }
PhilG1300 0:535e018f97b9 441
PhilG1300 0:535e018f97b9 442 void DigoleSerialDisp::setColor(uint8_t color) {
PhilG1300 0:535e018f97b9 443 write("SC");
PhilG1300 0:535e018f97b9 444 write(color);
PhilG1300 0:535e018f97b9 445 }
PhilG1300 0:535e018f97b9 446
PhilG1300 0:535e018f97b9 447 void DigoleSerialDisp::backLightOn(void) {
PhilG1300 0:535e018f97b9 448 write("BL");
PhilG1300 0:535e018f97b9 449 write(1);
PhilG1300 0:535e018f97b9 450 }
PhilG1300 0:535e018f97b9 451
PhilG1300 0:535e018f97b9 452 void DigoleSerialDisp::backLightOff(void) {
PhilG1300 0:535e018f97b9 453 write("BL");
PhilG1300 0:535e018f97b9 454 write(null);
PhilG1300 0:535e018f97b9 455 }
PhilG1300 0:535e018f97b9 456
PhilG1300 0:535e018f97b9 457 void DigoleSerialDisp::directCommand(uint8_t d) {
PhilG1300 0:535e018f97b9 458 write("MCD");
PhilG1300 0:535e018f97b9 459 write(d);
PhilG1300 0:535e018f97b9 460 }
PhilG1300 0:535e018f97b9 461
PhilG1300 0:535e018f97b9 462 void DigoleSerialDisp::directData(uint8_t d) {
PhilG1300 0:535e018f97b9 463 write("MDT");
PhilG1300 0:535e018f97b9 464 write(d);
PhilG1300 0:535e018f97b9 465 }
PhilG1300 0:535e018f97b9 466
PhilG1300 0:535e018f97b9 467 void DigoleSerialDisp::moveArea(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, char xoffset, char yoffset) {
PhilG1300 0:535e018f97b9 468 write("MA");
PhilG1300 0:535e018f97b9 469 write(x0);
PhilG1300 0:535e018f97b9 470 write(y0);
PhilG1300 0:535e018f97b9 471 write(x1);
PhilG1300 0:535e018f97b9 472 write(y1);
PhilG1300 0:535e018f97b9 473 write(xoffset);
PhilG1300 0:535e018f97b9 474 write(yoffset);
PhilG1300 0:535e018f97b9 475 }
PhilG1300 0:535e018f97b9 476
PhilG1300 0:535e018f97b9 477
PhilG1300 0:535e018f97b9 478 void DigoleSerialDisp::displayStartScreen(uint8_t m) {
PhilG1300 0:535e018f97b9 479 write("DSS");
PhilG1300 0:535e018f97b9 480 write(m);
PhilG1300 0:535e018f97b9 481 } //display start screen
PhilG1300 0:535e018f97b9 482
PhilG1300 0:535e018f97b9 483
PhilG1300 0:535e018f97b9 484 void DigoleSerialDisp::setMode(uint8_t m) {
PhilG1300 0:535e018f97b9 485 write("DM");
PhilG1300 0:535e018f97b9 486 write(m);
PhilG1300 0:535e018f97b9 487 } //set display mode
PhilG1300 0:535e018f97b9 488
PhilG1300 0:535e018f97b9 489
PhilG1300 0:535e018f97b9 490 void DigoleSerialDisp::setTextPosBack(void) {
PhilG1300 0:535e018f97b9 491 write("ETB");
PhilG1300 0:535e018f97b9 492 } //set text position back to previous, only one back allowed
PhilG1300 0:535e018f97b9 493
PhilG1300 0:535e018f97b9 494
PhilG1300 0:535e018f97b9 495 void DigoleSerialDisp::setTextPosOffset(char xoffset, char yoffset) {
PhilG1300 0:535e018f97b9 496 write("ETO");
PhilG1300 0:535e018f97b9 497 write(xoffset);
PhilG1300 0:535e018f97b9 498 write(yoffset);
PhilG1300 0:535e018f97b9 499 }
PhilG1300 0:535e018f97b9 500
PhilG1300 0:535e018f97b9 501
PhilG1300 0:535e018f97b9 502 void DigoleSerialDisp::setTextPosAbs(uint8_t x, uint8_t y) {
PhilG1300 0:535e018f97b9 503 write("ETP");
PhilG1300 0:535e018f97b9 504 write(x);
PhilG1300 0:535e018f97b9 505 write(y);
PhilG1300 0:535e018f97b9 506 }
PhilG1300 0:535e018f97b9 507
PhilG1300 0:535e018f97b9 508
PhilG1300 0:535e018f97b9 509 void DigoleSerialDisp::setLinePattern(uint8_t pattern) {
PhilG1300 0:535e018f97b9 510 write("SLP");
PhilG1300 0:535e018f97b9 511 write(pattern);
PhilG1300 0:535e018f97b9 512 }
PhilG1300 0:535e018f97b9 513
PhilG1300 0:535e018f97b9 514
PhilG1300 0:535e018f97b9 515 void DigoleSerialDisp::setLCDChip(uint8_t chip) { //only for universal LCD adapter
PhilG1300 0:535e018f97b9 516 write("SLCD");
PhilG1300 0:535e018f97b9 517 write(chip);
PhilG1300 0:535e018f97b9 518 }
PhilG1300 0:535e018f97b9 519
PhilG1300 0:535e018f97b9 520
PhilG1300 0:535e018f97b9 521 void DigoleSerialDisp::uploadStartScreen(int lon, const unsigned char *data)
PhilG1300 0:535e018f97b9 522 {
PhilG1300 0:535e018f97b9 523 int j;
PhilG1300 0:535e018f97b9 524 uint8_t c;
PhilG1300 0:535e018f97b9 525 write("SSS");
PhilG1300 0:535e018f97b9 526 write((uint8_t) (lon % 256));
PhilG1300 0:535e018f97b9 527 write((uint8_t) (lon / 256));
PhilG1300 0:535e018f97b9 528 for (j = 0; j < lon;j++) {
PhilG1300 0:535e018f97b9 529 if((j%32)==0)
PhilG1300 0:535e018f97b9 530 delay(10);
PhilG1300 0:535e018f97b9 531 delay(_Comdelay);
PhilG1300 0:535e018f97b9 532 c = data[j];
PhilG1300 0:535e018f97b9 533 write(c);
PhilG1300 0:535e018f97b9 534 }
PhilG1300 0:535e018f97b9 535 }
PhilG1300 0:535e018f97b9 536
PhilG1300 0:535e018f97b9 537
PhilG1300 0:535e018f97b9 538 void DigoleSerialDisp::uploadUserFont(int lon, const unsigned char *data, uint8_t sect) {
PhilG1300 0:535e018f97b9 539 uint8_t c;
PhilG1300 0:535e018f97b9 540 write("SUF");
PhilG1300 0:535e018f97b9 541 write(sect);
PhilG1300 0:535e018f97b9 542 write((uint8_t) (lon % 256));
PhilG1300 0:535e018f97b9 543 write((uint8_t) (lon / 256));
PhilG1300 0:535e018f97b9 544 for (int j = 0; j < lon; j++) {
PhilG1300 0:535e018f97b9 545 if((j%32)==0)
PhilG1300 0:535e018f97b9 546 delay(10);
PhilG1300 0:535e018f97b9 547 delay(_Comdelay);
PhilG1300 0:535e018f97b9 548 c = data[j];
PhilG1300 0:535e018f97b9 549 write(c);
PhilG1300 0:535e018f97b9 550 }
PhilG1300 0:535e018f97b9 551 }
PhilG1300 0:535e018f97b9 552
PhilG1300 0:535e018f97b9 553 void DigoleSerialDisp::digitalOutput(uint8_t x)
PhilG1300 0:535e018f97b9 554 {
PhilG1300 0:535e018f97b9 555 write("DOUT");
PhilG1300 0:535e018f97b9 556 write(x);
PhilG1300 0:535e018f97b9 557 }