LS020.h is a MobileLCD library for the LS020 display (used in GSM Siemens S65 family). Resolution 176x132
LS020LCD.cpp@2:d048f09dcfb0, 2010-12-08 (annotated)
- Committer:
- Wimpie
- Date:
- Wed Dec 08 19:29:42 2010 +0000
- Revision:
- 2:d048f09dcfb0
- Parent:
- 1:2269e07af50b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wimpie | 1:2269e07af50b | 1 | /* mbed LS020 Library, for driving the LCD display LS020 from SHARP used in |
Wimpie | 1:2269e07af50b | 2 | * GSM S65 Siemens |
Wimpie | 1:2269e07af50b | 3 | * |
Wimpie | 1:2269e07af50b | 4 | * Copyright (c) 2010, Wim De Roeve, thanks to Christian Kranz research |
Wimpie | 1:2269e07af50b | 5 | * |
Wimpie | 0:d550841cd6eb | 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
Wimpie | 0:d550841cd6eb | 7 | * of this software and associated documentation files (the "Software"), to deal |
Wimpie | 0:d550841cd6eb | 8 | * in the Software without restriction, including without limitation the rights |
Wimpie | 0:d550841cd6eb | 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
Wimpie | 0:d550841cd6eb | 10 | * copies of the Software, and to permit persons to whom the Software is |
Wimpie | 0:d550841cd6eb | 11 | * furnished to do so, subject to the following conditions: |
Wimpie | 0:d550841cd6eb | 12 | * |
Wimpie | 0:d550841cd6eb | 13 | * The above copyright notice and this permission notice shall be included in |
Wimpie | 0:d550841cd6eb | 14 | * all copies or substantial portions of the Software. |
Wimpie | 0:d550841cd6eb | 15 | * |
Wimpie | 0:d550841cd6eb | 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
Wimpie | 0:d550841cd6eb | 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
Wimpie | 0:d550841cd6eb | 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
Wimpie | 0:d550841cd6eb | 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
Wimpie | 0:d550841cd6eb | 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
Wimpie | 0:d550841cd6eb | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
Wimpie | 0:d550841cd6eb | 22 | * THE SOFTWARE. |
Wimpie | 0:d550841cd6eb | 23 | */ |
Wimpie | 0:d550841cd6eb | 24 | |
Wimpie | 0:d550841cd6eb | 25 | #include "LS020LCD.h" |
Wimpie | 0:d550841cd6eb | 26 | #include "mbed.h" |
Wimpie | 0:d550841cd6eb | 27 | |
Wimpie | 0:d550841cd6eb | 28 | #include "fonts/font_6x8.h" |
Wimpie | 0:d550841cd6eb | 29 | #include "fonts/font_8x8.h" |
Wimpie | 0:d550841cd6eb | 30 | #include "fonts/font_8x12.h" |
Wimpie | 0:d550841cd6eb | 31 | #include "fonts/font_clock.h" |
Wimpie | 0:d550841cd6eb | 32 | |
Wimpie | 0:d550841cd6eb | 33 | #define TINYFONT (0) //6x8 |
Wimpie | 0:d550841cd6eb | 34 | #define TINYFONT_NAME font0 |
Wimpie | 0:d550841cd6eb | 35 | #define TINYFONT_START FONT0_START |
Wimpie | 0:d550841cd6eb | 36 | #define TINYFONT_WIDTH FONT0_WIDTH |
Wimpie | 0:d550841cd6eb | 37 | #define TINYFONT_HEIGHT FONT0_HEIGHT |
Wimpie | 0:d550841cd6eb | 38 | #define SMALLFONT (1) //8x8 |
Wimpie | 0:d550841cd6eb | 39 | #define SMALLFONT_NAME font1 |
Wimpie | 0:d550841cd6eb | 40 | #define SMALLFONT_START FONT1_START |
Wimpie | 0:d550841cd6eb | 41 | #define SMALLFONT_WIDTH FONT1_WIDTH |
Wimpie | 0:d550841cd6eb | 42 | #define SMALLFONT_HEIGHT FONT1_HEIGHT |
Wimpie | 0:d550841cd6eb | 43 | #define NORMALFONT (2) //8x12 |
Wimpie | 0:d550841cd6eb | 44 | #define NORMALFONT_NAME font2 |
Wimpie | 0:d550841cd6eb | 45 | #define NORMALFONT_START FONT2_START |
Wimpie | 0:d550841cd6eb | 46 | #define NORMALFONT_WIDTH FONT2_WIDTH |
Wimpie | 0:d550841cd6eb | 47 | #define NORMALFONT_HEIGHT FONT2_HEIGHT |
Wimpie | 0:d550841cd6eb | 48 | #define TIMEFONT (3) //Clock |
Wimpie | 0:d550841cd6eb | 49 | #define TIMEFONT_NAME font3 |
Wimpie | 0:d550841cd6eb | 50 | #define TIMEFONT_START FONT3_START |
Wimpie | 0:d550841cd6eb | 51 | #define TIMEFONT_WIDTH FONT3_WIDTH |
Wimpie | 0:d550841cd6eb | 52 | #define TIMEFONT_HEIGHT FONT3_HEIGHT |
Wimpie | 0:d550841cd6eb | 53 | |
Wimpie | 0:d550841cd6eb | 54 | // colors in 8 bit mode BGR off RRRGGGBB |
Wimpie | 0:d550841cd6eb | 55 | #define BLACK 0x00 |
Wimpie | 0:d550841cd6eb | 56 | #define WHITE 0xFF |
Wimpie | 0:d550841cd6eb | 57 | #define RED 0xE0 |
Wimpie | 0:d550841cd6eb | 58 | #define GREEN 0x1C |
Wimpie | 0:d550841cd6eb | 59 | #define BLUE 0x03 |
Wimpie | 0:d550841cd6eb | 60 | |
Wimpie | 0:d550841cd6eb | 61 | using namespace mbed; |
Wimpie | 0:d550841cd6eb | 62 | |
Wimpie | 0:d550841cd6eb | 63 | unsigned int checkbit(const unsigned long *data, unsigned int nr); |
Wimpie | 0:d550841cd6eb | 64 | |
Wimpie | 0:d550841cd6eb | 65 | |
Wimpie | 0:d550841cd6eb | 66 | LS020LCD::LS020LCD(PinName mosi, PinName miso, PinName clk, PinName cs, PinName rst, PinName rs) |
Wimpie | 0:d550841cd6eb | 67 | : _spi(mosi, miso, clk) |
Wimpie | 0:d550841cd6eb | 68 | , _rst(rst) |
Wimpie | 0:d550841cd6eb | 69 | , _cs(cs) |
Wimpie | 0:d550841cd6eb | 70 | , _rs(rs) { |
Wimpie | 0:d550841cd6eb | 71 | _rotate=false; |
Wimpie | 0:d550841cd6eb | 72 | _mirror=false; |
Wimpie | 0:d550841cd6eb | 73 | reset(); |
Wimpie | 0:d550841cd6eb | 74 | } |
Wimpie | 0:d550841cd6eb | 75 | |
Wimpie | 0:d550841cd6eb | 76 | void LS020LCD::write_cmdRG(uint8_t reg, uint8_t param) { |
Wimpie | 0:d550841cd6eb | 77 | _rs = 1; //cmd |
Wimpie | 0:d550841cd6eb | 78 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 79 | _spi.write(reg); |
Wimpie | 0:d550841cd6eb | 80 | _spi.write(param); |
Wimpie | 0:d550841cd6eb | 81 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 82 | } |
Wimpie | 0:d550841cd6eb | 83 | |
Wimpie | 0:d550841cd6eb | 84 | void LS020LCD::write_cmd8(uint8_t cmd8) { |
Wimpie | 0:d550841cd6eb | 85 | _rs = 1; //cmd |
Wimpie | 0:d550841cd6eb | 86 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 87 | _spi.write(cmd8); |
Wimpie | 0:d550841cd6eb | 88 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 89 | } |
Wimpie | 0:d550841cd6eb | 90 | |
Wimpie | 0:d550841cd6eb | 91 | void LS020LCD::write_cmd16(uint16_t cmd16) { |
Wimpie | 0:d550841cd6eb | 92 | _rs = 1; //cmd |
Wimpie | 0:d550841cd6eb | 93 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 94 | _spi.write((cmd16>>8)&0xFF); |
Wimpie | 0:d550841cd6eb | 95 | _spi.write(cmd16&0xFF); |
Wimpie | 0:d550841cd6eb | 96 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 97 | } |
Wimpie | 0:d550841cd6eb | 98 | |
Wimpie | 0:d550841cd6eb | 99 | void LS020LCD::write_data8(char data) { |
Wimpie | 0:d550841cd6eb | 100 | _rs = 0; //data |
Wimpie | 0:d550841cd6eb | 101 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 102 | _spi.write(data); |
Wimpie | 0:d550841cd6eb | 103 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 104 | } |
Wimpie | 0:d550841cd6eb | 105 | |
Wimpie | 0:d550841cd6eb | 106 | void LS020LCD::write_data16(uint16_t cmd16) { |
Wimpie | 0:d550841cd6eb | 107 | _rs = 0; //data |
Wimpie | 0:d550841cd6eb | 108 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 109 | _spi.write((cmd16>>8)&0xFF); |
Wimpie | 0:d550841cd6eb | 110 | _spi.write(cmd16&0xFF); |
Wimpie | 0:d550841cd6eb | 111 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 112 | } |
Wimpie | 0:d550841cd6eb | 113 | |
Wimpie | 0:d550841cd6eb | 114 | void LS020LCD::draw(uint16_t cmd16) { |
Wimpie | 0:d550841cd6eb | 115 | _spi.write((cmd16>>8)&0xFF); |
Wimpie | 0:d550841cd6eb | 116 | _spi.write(cmd16&0xFF); |
Wimpie | 0:d550841cd6eb | 117 | } |
Wimpie | 0:d550841cd6eb | 118 | |
Wimpie | 0:d550841cd6eb | 119 | void LS020LCD::drawstop(void) { |
Wimpie | 0:d550841cd6eb | 120 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 121 | } |
Wimpie | 0:d550841cd6eb | 122 | |
Wimpie | 0:d550841cd6eb | 123 | |
Wimpie | 0:d550841cd6eb | 124 | void LS020LCD::drawstart(void) { |
Wimpie | 0:d550841cd6eb | 125 | _rs = 0; //data |
Wimpie | 0:d550841cd6eb | 126 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 127 | } |
Wimpie | 0:d550841cd6eb | 128 | |
Wimpie | 0:d550841cd6eb | 129 | void LS020LCD::locate(int column, int row) { |
Wimpie | 0:d550841cd6eb | 130 | _row = row; |
Wimpie | 0:d550841cd6eb | 131 | _column = column; |
Wimpie | 0:d550841cd6eb | 132 | } |
Wimpie | 0:d550841cd6eb | 133 | |
Wimpie | 0:d550841cd6eb | 134 | void LS020LCD::newline() { |
Wimpie | 0:d550841cd6eb | 135 | _column = 0; |
Wimpie | 0:d550841cd6eb | 136 | _row++; |
Wimpie | 0:d550841cd6eb | 137 | if (_row >= _rows) { |
Wimpie | 0:d550841cd6eb | 138 | _row = 0; |
Wimpie | 0:d550841cd6eb | 139 | } |
Wimpie | 0:d550841cd6eb | 140 | } |
Wimpie | 0:d550841cd6eb | 141 | |
Wimpie | 0:d550841cd6eb | 142 | int LS020LCD::columns() { |
Wimpie | 0:d550841cd6eb | 143 | return _columns; |
Wimpie | 0:d550841cd6eb | 144 | } |
Wimpie | 0:d550841cd6eb | 145 | |
Wimpie | 0:d550841cd6eb | 146 | int LS020LCD::rows() { |
Wimpie | 0:d550841cd6eb | 147 | return _rows; |
Wimpie | 0:d550841cd6eb | 148 | } |
Wimpie | 0:d550841cd6eb | 149 | |
Wimpie | 0:d550841cd6eb | 150 | // ***************** Init and reset |
Wimpie | 0:d550841cd6eb | 151 | |
Wimpie | 0:d550841cd6eb | 152 | void LS020LCD::orientation(bool rotate, bool mirror) { |
Wimpie | 0:d550841cd6eb | 153 | _rotate=rotate; |
Wimpie | 0:d550841cd6eb | 154 | _mirror=mirror; |
Wimpie | 0:d550841cd6eb | 155 | |
Wimpie | 2:d048f09dcfb0 | 156 | if (_rotate==0) { //default = 176 x 132 |
Wimpie | 0:d550841cd6eb | 157 | _width=132; |
Wimpie | 0:d550841cd6eb | 158 | _height=176; |
Wimpie | 0:d550841cd6eb | 159 | } else { //132 x 176 |
Wimpie | 0:d550841cd6eb | 160 | _width=176; |
Wimpie | 0:d550841cd6eb | 161 | _height=132; |
Wimpie | 0:d550841cd6eb | 162 | } |
Wimpie | 0:d550841cd6eb | 163 | } |
Wimpie | 0:d550841cd6eb | 164 | |
Wimpie | 0:d550841cd6eb | 165 | void LS020LCD::reset(void) { |
Wimpie | 0:d550841cd6eb | 166 | |
Wimpie | 0:d550841cd6eb | 167 | const unsigned char init_array_0[20]={ |
Wimpie | 0:d550841cd6eb | 168 | 0xEF, 0x00, 0xEE, 0x04, 0x1B, 0x04, 0xFE, 0xFE, |
Wimpie | 0:d550841cd6eb | 169 | 0xFE, 0xFE, 0xEF, 0x90, 0x4A, 0x04, 0x7F, 0x3F, |
Wimpie | 0:d550841cd6eb | 170 | 0xEE, 0x04, 0x43, 0x06 |
Wimpie | 0:d550841cd6eb | 171 | }; |
Wimpie | 0:d550841cd6eb | 172 | |
Wimpie | 0:d550841cd6eb | 173 | const unsigned char init_array_1[46]= { |
Wimpie | 0:d550841cd6eb | 174 | 0xEF, 0x90, 0x09, 0x83, 0x08, 0x00, 0x0B, 0xAF, |
Wimpie | 0:d550841cd6eb | 175 | 0x0A, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, |
Wimpie | 0:d550841cd6eb | 176 | 0xEF, 0x00, 0xEE, 0x0C, 0xEF, 0x90, 0x00, 0x80, |
Wimpie | 0:d550841cd6eb | 177 | 0xEF, 0xB0, 0x49, 0x02, 0xEF, 0x00, 0x7F, 0x01, |
Wimpie | 0:d550841cd6eb | 178 | 0xE1, 0x81, 0xE2, 0x02, 0xE2, 0x76, 0xE1, 0x83, |
Wimpie | 0:d550841cd6eb | 179 | 0x80, 0x01, 0xEF, 0x90, 0x00, 0x00 |
Wimpie | 0:d550841cd6eb | 180 | }; |
Wimpie | 0:d550841cd6eb | 181 | |
Wimpie | 0:d550841cd6eb | 182 | int i; |
Wimpie | 0:d550841cd6eb | 183 | |
Wimpie | 0:d550841cd6eb | 184 | // Setup the spi for 8 bit data, high steady state clock, |
Wimpie | 0:d550841cd6eb | 185 | // second edge capture, with a 8MHz clock rate |
Wimpie | 0:d550841cd6eb | 186 | |
Wimpie | 0:d550841cd6eb | 187 | _spi.format(8,3); |
Wimpie | 0:d550841cd6eb | 188 | _spi.frequency(8000000); |
Wimpie | 0:d550841cd6eb | 189 | |
Wimpie | 0:d550841cd6eb | 190 | //reset |
Wimpie | 0:d550841cd6eb | 191 | _cs = 1; |
Wimpie | 0:d550841cd6eb | 192 | _rs = 1; |
Wimpie | 0:d550841cd6eb | 193 | _rst= 0; |
Wimpie | 0:d550841cd6eb | 194 | |
Wimpie | 0:d550841cd6eb | 195 | wait_ms(50); |
Wimpie | 0:d550841cd6eb | 196 | |
Wimpie | 0:d550841cd6eb | 197 | _rst = 1; |
Wimpie | 0:d550841cd6eb | 198 | wait_ms(50); |
Wimpie | 0:d550841cd6eb | 199 | _cs = 0; |
Wimpie | 0:d550841cd6eb | 200 | |
Wimpie | 0:d550841cd6eb | 201 | write_cmd16(0xFDFD); |
Wimpie | 0:d550841cd6eb | 202 | write_cmd16(0xFDFD); |
Wimpie | 0:d550841cd6eb | 203 | |
Wimpie | 0:d550841cd6eb | 204 | wait_ms(68); |
Wimpie | 0:d550841cd6eb | 205 | |
Wimpie | 0:d550841cd6eb | 206 | //init part 1 |
Wimpie | 0:d550841cd6eb | 207 | for (i=0;i<20;i++) { |
Wimpie | 0:d550841cd6eb | 208 | write_cmd8(init_array_0[i]); |
Wimpie | 0:d550841cd6eb | 209 | } |
Wimpie | 0:d550841cd6eb | 210 | |
Wimpie | 0:d550841cd6eb | 211 | //important: wait 10ms |
Wimpie | 0:d550841cd6eb | 212 | wait_ms(10); |
Wimpie | 0:d550841cd6eb | 213 | |
Wimpie | 0:d550841cd6eb | 214 | //init part 2 |
Wimpie | 0:d550841cd6eb | 215 | for (i=0;i<46;i++) { |
Wimpie | 0:d550841cd6eb | 216 | write_cmd8(init_array_1[i]); |
Wimpie | 0:d550841cd6eb | 217 | } |
Wimpie | 0:d550841cd6eb | 218 | |
Wimpie | 0:d550841cd6eb | 219 | orientation(_rotate,_mirror); |
Wimpie | 0:d550841cd6eb | 220 | set_window(0, 0, (_width-1), (_height-1)); |
Wimpie | 0:d550841cd6eb | 221 | |
Wimpie | 0:d550841cd6eb | 222 | _foreground=BLACK; |
Wimpie | 0:d550841cd6eb | 223 | _background=WHITE; |
Wimpie | 0:d550841cd6eb | 224 | _row=0; |
Wimpie | 0:d550841cd6eb | 225 | _column=0; |
Wimpie | 0:d550841cd6eb | 226 | _font=1; |
Wimpie | 0:d550841cd6eb | 227 | |
Wimpie | 0:d550841cd6eb | 228 | cls(); |
Wimpie | 0:d550841cd6eb | 229 | |
Wimpie | 0:d550841cd6eb | 230 | return; |
Wimpie | 0:d550841cd6eb | 231 | |
Wimpie | 0:d550841cd6eb | 232 | }; |
Wimpie | 0:d550841cd6eb | 233 | |
Wimpie | 0:d550841cd6eb | 234 | // ***************** MODE settings |
Wimpie | 0:d550841cd6eb | 235 | |
Wimpie | 0:d550841cd6eb | 236 | void LS020LCD::set_8bit_mode(char BGR) { |
Wimpie | 0:d550841cd6eb | 237 | // BGR=0 - disabled, BGR=1 - enabled. |
Wimpie | 0:d550841cd6eb | 238 | write_cmd16(0xE800+(BGR&0x01)*0x40); |
Wimpie | 0:d550841cd6eb | 239 | } |
Wimpie | 0:d550841cd6eb | 240 | |
Wimpie | 0:d550841cd6eb | 241 | void LS020LCD::set_16bit_mode(void) { |
Wimpie | 0:d550841cd6eb | 242 | write_cmd16(0xE80F); |
Wimpie | 0:d550841cd6eb | 243 | } |
Wimpie | 0:d550841cd6eb | 244 | |
Wimpie | 0:d550841cd6eb | 245 | void LS020LCD::set_8_color_mode(void) { |
Wimpie | 0:d550841cd6eb | 246 | write_cmd16(0x0401); |
Wimpie | 0:d550841cd6eb | 247 | write_cmd16(0x0000); |
Wimpie | 0:d550841cd6eb | 248 | } |
Wimpie | 0:d550841cd6eb | 249 | |
Wimpie | 0:d550841cd6eb | 250 | void LS020LCD::set_65k_color_mode(void) { |
Wimpie | 0:d550841cd6eb | 251 | write_cmd16(0x0400); |
Wimpie | 0:d550841cd6eb | 252 | write_cmd16(0x0000); |
Wimpie | 0:d550841cd6eb | 253 | } |
Wimpie | 0:d550841cd6eb | 254 | |
Wimpie | 0:d550841cd6eb | 255 | void LS020LCD::foreground(unsigned int color) { |
Wimpie | 0:d550841cd6eb | 256 | _foreground = color; |
Wimpie | 0:d550841cd6eb | 257 | } |
Wimpie | 0:d550841cd6eb | 258 | |
Wimpie | 0:d550841cd6eb | 259 | void LS020LCD::background(unsigned int color) { |
Wimpie | 0:d550841cd6eb | 260 | _background = color; |
Wimpie | 0:d550841cd6eb | 261 | } |
Wimpie | 0:d550841cd6eb | 262 | |
Wimpie | 0:d550841cd6eb | 263 | // **************** |
Wimpie | 0:d550841cd6eb | 264 | |
Wimpie | 0:d550841cd6eb | 265 | void LS020LCD::set_cursor(unsigned int x, unsigned int y) { |
Wimpie | 0:d550841cd6eb | 266 | write_cmd16(0xEF90); |
Wimpie | 0:d550841cd6eb | 267 | |
Wimpie | 0:d550841cd6eb | 268 | if (_rotate) { |
Wimpie | 0:d550841cd6eb | 269 | if (_mirror) { |
Wimpie | 0:d550841cd6eb | 270 | write_cmdRG(0x06, (_width-1)-x); //set x cursor pos |
Wimpie | 0:d550841cd6eb | 271 | write_cmdRG(0x07, (_height-1)-y); //set y cursor pos |
Wimpie | 0:d550841cd6eb | 272 | } else { |
Wimpie | 0:d550841cd6eb | 273 | write_cmdRG(0x06, x); //set x cursor pos |
Wimpie | 0:d550841cd6eb | 274 | write_cmdRG(0x07, y); //set y cursor pos |
Wimpie | 0:d550841cd6eb | 275 | } |
Wimpie | 0:d550841cd6eb | 276 | } else { |
Wimpie | 0:d550841cd6eb | 277 | if (_mirror) { |
Wimpie | 0:d550841cd6eb | 278 | write_cmdRG(0x06, (_height-1)-y); //set y cursor pos |
Wimpie | 0:d550841cd6eb | 279 | write_cmdRG(0x07, x); //set x cursor pos |
Wimpie | 0:d550841cd6eb | 280 | } else { |
Wimpie | 0:d550841cd6eb | 281 | write_cmdRG(0x06, y); //set y cursor pos |
Wimpie | 0:d550841cd6eb | 282 | write_cmdRG(0x07, (_width-1)-x); //set x cursor pos |
Wimpie | 0:d550841cd6eb | 283 | } |
Wimpie | 0:d550841cd6eb | 284 | } |
Wimpie | 0:d550841cd6eb | 285 | } |
Wimpie | 0:d550841cd6eb | 286 | |
Wimpie | 0:d550841cd6eb | 287 | void LS020LCD::set_window(char x0, char y0, char x1,char y1) { |
Wimpie | 2:d048f09dcfb0 | 288 | write_cmd16(0x0500);// Set Direction |
Wimpie | 2:d048f09dcfb0 | 289 | write_cmd16(0x0A00+x0); |
Wimpie | 2:d048f09dcfb0 | 290 | write_cmd16(0x0B00+x1); |
Wimpie | 2:d048f09dcfb0 | 291 | write_cmd16(0x0800+y0); |
Wimpie | 2:d048f09dcfb0 | 292 | write_cmd16(0x0900+y1); |
Wimpie | 0:d550841cd6eb | 293 | |
Wimpie | 2:d048f09dcfb0 | 294 | /* |
Wimpie | 2:d048f09dcfb0 | 295 | write_cmd16(0xEF90); |
Wimpie | 2:d048f09dcfb0 | 296 | |
Wimpie | 0:d550841cd6eb | 297 | if (_rotate) { |
Wimpie | 0:d550841cd6eb | 298 | if (_mirror) { |
Wimpie | 0:d550841cd6eb | 299 | write_cmdRG(0x08, (_width-1)-x0); //set x0 |
Wimpie | 0:d550841cd6eb | 300 | write_cmdRG(0x09, (_width-1)-x1); //set x1 |
Wimpie | 0:d550841cd6eb | 301 | write_cmdRG(0x0A, (_height-1)-y0); //set y0 |
Wimpie | 0:d550841cd6eb | 302 | write_cmdRG(0x0B, (_height-1)-y1); //set y1 |
Wimpie | 0:d550841cd6eb | 303 | } else { |
Wimpie | 0:d550841cd6eb | 304 | write_cmdRG(0x08, x0); //set x0 |
Wimpie | 0:d550841cd6eb | 305 | write_cmdRG(0x09, x1); //set x1 |
Wimpie | 0:d550841cd6eb | 306 | write_cmdRG(0x0A, y0); //set y0 |
Wimpie | 0:d550841cd6eb | 307 | write_cmdRG(0x0B, y1); //set y1 |
Wimpie | 0:d550841cd6eb | 308 | } |
Wimpie | 0:d550841cd6eb | 309 | } else { |
Wimpie | 0:d550841cd6eb | 310 | if (_mirror) { |
Wimpie | 0:d550841cd6eb | 311 | write_cmdRG(0x08, (_height-1)-y0); //set y0 |
Wimpie | 0:d550841cd6eb | 312 | write_cmdRG(0x09, (_height-1)-y1); //set y1 |
Wimpie | 0:d550841cd6eb | 313 | write_cmdRG(0x0A, x0); //set x0 |
Wimpie | 0:d550841cd6eb | 314 | write_cmdRG(0x0B, x1); //set x1 |
Wimpie | 0:d550841cd6eb | 315 | } else { |
Wimpie | 0:d550841cd6eb | 316 | write_cmdRG(0x08, y0); //set y0 |
Wimpie | 0:d550841cd6eb | 317 | write_cmdRG(0x09, y1); //set y1 |
Wimpie | 0:d550841cd6eb | 318 | write_cmdRG(0x0A, (_width-1)-x0); //set x0 |
Wimpie | 0:d550841cd6eb | 319 | write_cmdRG(0x0B, (_width-1)-x1); //set x1 |
Wimpie | 0:d550841cd6eb | 320 | } |
Wimpie | 0:d550841cd6eb | 321 | } |
Wimpie | 0:d550841cd6eb | 322 | |
Wimpie | 0:d550841cd6eb | 323 | //set cursor |
Wimpie | 2:d048f09dcfb0 | 324 | set_cursor(x0, y0);*/ |
Wimpie | 0:d550841cd6eb | 325 | |
Wimpie | 0:d550841cd6eb | 326 | } |
Wimpie | 0:d550841cd6eb | 327 | |
Wimpie | 0:d550841cd6eb | 328 | unsigned int LS020LCD::putc(unsigned int x, unsigned int y, unsigned int c, unsigned int size,unsigned int font, unsigned int color, unsigned int bgcolor) { |
Wimpie | 0:d550841cd6eb | 329 | unsigned int ret, i, j, width, height, w, h, wh; |
Wimpie | 0:d550841cd6eb | 330 | const unsigned long *ptr; |
Wimpie | 0:d550841cd6eb | 331 | |
Wimpie | 0:d550841cd6eb | 332 | switch (font) { |
Wimpie | 0:d550841cd6eb | 333 | case TINYFONT: |
Wimpie | 0:d550841cd6eb | 334 | c -= TINYFONT_START; |
Wimpie | 0:d550841cd6eb | 335 | ptr = (const unsigned long*)&TINYFONT_NAME[c*(TINYFONT_WIDTH*TINYFONT_HEIGHT/8)]; |
Wimpie | 0:d550841cd6eb | 336 | width = TINYFONT_WIDTH; |
Wimpie | 0:d550841cd6eb | 337 | height = TINYFONT_HEIGHT; |
Wimpie | 0:d550841cd6eb | 338 | break; |
Wimpie | 0:d550841cd6eb | 339 | case SMALLFONT: |
Wimpie | 0:d550841cd6eb | 340 | c -= SMALLFONT_START; |
Wimpie | 0:d550841cd6eb | 341 | ptr = (const unsigned long*)&SMALLFONT_NAME[c*(SMALLFONT_WIDTH*SMALLFONT_HEIGHT/8)]; |
Wimpie | 0:d550841cd6eb | 342 | width = SMALLFONT_WIDTH; |
Wimpie | 0:d550841cd6eb | 343 | height = SMALLFONT_HEIGHT; |
Wimpie | 0:d550841cd6eb | 344 | break; |
Wimpie | 0:d550841cd6eb | 345 | case NORMALFONT: |
Wimpie | 0:d550841cd6eb | 346 | c -= NORMALFONT_START; |
Wimpie | 0:d550841cd6eb | 347 | ptr = (const unsigned long*)&NORMALFONT_NAME[c*(NORMALFONT_WIDTH*NORMALFONT_HEIGHT/8)]; |
Wimpie | 0:d550841cd6eb | 348 | width = NORMALFONT_WIDTH; |
Wimpie | 0:d550841cd6eb | 349 | height = NORMALFONT_HEIGHT; |
Wimpie | 0:d550841cd6eb | 350 | break; |
Wimpie | 0:d550841cd6eb | 351 | case TIMEFONT: |
Wimpie | 0:d550841cd6eb | 352 | c -= TIMEFONT_START; |
Wimpie | 0:d550841cd6eb | 353 | ptr = (const unsigned long*)&TIMEFONT_NAME[c*(TIMEFONT_WIDTH*TIMEFONT_HEIGHT/8)]; |
Wimpie | 0:d550841cd6eb | 354 | width = TIMEFONT_WIDTH; |
Wimpie | 0:d550841cd6eb | 355 | height = TIMEFONT_HEIGHT; |
Wimpie | 0:d550841cd6eb | 356 | break; |
Wimpie | 0:d550841cd6eb | 357 | } |
Wimpie | 0:d550841cd6eb | 358 | |
Wimpie | 0:d550841cd6eb | 359 | ret = x+(width*size); |
Wimpie | 0:d550841cd6eb | 360 | if (ret > _width) { |
Wimpie | 0:d550841cd6eb | 361 | return _width+1; |
Wimpie | 0:d550841cd6eb | 362 | } |
Wimpie | 0:d550841cd6eb | 363 | |
Wimpie | 0:d550841cd6eb | 364 | if (size <= 1) { |
Wimpie | 0:d550841cd6eb | 365 | set_window(x, y, x+(+width-1), y+(height-1)); |
Wimpie | 0:d550841cd6eb | 366 | drawstart(); |
Wimpie | 0:d550841cd6eb | 367 | |
Wimpie | 0:d550841cd6eb | 368 | unsigned long data, mask; |
Wimpie | 0:d550841cd6eb | 369 | for (wh=(width*height)/32; wh!=0; wh--) { |
Wimpie | 0:d550841cd6eb | 370 | data = *ptr++; |
Wimpie | 0:d550841cd6eb | 371 | //data = ((data&0xFF000000UL)>>24)|((data&0x00FF0000UL)>>8)|((data&0x0000FF00UL)<<8)|((data&0x000000FFUL)<<24); //swap32 |
Wimpie | 0:d550841cd6eb | 372 | for (mask=0x80000000UL; mask!=0UL; mask>>=1) { |
Wimpie | 0:d550841cd6eb | 373 | if (data & mask) { |
Wimpie | 0:d550841cd6eb | 374 | draw(color); |
Wimpie | 0:d550841cd6eb | 375 | } else { |
Wimpie | 0:d550841cd6eb | 376 | draw(bgcolor); |
Wimpie | 0:d550841cd6eb | 377 | } |
Wimpie | 0:d550841cd6eb | 378 | } |
Wimpie | 0:d550841cd6eb | 379 | } |
Wimpie | 0:d550841cd6eb | 380 | |
Wimpie | 0:d550841cd6eb | 381 | drawstop(); |
Wimpie | 0:d550841cd6eb | 382 | } else { |
Wimpie | 0:d550841cd6eb | 383 | set_window(x, y, x+(width*size)-1, y+(height*size)-1); |
Wimpie | 0:d550841cd6eb | 384 | drawstart(); |
Wimpie | 0:d550841cd6eb | 385 | |
Wimpie | 0:d550841cd6eb | 386 | unsigned int bit; |
Wimpie | 0:d550841cd6eb | 387 | wh = (width*height); |
Wimpie | 0:d550841cd6eb | 388 | for (h=0; h<wh; h+=width) { |
Wimpie | 0:d550841cd6eb | 389 | for (i=size; i!=0; i--) { |
Wimpie | 0:d550841cd6eb | 390 | bit = h; |
Wimpie | 0:d550841cd6eb | 391 | for (w=0; w<width; w++) { |
Wimpie | 0:d550841cd6eb | 392 | if (checkbit(ptr, bit++)) { |
Wimpie | 0:d550841cd6eb | 393 | for (j=size; j!=0; j--) { |
Wimpie | 0:d550841cd6eb | 394 | draw(color); |
Wimpie | 0:d550841cd6eb | 395 | } |
Wimpie | 0:d550841cd6eb | 396 | } else { |
Wimpie | 0:d550841cd6eb | 397 | for (j=size; j!=0; j--) { |
Wimpie | 0:d550841cd6eb | 398 | draw(bgcolor); |
Wimpie | 0:d550841cd6eb | 399 | } |
Wimpie | 0:d550841cd6eb | 400 | } |
Wimpie | 0:d550841cd6eb | 401 | } |
Wimpie | 0:d550841cd6eb | 402 | } |
Wimpie | 0:d550841cd6eb | 403 | } |
Wimpie | 0:d550841cd6eb | 404 | |
Wimpie | 0:d550841cd6eb | 405 | drawstop(); |
Wimpie | 0:d550841cd6eb | 406 | } |
Wimpie | 0:d550841cd6eb | 407 | |
Wimpie | 0:d550841cd6eb | 408 | return ret; |
Wimpie | 0:d550841cd6eb | 409 | } |
Wimpie | 0:d550841cd6eb | 410 | |
Wimpie | 0:d550841cd6eb | 411 | |
Wimpie | 0:d550841cd6eb | 412 | void LS020LCD::fillrectangle(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 413 | unsigned int wh, tmp; |
Wimpie | 0:d550841cd6eb | 414 | |
Wimpie | 0:d550841cd6eb | 415 | if (x0 > x1) { |
Wimpie | 0:d550841cd6eb | 416 | tmp = x0; |
Wimpie | 0:d550841cd6eb | 417 | x0 = x1; |
Wimpie | 0:d550841cd6eb | 418 | x1 = tmp; |
Wimpie | 0:d550841cd6eb | 419 | } |
Wimpie | 0:d550841cd6eb | 420 | if (y0 > y1) { |
Wimpie | 0:d550841cd6eb | 421 | tmp = y0; |
Wimpie | 0:d550841cd6eb | 422 | y0 = y1; |
Wimpie | 0:d550841cd6eb | 423 | y1 = tmp; |
Wimpie | 0:d550841cd6eb | 424 | } |
Wimpie | 0:d550841cd6eb | 425 | |
Wimpie | 0:d550841cd6eb | 426 | if ((x1 >= _width) || |
Wimpie | 0:d550841cd6eb | 427 | (y1 >= _height)) { |
Wimpie | 0:d550841cd6eb | 428 | return; |
Wimpie | 0:d550841cd6eb | 429 | } |
Wimpie | 0:d550841cd6eb | 430 | |
Wimpie | 0:d550841cd6eb | 431 | set_window(x0, y0, x1, y1); |
Wimpie | 0:d550841cd6eb | 432 | |
Wimpie | 0:d550841cd6eb | 433 | drawstart(); |
Wimpie | 0:d550841cd6eb | 434 | for (wh=((1+(x1-x0))*(1+(y1-y0))); wh!=0; wh--) { |
Wimpie | 0:d550841cd6eb | 435 | draw(color); |
Wimpie | 0:d550841cd6eb | 436 | } |
Wimpie | 0:d550841cd6eb | 437 | drawstop(); |
Wimpie | 0:d550841cd6eb | 438 | |
Wimpie | 0:d550841cd6eb | 439 | return; |
Wimpie | 0:d550841cd6eb | 440 | } |
Wimpie | 0:d550841cd6eb | 441 | |
Wimpie | 0:d550841cd6eb | 442 | void LS020LCD::drawpixel(unsigned int x, unsigned int y, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 443 | if ((x >= _width) || |
Wimpie | 0:d550841cd6eb | 444 | (y >= _height)) { |
Wimpie | 0:d550841cd6eb | 445 | return; |
Wimpie | 0:d550841cd6eb | 446 | } |
Wimpie | 0:d550841cd6eb | 447 | set_cursor(x, y); |
Wimpie | 0:d550841cd6eb | 448 | drawstart(); |
Wimpie | 0:d550841cd6eb | 449 | draw(color); |
Wimpie | 0:d550841cd6eb | 450 | drawstop(); |
Wimpie | 0:d550841cd6eb | 451 | |
Wimpie | 0:d550841cd6eb | 452 | return; |
Wimpie | 0:d550841cd6eb | 453 | } |
Wimpie | 0:d550841cd6eb | 454 | |
Wimpie | 0:d550841cd6eb | 455 | void LS020LCD::drawline(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 456 | int dx, dy, dx2, dy2, stepx, stepy, err; |
Wimpie | 0:d550841cd6eb | 457 | |
Wimpie | 0:d550841cd6eb | 458 | if ((x0 == x1) || |
Wimpie | 0:d550841cd6eb | 459 | (y0 == y1)) { //horizontal or vertical line |
Wimpie | 0:d550841cd6eb | 460 | fillrectangle(x0, y0, x1, y1, color); |
Wimpie | 0:d550841cd6eb | 461 | } else { |
Wimpie | 0:d550841cd6eb | 462 | //calculate direction |
Wimpie | 0:d550841cd6eb | 463 | dx = x1 - x0; |
Wimpie | 0:d550841cd6eb | 464 | dy = y1 - y0; |
Wimpie | 0:d550841cd6eb | 465 | if (dx < 0) { |
Wimpie | 0:d550841cd6eb | 466 | dx = -dx; |
Wimpie | 0:d550841cd6eb | 467 | stepx = -1; |
Wimpie | 0:d550841cd6eb | 468 | } else { |
Wimpie | 0:d550841cd6eb | 469 | stepx = +1; |
Wimpie | 0:d550841cd6eb | 470 | } |
Wimpie | 0:d550841cd6eb | 471 | if (dy < 0) { |
Wimpie | 0:d550841cd6eb | 472 | dy = -dy; |
Wimpie | 0:d550841cd6eb | 473 | stepy = -1; |
Wimpie | 0:d550841cd6eb | 474 | } else { |
Wimpie | 0:d550841cd6eb | 475 | stepy = +1; |
Wimpie | 0:d550841cd6eb | 476 | } |
Wimpie | 0:d550841cd6eb | 477 | dx2 = dx << 1; |
Wimpie | 0:d550841cd6eb | 478 | dy2 = dy << 1; |
Wimpie | 0:d550841cd6eb | 479 | //draw line |
Wimpie | 0:d550841cd6eb | 480 | set_window(0, 0, (_width-1), (_height-1)); |
Wimpie | 0:d550841cd6eb | 481 | drawpixel(x0, y0, color); |
Wimpie | 0:d550841cd6eb | 482 | if (dx > dy) { |
Wimpie | 0:d550841cd6eb | 483 | err = dy2 - dx; |
Wimpie | 0:d550841cd6eb | 484 | while (x0 != x1) { |
Wimpie | 0:d550841cd6eb | 485 | if (err >= 0) { |
Wimpie | 0:d550841cd6eb | 486 | err -= dx2; |
Wimpie | 0:d550841cd6eb | 487 | y0 += stepy; |
Wimpie | 0:d550841cd6eb | 488 | } |
Wimpie | 0:d550841cd6eb | 489 | err += dy2; |
Wimpie | 0:d550841cd6eb | 490 | x0 += stepx; |
Wimpie | 0:d550841cd6eb | 491 | drawpixel(x0, y0, color); |
Wimpie | 0:d550841cd6eb | 492 | } |
Wimpie | 0:d550841cd6eb | 493 | } else { |
Wimpie | 0:d550841cd6eb | 494 | err = dx2 - dy; |
Wimpie | 0:d550841cd6eb | 495 | while (y0 != y1) { |
Wimpie | 0:d550841cd6eb | 496 | if (err >= 0) { |
Wimpie | 0:d550841cd6eb | 497 | err -= dy2; |
Wimpie | 0:d550841cd6eb | 498 | x0 += stepx; |
Wimpie | 0:d550841cd6eb | 499 | } |
Wimpie | 0:d550841cd6eb | 500 | err += dx2; |
Wimpie | 0:d550841cd6eb | 501 | y0 += stepy; |
Wimpie | 0:d550841cd6eb | 502 | drawpixel(x0, y0, color); |
Wimpie | 0:d550841cd6eb | 503 | } |
Wimpie | 0:d550841cd6eb | 504 | } |
Wimpie | 0:d550841cd6eb | 505 | } |
Wimpie | 0:d550841cd6eb | 506 | |
Wimpie | 0:d550841cd6eb | 507 | return; |
Wimpie | 0:d550841cd6eb | 508 | } |
Wimpie | 0:d550841cd6eb | 509 | |
Wimpie | 0:d550841cd6eb | 510 | void LS020LCD::drawrectangle(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 511 | fillrectangle(x0, y0, x0, y1, color); |
Wimpie | 0:d550841cd6eb | 512 | fillrectangle(x0, y1, x1, y1, color); |
Wimpie | 0:d550841cd6eb | 513 | fillrectangle(x1, y0, x1, y1, color); |
Wimpie | 0:d550841cd6eb | 514 | fillrectangle(x0, y0, x1, y0, color); |
Wimpie | 0:d550841cd6eb | 515 | |
Wimpie | 0:d550841cd6eb | 516 | return; |
Wimpie | 0:d550841cd6eb | 517 | } |
Wimpie | 0:d550841cd6eb | 518 | |
Wimpie | 0:d550841cd6eb | 519 | |
Wimpie | 0:d550841cd6eb | 520 | void LS020LCD::fillcircle(unsigned int x0, unsigned int y0, unsigned int radius, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 521 | int err, x, y; |
Wimpie | 0:d550841cd6eb | 522 | |
Wimpie | 0:d550841cd6eb | 523 | err = -radius; |
Wimpie | 0:d550841cd6eb | 524 | x = radius; |
Wimpie | 0:d550841cd6eb | 525 | y = 0; |
Wimpie | 0:d550841cd6eb | 526 | |
Wimpie | 0:d550841cd6eb | 527 | set_window(0, 0, (_width-1), (_height-1)); |
Wimpie | 0:d550841cd6eb | 528 | |
Wimpie | 0:d550841cd6eb | 529 | while (x >= y) { |
Wimpie | 0:d550841cd6eb | 530 | drawline(x0 - x, y0 + y, x0 + x, y0 + y, color); |
Wimpie | 0:d550841cd6eb | 531 | drawline(x0 - x, y0 - y, x0 + x, y0 - y, color); |
Wimpie | 0:d550841cd6eb | 532 | drawline(x0 - y, y0 + x, x0 + y, y0 + x, color); |
Wimpie | 0:d550841cd6eb | 533 | drawline(x0 - y, y0 - x, x0 + y, y0 - x, color); |
Wimpie | 0:d550841cd6eb | 534 | |
Wimpie | 0:d550841cd6eb | 535 | err += y; |
Wimpie | 0:d550841cd6eb | 536 | y++; |
Wimpie | 0:d550841cd6eb | 537 | err += y; |
Wimpie | 0:d550841cd6eb | 538 | if (err >= 0) { |
Wimpie | 0:d550841cd6eb | 539 | x--; |
Wimpie | 0:d550841cd6eb | 540 | err -= x; |
Wimpie | 0:d550841cd6eb | 541 | err -= x; |
Wimpie | 0:d550841cd6eb | 542 | } |
Wimpie | 0:d550841cd6eb | 543 | } |
Wimpie | 0:d550841cd6eb | 544 | |
Wimpie | 0:d550841cd6eb | 545 | return; |
Wimpie | 0:d550841cd6eb | 546 | } |
Wimpie | 0:d550841cd6eb | 547 | |
Wimpie | 0:d550841cd6eb | 548 | |
Wimpie | 0:d550841cd6eb | 549 | void LS020LCD::drawcircle(unsigned int x0, unsigned int y0, unsigned int radius, unsigned int color) { |
Wimpie | 0:d550841cd6eb | 550 | int err, x, y; |
Wimpie | 0:d550841cd6eb | 551 | |
Wimpie | 0:d550841cd6eb | 552 | err = -radius; |
Wimpie | 0:d550841cd6eb | 553 | x = radius; |
Wimpie | 0:d550841cd6eb | 554 | y = 0; |
Wimpie | 0:d550841cd6eb | 555 | |
Wimpie | 0:d550841cd6eb | 556 | set_window(0, 0, (_width-1), (_height-1)); |
Wimpie | 0:d550841cd6eb | 557 | |
Wimpie | 0:d550841cd6eb | 558 | while (x >= y) { |
Wimpie | 0:d550841cd6eb | 559 | drawpixel(x0 + x, y0 + y, color); |
Wimpie | 0:d550841cd6eb | 560 | drawpixel(x0 - x, y0 + y, color); |
Wimpie | 0:d550841cd6eb | 561 | drawpixel(x0 + x, y0 - y, color); |
Wimpie | 0:d550841cd6eb | 562 | drawpixel(x0 - x, y0 - y, color); |
Wimpie | 0:d550841cd6eb | 563 | drawpixel(x0 + y, y0 + x, color); |
Wimpie | 0:d550841cd6eb | 564 | drawpixel(x0 - y, y0 + x, color); |
Wimpie | 0:d550841cd6eb | 565 | drawpixel(x0 + y, y0 - x, color); |
Wimpie | 0:d550841cd6eb | 566 | drawpixel(x0 - y, y0 - x, color); |
Wimpie | 0:d550841cd6eb | 567 | |
Wimpie | 0:d550841cd6eb | 568 | err += y; |
Wimpie | 0:d550841cd6eb | 569 | y++; |
Wimpie | 0:d550841cd6eb | 570 | err += y; |
Wimpie | 0:d550841cd6eb | 571 | if (err >= 0) { |
Wimpie | 0:d550841cd6eb | 572 | x--; |
Wimpie | 0:d550841cd6eb | 573 | err -= x; |
Wimpie | 0:d550841cd6eb | 574 | err -= x; |
Wimpie | 0:d550841cd6eb | 575 | } |
Wimpie | 0:d550841cd6eb | 576 | } |
Wimpie | 0:d550841cd6eb | 577 | |
Wimpie | 0:d550841cd6eb | 578 | return; |
Wimpie | 0:d550841cd6eb | 579 | } |
Wimpie | 0:d550841cd6eb | 580 | |
Wimpie | 2:d048f09dcfb0 | 581 | void LS020LCD::rectangle8(char x1, char y1, char x2, char y2, char color) { |
Wimpie | 0:d550841cd6eb | 582 | set_window(x1,y1,x2,y2); |
Wimpie | 0:d550841cd6eb | 583 | for (char y=y1;y<=y2;y++) { |
Wimpie | 0:d550841cd6eb | 584 | for (char x=x1;x<=x2;x++) { |
Wimpie | 0:d550841cd6eb | 585 | write_data8(color); |
Wimpie | 0:d550841cd6eb | 586 | } |
Wimpie | 0:d550841cd6eb | 587 | } |
Wimpie | 0:d550841cd6eb | 588 | } |
Wimpie | 0:d550841cd6eb | 589 | |
Wimpie | 0:d550841cd6eb | 590 | |
Wimpie | 0:d550841cd6eb | 591 | void LS020LCD::putpixel(unsigned char r,unsigned char g,unsigned char b, unsigned char x, unsigned char y) { |
Wimpie | 0:d550841cd6eb | 592 | uint16_t data; |
Wimpie | 0:d550841cd6eb | 593 | write_cmd16(0xEF90); |
Wimpie | 0:d550841cd6eb | 594 | write_cmd16(0x0500); |
Wimpie | 0:d550841cd6eb | 595 | write_cmd16(0x0800+ x); |
Wimpie | 0:d550841cd6eb | 596 | write_cmd16(0x0A00+ y); |
Wimpie | 0:d550841cd6eb | 597 | write_cmd16(0x0900+ x+1); |
Wimpie | 0:d550841cd6eb | 598 | write_cmd16(0x0B00+ y+1); |
Wimpie | 0:d550841cd6eb | 599 | data=0xffff-(((uint16_t)(31*b/255))*0x800)+(((uint16_t)(63*g/255))*0x20)+(((uint16_t)(31*r/255))); |
Wimpie | 0:d550841cd6eb | 600 | write_data16(data); |
Wimpie | 0:d550841cd6eb | 601 | |
Wimpie | 0:d550841cd6eb | 602 | } |
Wimpie | 0:d550841cd6eb | 603 | void LS020LCD::put_char8(char x, char y, char symbol, char color, char bkcolor) { |
Wimpie | 0:d550841cd6eb | 604 | set_window(x,y,x+5,y+7); |
Wimpie | 0:d550841cd6eb | 605 | int offset=6*(symbol-0x20); |
Wimpie | 0:d550841cd6eb | 606 | for (char i=0;i<6;i++) { |
Wimpie | 0:d550841cd6eb | 607 | for (char j=0;j<8;j++) { |
Wimpie | 0:d550841cd6eb | 608 | if (((font0[offset+i]<<j)&0x80)==0x80) { |
Wimpie | 0:d550841cd6eb | 609 | write_data8(color); |
Wimpie | 0:d550841cd6eb | 610 | } else { |
Wimpie | 0:d550841cd6eb | 611 | write_data8(bkcolor); |
Wimpie | 0:d550841cd6eb | 612 | } |
Wimpie | 0:d550841cd6eb | 613 | } |
Wimpie | 0:d550841cd6eb | 614 | } |
Wimpie | 2:d048f09dcfb0 | 615 | } |
Wimpie | 2:d048f09dcfb0 | 616 | |
Wimpie | 2:d048f09dcfb0 | 617 | void LS020LCD::put_string8(char x, char y, char* text, char color, char bkcolor) { |
Wimpie | 2:d048f09dcfb0 | 618 | char i=0; |
Wimpie | 2:d048f09dcfb0 | 619 | char x0=0; |
Wimpie | 2:d048f09dcfb0 | 620 | while (text[i]!=0) { |
Wimpie | 2:d048f09dcfb0 | 621 | put_char8(x+x0,y,text[i],color,bkcolor); |
Wimpie | 2:d048f09dcfb0 | 622 | i++; |
Wimpie | 2:d048f09dcfb0 | 623 | x0+=6; |
Wimpie | 2:d048f09dcfb0 | 624 | } |
Wimpie | 2:d048f09dcfb0 | 625 | } |
Wimpie | 2:d048f09dcfb0 | 626 | |
Wimpie | 2:d048f09dcfb0 | 627 | void LS020LCD::draw_table(void) { |
Wimpie | 2:d048f09dcfb0 | 628 | for (char y=0; y<16; y++) { |
Wimpie | 2:d048f09dcfb0 | 629 | for (char x=0; x<16; x++) { |
Wimpie | 2:d048f09dcfb0 | 630 | rectangle8(x*10+9,y*7+5,x*10+8+9,y*7+5+5,y*16+x); |
Wimpie | 2:d048f09dcfb0 | 631 | } |
Wimpie | 2:d048f09dcfb0 | 632 | } |
Wimpie | 2:d048f09dcfb0 | 633 | } |
Wimpie | 0:d550841cd6eb | 634 | |
Wimpie | 0:d550841cd6eb | 635 | void LS020LCD::drawtext(unsigned int x, unsigned int y, char* text, unsigned int size,unsigned int font, unsigned int color, unsigned int bgcolor) { |
Wimpie | 0:d550841cd6eb | 636 | char i=0; |
Wimpie | 0:d550841cd6eb | 637 | char x0=0; |
Wimpie | 0:d550841cd6eb | 638 | |
Wimpie | 0:d550841cd6eb | 639 | while (text[i]!=0) { |
Wimpie | 0:d550841cd6eb | 640 | x=putc(x+x0,y,text[i],size,font,color,bgcolor); |
Wimpie | 0:d550841cd6eb | 641 | i++; |
Wimpie | 0:d550841cd6eb | 642 | |
Wimpie | 0:d550841cd6eb | 643 | } |
Wimpie | 0:d550841cd6eb | 644 | } |
Wimpie | 0:d550841cd6eb | 645 | |
Wimpie | 0:d550841cd6eb | 646 | void LS020LCD::cls() { |
Wimpie | 0:d550841cd6eb | 647 | fillrectangle(0, 0, _width, _height, _background); |
Wimpie | 0:d550841cd6eb | 648 | } |
Wimpie | 0:d550841cd6eb | 649 | |
Wimpie | 0:d550841cd6eb | 650 | void LS020LCD::scroll(char offset) { |
Wimpie | 0:d550841cd6eb | 651 | write_cmd16(0x1100+offset); |
Wimpie | 0:d550841cd6eb | 652 | } |
Wimpie | 0:d550841cd6eb | 653 | |
Wimpie | 0:d550841cd6eb | 654 | unsigned int checkbit(const unsigned long *data, unsigned int nr) { |
Wimpie | 0:d550841cd6eb | 655 | return (data[nr/32] & (0x80000000UL>>(nr&31))); // (data[nr/32] & (1<<(nr&31))) |
Wimpie | 0:d550841cd6eb | 656 | } |