Library for EarthLCD ezLCD3xx line of products
ezLCDLib.cpp@0:65606abcae36, 2013-04-22 (annotated)
- Committer:
- codeman
- Date:
- Mon Apr 22 06:33:57 2013 +0000
- Revision:
- 0:65606abcae36
- Child:
- 1:c7659c8af0d3
first one 4/22/2013
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
codeman | 0:65606abcae36 | 1 | #include "mbed.h" |
codeman | 0:65606abcae36 | 2 | #include "ezLCDLib.h" |
codeman | 0:65606abcae36 | 3 | |
codeman | 0:65606abcae36 | 4 | #define XSIZE 6 |
codeman | 0:65606abcae36 | 5 | #define YSIZE 9 |
codeman | 0:65606abcae36 | 6 | #define BUFF_LEN 10 |
codeman | 0:65606abcae36 | 7 | ezLCD3::ezLCD3(PinName tx, PinName rx) : Stream("ezLCD3") , _ser(tx, rx) |
codeman | 0:65606abcae36 | 8 | { |
codeman | 0:65606abcae36 | 9 | _ser.baud(115200); // default baud rate |
codeman | 0:65606abcae36 | 10 | } |
codeman | 0:65606abcae36 | 11 | |
codeman | 0:65606abcae36 | 12 | |
codeman | 0:65606abcae36 | 13 | /* itoa: convert n to characters in s */ |
codeman | 0:65606abcae36 | 14 | void ezLCD3::itoa(int value, char *sp, int radix) |
codeman | 0:65606abcae36 | 15 | { |
codeman | 0:65606abcae36 | 16 | char tmp[16];// be careful with the length of the buffer |
codeman | 0:65606abcae36 | 17 | char *tp = tmp; |
codeman | 0:65606abcae36 | 18 | int i; |
codeman | 0:65606abcae36 | 19 | unsigned v; |
codeman | 0:65606abcae36 | 20 | int sign; |
codeman | 0:65606abcae36 | 21 | |
codeman | 0:65606abcae36 | 22 | sign = (radix == 10 && value < 0); |
codeman | 0:65606abcae36 | 23 | if (sign) v = -value; |
codeman | 0:65606abcae36 | 24 | else v = (unsigned)value; |
codeman | 0:65606abcae36 | 25 | |
codeman | 0:65606abcae36 | 26 | while (v || tp == tmp) { |
codeman | 0:65606abcae36 | 27 | i = v % radix; |
codeman | 0:65606abcae36 | 28 | v /= radix; // v/=radix uses less CPU clocks than v=v/radix does |
codeman | 0:65606abcae36 | 29 | if (i < 10) |
codeman | 0:65606abcae36 | 30 | *tp++ = i+'0'; |
codeman | 0:65606abcae36 | 31 | else |
codeman | 0:65606abcae36 | 32 | *tp++ = i + 'a' - 10; |
codeman | 0:65606abcae36 | 33 | } |
codeman | 0:65606abcae36 | 34 | |
codeman | 0:65606abcae36 | 35 | if (sign) |
codeman | 0:65606abcae36 | 36 | *sp++ = '-'; |
codeman | 0:65606abcae36 | 37 | while (tp > tmp) |
codeman | 0:65606abcae36 | 38 | *sp++ = *--tp; |
codeman | 0:65606abcae36 | 39 | } |
codeman | 0:65606abcae36 | 40 | void ezLCD3::sendInt( int i ) |
codeman | 0:65606abcae36 | 41 | { |
codeman | 0:65606abcae36 | 42 | char value[5]= {0, 0, 0, 0, 0}; |
codeman | 0:65606abcae36 | 43 | itoa(i, value, 10); |
codeman | 0:65606abcae36 | 44 | if(value[0]) putc(value[0]); |
codeman | 0:65606abcae36 | 45 | if(value[1]) putc(value[1]); |
codeman | 0:65606abcae36 | 46 | if(value[2]) putc(value[2]); |
codeman | 0:65606abcae36 | 47 | if(value[3]) putc(value[3]); |
codeman | 0:65606abcae36 | 48 | if(value[4]) putc(value[4]); |
codeman | 0:65606abcae36 | 49 | } |
codeman | 0:65606abcae36 | 50 | /* |
codeman | 0:65606abcae36 | 51 | int ezLCD3::getInt( char *str ) |
codeman | 0:65606abcae36 | 52 | { |
codeman | 0:65606abcae36 | 53 | return atoi(str); |
codeman | 0:65606abcae36 | 54 | } |
codeman | 0:65606abcae36 | 55 | void ezLCD3::getString( char *str ) |
codeman | 0:65606abcae36 | 56 | { |
codeman | 0:65606abcae36 | 57 | char value[5]= {0, 0, 0, 0, 0}; |
codeman | 0:65606abcae36 | 58 | int counter; |
codeman | 0:65606abcae36 | 59 | |
codeman | 0:65606abcae36 | 60 | } |
codeman | 0:65606abcae36 | 61 | */ |
codeman | 0:65606abcae36 | 62 | bool ezLCD3::waitForCR( void ) |
codeman | 0:65606abcae36 | 63 | { |
codeman | 0:65606abcae36 | 64 | while(! _ser.readable()); |
codeman | 0:65606abcae36 | 65 | if(_ser.getc() == '\r') |
codeman | 0:65606abcae36 | 66 | return true; |
codeman | 0:65606abcae36 | 67 | else |
codeman | 0:65606abcae36 | 68 | return false; |
codeman | 0:65606abcae36 | 69 | } |
codeman | 0:65606abcae36 | 70 | |
codeman | 0:65606abcae36 | 71 | void ezLCD3::cls() |
codeman | 0:65606abcae36 | 72 | { |
codeman | 0:65606abcae36 | 73 | sendInt(Clr_Screen); |
codeman | 0:65606abcae36 | 74 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 75 | waitForCR(); |
codeman | 0:65606abcae36 | 76 | } |
codeman | 0:65606abcae36 | 77 | |
codeman | 0:65606abcae36 | 78 | void ezLCD3::cls(int bColor) |
codeman | 0:65606abcae36 | 79 | { |
codeman | 0:65606abcae36 | 80 | sendInt(Clr_Screen); |
codeman | 0:65606abcae36 | 81 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 82 | sendInt(bColor); |
codeman | 0:65606abcae36 | 83 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 84 | waitForCR(); |
codeman | 0:65606abcae36 | 85 | } |
codeman | 0:65606abcae36 | 86 | |
codeman | 0:65606abcae36 | 87 | void ezLCD3::cls(int bColor, int fColor) |
codeman | 0:65606abcae36 | 88 | { |
codeman | 0:65606abcae36 | 89 | sendInt(Clr_Screen); |
codeman | 0:65606abcae36 | 90 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 91 | sendInt(bColor); |
codeman | 0:65606abcae36 | 92 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 93 | sendInt(fColor); |
codeman | 0:65606abcae36 | 94 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 95 | waitForCR(); |
codeman | 0:65606abcae36 | 96 | } |
codeman | 0:65606abcae36 | 97 | void ezLCD3::color(int fColor) |
codeman | 0:65606abcae36 | 98 | { |
codeman | 0:65606abcae36 | 99 | sendInt(Color); |
codeman | 0:65606abcae36 | 100 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 101 | sendInt(fColor); |
codeman | 0:65606abcae36 | 102 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 103 | waitForCR(); |
codeman | 0:65606abcae36 | 104 | } |
codeman | 0:65606abcae36 | 105 | |
codeman | 0:65606abcae36 | 106 | void ezLCD3::pos(int col, int row) |
codeman | 0:65606abcae36 | 107 | { |
codeman | 0:65606abcae36 | 108 | //posXY(XSIZE*col, (YSIZE*row)); |
codeman | 0:65606abcae36 | 109 | } |
codeman | 0:65606abcae36 | 110 | |
codeman | 0:65606abcae36 | 111 | void ezLCD3::xy(int x, int y) |
codeman | 0:65606abcae36 | 112 | { |
codeman | 0:65606abcae36 | 113 | sendInt(XY); |
codeman | 0:65606abcae36 | 114 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 115 | sendInt(x); |
codeman | 0:65606abcae36 | 116 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 117 | sendInt(y); |
codeman | 0:65606abcae36 | 118 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 119 | } |
codeman | 0:65606abcae36 | 120 | |
codeman | 0:65606abcae36 | 121 | void ezLCD3::plot( void ) |
codeman | 0:65606abcae36 | 122 | { |
codeman | 0:65606abcae36 | 123 | sendInt(Plot); |
codeman | 0:65606abcae36 | 124 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 125 | waitForCR(); |
codeman | 0:65606abcae36 | 126 | } |
codeman | 0:65606abcae36 | 127 | |
codeman | 0:65606abcae36 | 128 | void ezLCD3::plot( int x, int y ) |
codeman | 0:65606abcae36 | 129 | { |
codeman | 0:65606abcae36 | 130 | sendInt(Plot); |
codeman | 0:65606abcae36 | 131 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 132 | sendInt(x); |
codeman | 0:65606abcae36 | 133 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 134 | sendInt(y); |
codeman | 0:65606abcae36 | 135 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 136 | waitForCR(); |
codeman | 0:65606abcae36 | 137 | } |
codeman | 0:65606abcae36 | 138 | void ezLCD3::line(int x, int y ) |
codeman | 0:65606abcae36 | 139 | { |
codeman | 0:65606abcae36 | 140 | sendInt(Line); |
codeman | 0:65606abcae36 | 141 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 142 | sendInt(x); |
codeman | 0:65606abcae36 | 143 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 144 | sendInt(y); |
codeman | 0:65606abcae36 | 145 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 146 | waitForCR(); |
codeman | 0:65606abcae36 | 147 | |
codeman | 0:65606abcae36 | 148 | } |
codeman | 0:65606abcae36 | 149 | |
codeman | 0:65606abcae36 | 150 | void ezLCD3::circle(int radius, bool filled) |
codeman | 0:65606abcae36 | 151 | { |
codeman | 0:65606abcae36 | 152 | sendInt(Circle); |
codeman | 0:65606abcae36 | 153 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 154 | sendInt(radius); |
codeman | 0:65606abcae36 | 155 | if(filled) { |
codeman | 0:65606abcae36 | 156 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 157 | _ser.putc('f'); |
codeman | 0:65606abcae36 | 158 | } |
codeman | 0:65606abcae36 | 159 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 160 | waitForCR(); |
codeman | 0:65606abcae36 | 161 | } |
codeman | 0:65606abcae36 | 162 | |
codeman | 0:65606abcae36 | 163 | void ezLCD3::box(int x, int y, bool filled) |
codeman | 0:65606abcae36 | 164 | { |
codeman | 0:65606abcae36 | 165 | sendInt(Box); |
codeman | 0:65606abcae36 | 166 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 167 | sendInt(x); |
codeman | 0:65606abcae36 | 168 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 169 | sendInt(y); |
codeman | 0:65606abcae36 | 170 | if(filled) { |
codeman | 0:65606abcae36 | 171 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 172 | _ser.putc('f'); |
codeman | 0:65606abcae36 | 173 | } |
codeman | 0:65606abcae36 | 174 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 175 | waitForCR(); |
codeman | 0:65606abcae36 | 176 | } |
codeman | 0:65606abcae36 | 177 | |
codeman | 0:65606abcae36 | 178 | void ezLCD3::light(int i) |
codeman | 0:65606abcae36 | 179 | { |
codeman | 0:65606abcae36 | 180 | if (i >= 0 && i <= 100) { |
codeman | 0:65606abcae36 | 181 | sendInt(Light); |
codeman | 0:65606abcae36 | 182 | putc(' '); |
codeman | 0:65606abcae36 | 183 | sendInt( i ); |
codeman | 0:65606abcae36 | 184 | putc('\r'); |
codeman | 0:65606abcae36 | 185 | waitForCR(); |
codeman | 0:65606abcae36 | 186 | } |
codeman | 0:65606abcae36 | 187 | } |
codeman | 0:65606abcae36 | 188 | /* |
codeman | 0:65606abcae36 | 189 | int ezLCD3::getMaxX( void ) |
codeman | 0:65606abcae36 | 190 | { |
codeman | 0:65606abcae36 | 191 | sendInt(Xmax); |
codeman | 0:65606abcae36 | 192 | putc('\r'); |
codeman | 0:65606abcae36 | 193 | waitForCR(); |
codeman | 0:65606abcae36 | 194 | |
codeman | 0:65606abcae36 | 195 | } |
codeman | 0:65606abcae36 | 196 | int ezLCD3::getMaxY( void ) |
codeman | 0:65606abcae36 | 197 | { |
codeman | 0:65606abcae36 | 198 | sendInt(Ymax); |
codeman | 0:65606abcae36 | 199 | putc('\r'); |
codeman | 0:65606abcae36 | 200 | waitForCR(); |
codeman | 0:65606abcae36 | 201 | } |
codeman | 0:65606abcae36 | 202 | |
codeman | 0:65606abcae36 | 203 | void ezLCD3::string( int ID ) { |
codeman | 0:65606abcae36 | 204 | |
codeman | 0:65606abcae36 | 205 | } |
codeman | 0:65606abcae36 | 206 | |
codeman | 0:65606abcae36 | 207 | void ezLCD3::string( int ID , char *str) { |
codeman | 0:65606abcae36 | 208 | |
codeman | 0:65606abcae36 | 209 | } |
codeman | 0:65606abcae36 | 210 | */ |
codeman | 0:65606abcae36 | 211 | void ezLCD3::reverseMode() |
codeman | 0:65606abcae36 | 212 | { |
codeman | 0:65606abcae36 | 213 | putc(0x7c); |
codeman | 0:65606abcae36 | 214 | putc(0x12); |
codeman | 0:65606abcae36 | 215 | } |
codeman | 0:65606abcae36 | 216 | |
codeman | 0:65606abcae36 | 217 | void ezLCD3::resolution(int type) |
codeman | 0:65606abcae36 | 218 | { |
codeman | 0:65606abcae36 | 219 | switch (type) { |
codeman | 0:65606abcae36 | 220 | case LCD_128x64 : |
codeman | 0:65606abcae36 | 221 | resolution(128, 64); |
codeman | 0:65606abcae36 | 222 | break; |
codeman | 0:65606abcae36 | 223 | case LCD_160x128 : |
codeman | 0:65606abcae36 | 224 | resolution(160, 128); |
codeman | 0:65606abcae36 | 225 | break; |
codeman | 0:65606abcae36 | 226 | } |
codeman | 0:65606abcae36 | 227 | } |
codeman | 0:65606abcae36 | 228 | |
codeman | 0:65606abcae36 | 229 | void ezLCD3::print( char *str ) |
codeman | 0:65606abcae36 | 230 | { |
codeman | 0:65606abcae36 | 231 | unsigned char c; |
codeman | 0:65606abcae36 | 232 | sendInt(Print); |
codeman | 0:65606abcae36 | 233 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 234 | _ser.putc('\"'); |
codeman | 0:65606abcae36 | 235 | while( (c = *str++) ) |
codeman | 0:65606abcae36 | 236 | _ser.putc(c); |
codeman | 0:65606abcae36 | 237 | _ser.putc('\"'); |
codeman | 0:65606abcae36 | 238 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 239 | waitForCR(); |
codeman | 0:65606abcae36 | 240 | } |
codeman | 0:65606abcae36 | 241 | |
codeman | 0:65606abcae36 | 242 | void ezLCD3::resolution(int x, int y) |
codeman | 0:65606abcae36 | 243 | { |
codeman | 0:65606abcae36 | 244 | _xMax = x; |
codeman | 0:65606abcae36 | 245 | _yMax = y; |
codeman | 0:65606abcae36 | 246 | } |
codeman | 0:65606abcae36 | 247 | |
codeman | 0:65606abcae36 | 248 | int ezLCD3::_putc( int c) |
codeman | 0:65606abcae36 | 249 | { |
codeman | 0:65606abcae36 | 250 | _ser.putc('2'); |
codeman | 0:65606abcae36 | 251 | _ser.putc('5'); |
codeman | 0:65606abcae36 | 252 | _ser.putc(' '); |
codeman | 0:65606abcae36 | 253 | _ser.putc('\"'); |
codeman | 0:65606abcae36 | 254 | _ser.putc(c); |
codeman | 0:65606abcae36 | 255 | _ser.putc('\"'); |
codeman | 0:65606abcae36 | 256 | _ser.putc('\r'); |
codeman | 0:65606abcae36 | 257 | waitForCR(); |
codeman | 0:65606abcae36 | 258 | return (c); |
codeman | 0:65606abcae36 | 259 | } |
codeman | 0:65606abcae36 | 260 | |
codeman | 0:65606abcae36 | 261 | int ezLCD3::_getc(void) |
codeman | 0:65606abcae36 | 262 | { |
codeman | 0:65606abcae36 | 263 | char r = 0; |
codeman | 0:65606abcae36 | 264 | return(r); |
codeman | 0:65606abcae36 | 265 | } |
codeman | 0:65606abcae36 | 266 | |
codeman | 0:65606abcae36 | 267 | int ezLCD3::putc ( int c ) |
codeman | 0:65606abcae36 | 268 | { |
codeman | 0:65606abcae36 | 269 | return(_ser.putc(c)); |
codeman | 0:65606abcae36 | 270 | } |
codeman | 0:65606abcae36 | 271 | |
codeman | 0:65606abcae36 | 272 | int ezLCD3::getc (void) |
codeman | 0:65606abcae36 | 273 | { |
codeman | 0:65606abcae36 | 274 | return(_ser.getc()); |
codeman | 0:65606abcae36 | 275 | } |
codeman | 0:65606abcae36 | 276 | |
codeman | 0:65606abcae36 | 277 | void ezLCD3::lcdbaud(int b) |
codeman | 0:65606abcae36 | 278 | { |
codeman | 0:65606abcae36 | 279 | if (b > 0 && b < 7) { |
codeman | 0:65606abcae36 | 280 | putc(0x7c); |
codeman | 0:65606abcae36 | 281 | putc(0x07); |
codeman | 0:65606abcae36 | 282 | putc(b+'0'); |
codeman | 0:65606abcae36 | 283 | } |
codeman | 0:65606abcae36 | 284 | } |
codeman | 0:65606abcae36 | 285 |