for CountupNumber_sample3
MIP8F_SPI_Ver7.0
Ver7.0 Addtional function is SpeedMeter Sample for 4.4" MIP8F Display (Japan Display Inc)
MIP8F_SPI.cpp@1:2b85e7edcc4e, 2018-10-24 (annotated)
- Committer:
- JDI_Mbed_Team
- Date:
- Wed Oct 24 02:23:30 2018 +0000
- Revision:
- 1:2b85e7edcc4e
- Parent:
- 0:b2d46804658c
- Child:
- 2:944f2968c19f
for Video;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JDI_Mbed_Team | 0:b2d46804658c | 1 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 2 | * @file MIP8F_SPI.cpp |
JDI_Mbed_Team | 0:b2d46804658c | 3 | * @brief Library source code file: Class for JDI MIP8 display |
JDI_Mbed_Team | 0:b2d46804658c | 4 | * @details |
JDI_Mbed_Team | 0:b2d46804658c | 5 | * Copyright 2018 Japan Display Inc. |
JDI_Mbed_Team | 0:b2d46804658c | 6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
JDI_Mbed_Team | 0:b2d46804658c | 7 | * you may not use this file except in compliance with the License. |
JDI_Mbed_Team | 0:b2d46804658c | 8 | * You may obtain a copy of the License at |
JDI_Mbed_Team | 0:b2d46804658c | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
JDI_Mbed_Team | 0:b2d46804658c | 10 | * Unless required by applicable law or agreed to in writing, software |
JDI_Mbed_Team | 0:b2d46804658c | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
JDI_Mbed_Team | 0:b2d46804658c | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
JDI_Mbed_Team | 0:b2d46804658c | 13 | * See the License for the specific language governing permissions and |
JDI_Mbed_Team | 0:b2d46804658c | 14 | * limitations under the License. |
JDI_Mbed_Team | 0:b2d46804658c | 15 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 16 | |
JDI_Mbed_Team | 0:b2d46804658c | 17 | #include "mbed.h" |
JDI_Mbed_Team | 0:b2d46804658c | 18 | #include "MIP8F_SPI.h" |
JDI_Mbed_Team | 0:b2d46804658c | 19 | |
JDI_Mbed_Team | 0:b2d46804658c | 20 | // for debug |
JDI_Mbed_Team | 0:b2d46804658c | 21 | //Serial pc2(USBTX, USBRX); // tx, rx |
JDI_Mbed_Team | 0:b2d46804658c | 22 | |
JDI_Mbed_Team | 0:b2d46804658c | 23 | memLCD8::memLCD8(PinName mosi,PinName miso,PinName sclk,PinName cs,PinName disp,PinName power) |
JDI_Mbed_Team | 0:b2d46804658c | 24 | : _spi(mosi, miso, sclk),_cs(cs),_disp(disp),_power(power) |
JDI_Mbed_Team | 0:b2d46804658c | 25 | { |
JDI_Mbed_Team | 0:b2d46804658c | 26 | |
JDI_Mbed_Team | 0:b2d46804658c | 27 | _power= 0; |
JDI_Mbed_Team | 0:b2d46804658c | 28 | _disp= 0; |
JDI_Mbed_Team | 0:b2d46804658c | 29 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 30 | wait_us(100); |
JDI_Mbed_Team | 0:b2d46804658c | 31 | |
JDI_Mbed_Team | 0:b2d46804658c | 32 | _power= 1; |
JDI_Mbed_Team | 0:b2d46804658c | 33 | _spi.format(8,0); // 8bit mode3 |
JDI_Mbed_Team | 0:b2d46804658c | 34 | _spi.frequency(2000000); // 2 Mhz SPI clock |
JDI_Mbed_Team | 0:b2d46804658c | 35 | _spi.write(0x00); // mbed dummy |
JDI_Mbed_Team | 0:b2d46804658c | 36 | |
JDI_Mbed_Team | 0:b2d46804658c | 37 | /* |
JDI_Mbed_Team | 0:b2d46804658c | 38 | _cs = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 39 | command(0x02); // All crear mode |
JDI_Mbed_Team | 0:b2d46804658c | 40 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 41 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 42 | |
JDI_Mbed_Team | 0:b2d46804658c | 43 | } |
JDI_Mbed_Team | 0:b2d46804658c | 44 | |
JDI_Mbed_Team | 0:b2d46804658c | 45 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 46 | * @brief putc |
JDI_Mbed_Team | 0:b2d46804658c | 47 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 48 | int memLCD8::_putc(int value) |
JDI_Mbed_Team | 0:b2d46804658c | 49 | { |
JDI_Mbed_Team | 0:b2d46804658c | 50 | if (value == '\n') { // new line |
JDI_Mbed_Team | 0:b2d46804658c | 51 | char_x = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 52 | char_y = char_y + font[3]; |
JDI_Mbed_Team | 0:b2d46804658c | 53 | if (char_y >= _height - font[3]) { |
JDI_Mbed_Team | 0:b2d46804658c | 54 | char_y = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 55 | } |
JDI_Mbed_Team | 0:b2d46804658c | 56 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 57 | character(char_x, char_y, value); |
JDI_Mbed_Team | 0:b2d46804658c | 58 | } |
JDI_Mbed_Team | 0:b2d46804658c | 59 | return value; |
JDI_Mbed_Team | 0:b2d46804658c | 60 | } |
JDI_Mbed_Team | 0:b2d46804658c | 61 | |
JDI_Mbed_Team | 0:b2d46804658c | 62 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 63 | * @brief getc |
JDI_Mbed_Team | 0:b2d46804658c | 64 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 65 | int memLCD8::_getc() |
JDI_Mbed_Team | 0:b2d46804658c | 66 | { |
JDI_Mbed_Team | 0:b2d46804658c | 67 | return -1; |
JDI_Mbed_Team | 0:b2d46804658c | 68 | } |
JDI_Mbed_Team | 0:b2d46804658c | 69 | |
JDI_Mbed_Team | 0:b2d46804658c | 70 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 71 | * @brief set font name |
JDI_Mbed_Team | 0:b2d46804658c | 72 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 73 | void memLCD8::set_font(unsigned char* f) |
JDI_Mbed_Team | 0:b2d46804658c | 74 | { |
JDI_Mbed_Team | 0:b2d46804658c | 75 | font = f; |
JDI_Mbed_Team | 0:b2d46804658c | 76 | } |
JDI_Mbed_Team | 0:b2d46804658c | 77 | |
JDI_Mbed_Team | 0:b2d46804658c | 78 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 79 | * @brief set allocation for font |
JDI_Mbed_Team | 0:b2d46804658c | 80 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 81 | void memLCD8::locate(int x, int y) |
JDI_Mbed_Team | 0:b2d46804658c | 82 | { |
JDI_Mbed_Team | 0:b2d46804658c | 83 | char_x = x; |
JDI_Mbed_Team | 0:b2d46804658c | 84 | char_y = y; |
JDI_Mbed_Team | 0:b2d46804658c | 85 | } |
JDI_Mbed_Team | 0:b2d46804658c | 86 | /** |
JDI_Mbed_Team | 1:2b85e7edcc4e | 87 | * @brief dispay character by font. int mode:: =0 :common font(defualt), =1 : big font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 88 | * big font is that "char data" byte size is over 0xff. |
JDI_Mbed_Team | 1:2b85e7edcc4e | 89 | * |
JDI_Mbed_Team | 0:b2d46804658c | 90 | */ |
JDI_Mbed_Team | 1:2b85e7edcc4e | 91 | void memLCD8::character(int x, int y, int c,int mode) |
JDI_Mbed_Team | 0:b2d46804658c | 92 | { |
JDI_Mbed_Team | 0:b2d46804658c | 93 | unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font |
JDI_Mbed_Team | 0:b2d46804658c | 94 | unsigned char* zeichen; |
JDI_Mbed_Team | 0:b2d46804658c | 95 | unsigned char z,w; |
JDI_Mbed_Team | 0:b2d46804658c | 96 | // int index; |
JDI_Mbed_Team | 1:2b85e7edcc4e | 97 | |
JDI_Mbed_Team | 1:2b85e7edcc4e | 98 | if( mode == 0 ){ |
JDI_Mbed_Team | 1:2b85e7edcc4e | 99 | //for common font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 100 | if ((c < 31) || (c > 127)) return; // test char range |
JDI_Mbed_Team | 1:2b85e7edcc4e | 101 | offset0 = font[0]; // bytes / char |
JDI_Mbed_Team | 1:2b85e7edcc4e | 102 | hor = font[1]; // get hor size of font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 103 | vert = font[2]; // get vert size of font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 104 | bpl = font[3]; // bytes per line |
JDI_Mbed_Team | 0:b2d46804658c | 105 | |
JDI_Mbed_Team | 1:2b85e7edcc4e | 106 | if (char_x + hor > _width) { |
JDI_Mbed_Team | 1:2b85e7edcc4e | 107 | char_x = 0; |
JDI_Mbed_Team | 1:2b85e7edcc4e | 108 | char_y = char_y + vert; |
JDI_Mbed_Team | 1:2b85e7edcc4e | 109 | if (char_y >= _height - font[2]) char_y = 0; // original = font[2] T.Okamoto modified, for big font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 110 | } |
JDI_Mbed_Team | 1:2b85e7edcc4e | 111 | zeichen = &font[(c -32) * (offset0) + 4]; // start of char bitmap // original = +4 T.Okamoto modified, for big font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 112 | }else{ |
JDI_Mbed_Team | 1:2b85e7edcc4e | 113 | // for big font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 114 | if ((c < 31) || (c > 127)) return; // test char range |
JDI_Mbed_Team | 1:2b85e7edcc4e | 115 | offset0 = font[0]; // bytes / char |
JDI_Mbed_Team | 1:2b85e7edcc4e | 116 | offset1 = font[1]; // bytes / char |
JDI_Mbed_Team | 1:2b85e7edcc4e | 117 | hor = font[2]; // get hor size of font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 118 | vert = font[3]; // get vert size of font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 119 | bpl = font[4]; // bytes per line |
JDI_Mbed_Team | 0:b2d46804658c | 120 | |
JDI_Mbed_Team | 1:2b85e7edcc4e | 121 | if (char_x + hor > _width) { |
JDI_Mbed_Team | 1:2b85e7edcc4e | 122 | char_x = 0; |
JDI_Mbed_Team | 1:2b85e7edcc4e | 123 | char_y = char_y + vert; |
JDI_Mbed_Team | 1:2b85e7edcc4e | 124 | if (char_y >= _height - font[3]) char_y = 0; // original = font[2] T.Okamoto modified, for big font |
JDI_Mbed_Team | 1:2b85e7edcc4e | 125 | } |
JDI_Mbed_Team | 1:2b85e7edcc4e | 126 | zeichen = &font[(c -32) * (offset0 *256 + offset1) + 5]; // start of char bitmap // original = +4 T.Okamoto modified, for big font |
JDI_Mbed_Team | 0:b2d46804658c | 127 | } |
JDI_Mbed_Team | 1:2b85e7edcc4e | 128 | |
JDI_Mbed_Team | 0:b2d46804658c | 129 | w = zeichen[0]; // width of actual char |
JDI_Mbed_Team | 0:b2d46804658c | 130 | for (j=0; j<vert; j++) { // vert line |
JDI_Mbed_Team | 0:b2d46804658c | 131 | for (i=0; i<hor; i++) { // horz line |
JDI_Mbed_Team | 0:b2d46804658c | 132 | z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1]; |
JDI_Mbed_Team | 0:b2d46804658c | 133 | b = 1 << (j & 0x07); |
JDI_Mbed_Team | 0:b2d46804658c | 134 | // index = (y+j)*_width+(x+i); |
JDI_Mbed_Team | 0:b2d46804658c | 135 | if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground); |
JDI_Mbed_Team | 0:b2d46804658c | 136 | else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index]; |
JDI_Mbed_Team | 0:b2d46804658c | 137 | |
JDI_Mbed_Team | 0:b2d46804658c | 138 | } |
JDI_Mbed_Team | 0:b2d46804658c | 139 | } |
JDI_Mbed_Team | 0:b2d46804658c | 140 | if ((w + 2) < hor) char_x += w + 2; // x offset to next char |
JDI_Mbed_Team | 0:b2d46804658c | 141 | else char_x += hor; |
JDI_Mbed_Team | 0:b2d46804658c | 142 | } |
JDI_Mbed_Team | 0:b2d46804658c | 143 | |
JDI_Mbed_Team | 0:b2d46804658c | 144 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 145 | * @brief dispay a image from symbol data |
JDI_Mbed_Team | 0:b2d46804658c | 146 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 147 | void memLCD8::Symbol(unsigned int x, unsigned int y, unsigned char *symbol) |
JDI_Mbed_Team | 0:b2d46804658c | 148 | { |
JDI_Mbed_Team | 0:b2d46804658c | 149 | unsigned int hor,vert,bpl,j,i,b; |
JDI_Mbed_Team | 0:b2d46804658c | 150 | unsigned char* zeichen; |
JDI_Mbed_Team | 0:b2d46804658c | 151 | unsigned char z,w; |
JDI_Mbed_Team | 0:b2d46804658c | 152 | |
JDI_Mbed_Team | 0:b2d46804658c | 153 | // int index; |
JDI_Mbed_Team | 0:b2d46804658c | 154 | hor = symbol[0]; // get hor size of font |
JDI_Mbed_Team | 0:b2d46804658c | 155 | vert = symbol[1]; // get vert size of font |
JDI_Mbed_Team | 0:b2d46804658c | 156 | bpl = symbol[2]; // bytes per line |
JDI_Mbed_Team | 0:b2d46804658c | 157 | |
JDI_Mbed_Team | 0:b2d46804658c | 158 | if (char_x + hor > _width) { |
JDI_Mbed_Team | 0:b2d46804658c | 159 | char_x = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 160 | char_y = char_y + vert; |
JDI_Mbed_Team | 0:b2d46804658c | 161 | if (char_y >= _height - symbol[1]) char_y = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 162 | } |
JDI_Mbed_Team | 0:b2d46804658c | 163 | zeichen = &symbol[3]; |
JDI_Mbed_Team | 0:b2d46804658c | 164 | w = zeichen[0]; // width of actual char |
JDI_Mbed_Team | 0:b2d46804658c | 165 | for (j=0; j<vert; j++) { // vert line |
JDI_Mbed_Team | 0:b2d46804658c | 166 | for (i=0; i<hor; i++) { // horz line |
JDI_Mbed_Team | 0:b2d46804658c | 167 | z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1]; |
JDI_Mbed_Team | 0:b2d46804658c | 168 | b = 1 << (j & 0x07); |
JDI_Mbed_Team | 0:b2d46804658c | 169 | // index = (y+j)*_width+(x+i); |
JDI_Mbed_Team | 0:b2d46804658c | 170 | if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground); |
JDI_Mbed_Team | 0:b2d46804658c | 171 | else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index]; |
JDI_Mbed_Team | 0:b2d46804658c | 172 | } |
JDI_Mbed_Team | 0:b2d46804658c | 173 | } |
JDI_Mbed_Team | 0:b2d46804658c | 174 | if ((w + 2) < hor) char_x += w + 2; // x offset to next char |
JDI_Mbed_Team | 0:b2d46804658c | 175 | else char_x += hor; |
JDI_Mbed_Team | 0:b2d46804658c | 176 | } |
JDI_Mbed_Team | 0:b2d46804658c | 177 | |
JDI_Mbed_Team | 0:b2d46804658c | 178 | /* |
JDI_Mbed_Team | 0:b2d46804658c | 179 | void memLCD8::LayerCopy(void) |
JDI_Mbed_Team | 0:b2d46804658c | 180 | { |
JDI_Mbed_Team | 0:b2d46804658c | 181 | for(int i=0; i<FRAME_SIZE; i++) _LayerBUF[i] = _dispBUF[i]; |
JDI_Mbed_Team | 0:b2d46804658c | 182 | |
JDI_Mbed_Team | 0:b2d46804658c | 183 | } |
JDI_Mbed_Team | 0:b2d46804658c | 184 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 185 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 186 | * @brief dispay a circle line by color data |
JDI_Mbed_Team | 0:b2d46804658c | 187 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 188 | void memLCD8::circle(int x0, int y0, int r, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 189 | { |
JDI_Mbed_Team | 0:b2d46804658c | 190 | int x = -r, y = 0, err = 2-2*r, e2; |
JDI_Mbed_Team | 0:b2d46804658c | 191 | do { |
JDI_Mbed_Team | 0:b2d46804658c | 192 | pixel(x0-x, y0+y,color); |
JDI_Mbed_Team | 0:b2d46804658c | 193 | pixel(x0+x, y0+y,color); |
JDI_Mbed_Team | 0:b2d46804658c | 194 | pixel(x0+x, y0-y,color); |
JDI_Mbed_Team | 0:b2d46804658c | 195 | pixel(x0-x, y0-y,color); |
JDI_Mbed_Team | 0:b2d46804658c | 196 | e2 = err; |
JDI_Mbed_Team | 0:b2d46804658c | 197 | if (e2 <= y) { |
JDI_Mbed_Team | 0:b2d46804658c | 198 | err += ++y*2+1; |
JDI_Mbed_Team | 0:b2d46804658c | 199 | if (-x == y && e2 <= x) e2 = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 200 | } |
JDI_Mbed_Team | 0:b2d46804658c | 201 | if (e2 > x) err += ++x*2+1; |
JDI_Mbed_Team | 0:b2d46804658c | 202 | } while (x <= 0); |
JDI_Mbed_Team | 0:b2d46804658c | 203 | |
JDI_Mbed_Team | 0:b2d46804658c | 204 | } |
JDI_Mbed_Team | 0:b2d46804658c | 205 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 206 | * @brief dispay a filled circle by color data |
JDI_Mbed_Team | 0:b2d46804658c | 207 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 208 | void memLCD8::fillcircle(int x0, int y0, int r, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 209 | { |
JDI_Mbed_Team | 0:b2d46804658c | 210 | int x = -r, y = 0, err = 2-2*r, e2; |
JDI_Mbed_Team | 0:b2d46804658c | 211 | do { |
JDI_Mbed_Team | 0:b2d46804658c | 212 | vline(x0-x, y0-y, y0+y, color); |
JDI_Mbed_Team | 0:b2d46804658c | 213 | vline(x0+x, y0-y, y0+y, color); |
JDI_Mbed_Team | 0:b2d46804658c | 214 | e2 = err; |
JDI_Mbed_Team | 0:b2d46804658c | 215 | if (e2 <= y) { |
JDI_Mbed_Team | 0:b2d46804658c | 216 | err += ++y*2+1; |
JDI_Mbed_Team | 0:b2d46804658c | 217 | if (-x == y && e2 <= x) e2 = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 218 | } |
JDI_Mbed_Team | 0:b2d46804658c | 219 | if (e2 > x) err += ++x*2+1; |
JDI_Mbed_Team | 0:b2d46804658c | 220 | } while (x <= 0); |
JDI_Mbed_Team | 0:b2d46804658c | 221 | } |
JDI_Mbed_Team | 0:b2d46804658c | 222 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 223 | * @brief dispay a horizontal line by color data |
JDI_Mbed_Team | 0:b2d46804658c | 224 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 225 | void memLCD8::hline(int x0, int x1, int y, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 226 | { |
JDI_Mbed_Team | 0:b2d46804658c | 227 | int w; |
JDI_Mbed_Team | 0:b2d46804658c | 228 | w = x1 - x0 + 1; |
JDI_Mbed_Team | 0:b2d46804658c | 229 | for (int j=0; j<w; j++) pixel(x0+j, y,color); |
JDI_Mbed_Team | 0:b2d46804658c | 230 | } |
JDI_Mbed_Team | 0:b2d46804658c | 231 | |
JDI_Mbed_Team | 0:b2d46804658c | 232 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 233 | * @brief dispay a vertical line by color data |
JDI_Mbed_Team | 0:b2d46804658c | 234 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 235 | void memLCD8::vline(int x, int y0, int y1, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 236 | { |
JDI_Mbed_Team | 0:b2d46804658c | 237 | int h; |
JDI_Mbed_Team | 0:b2d46804658c | 238 | h = y1 - y0 + 1; |
JDI_Mbed_Team | 0:b2d46804658c | 239 | for (int j=0; j<h; j++) pixel(x, y0+j,color); |
JDI_Mbed_Team | 0:b2d46804658c | 240 | } |
JDI_Mbed_Team | 0:b2d46804658c | 241 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 242 | * @brief dispay a line by color data |
JDI_Mbed_Team | 0:b2d46804658c | 243 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 244 | void memLCD8::line(int x0, int y0, int x1, int y1, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 245 | { |
JDI_Mbed_Team | 0:b2d46804658c | 246 | int dx = 0, dy = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 247 | int dx_sym = 0, dy_sym = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 248 | int dx_x2 = 0, dy_x2 = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 249 | int di = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 250 | |
JDI_Mbed_Team | 0:b2d46804658c | 251 | dx = x1-x0; |
JDI_Mbed_Team | 0:b2d46804658c | 252 | dy = y1-y0; |
JDI_Mbed_Team | 0:b2d46804658c | 253 | |
JDI_Mbed_Team | 0:b2d46804658c | 254 | if (dx == 0) { /* vertical line */ |
JDI_Mbed_Team | 0:b2d46804658c | 255 | if (y1 > y0) vline(x0,y0,y1,color); |
JDI_Mbed_Team | 0:b2d46804658c | 256 | else vline(x0,y1,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 257 | return; |
JDI_Mbed_Team | 0:b2d46804658c | 258 | } |
JDI_Mbed_Team | 0:b2d46804658c | 259 | |
JDI_Mbed_Team | 0:b2d46804658c | 260 | if (dx > 0) { |
JDI_Mbed_Team | 0:b2d46804658c | 261 | dx_sym = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 262 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 263 | dx_sym = -1; |
JDI_Mbed_Team | 0:b2d46804658c | 264 | } |
JDI_Mbed_Team | 0:b2d46804658c | 265 | if (dy == 0) { /* horizontal line */ |
JDI_Mbed_Team | 0:b2d46804658c | 266 | if (x1 > x0) hline(x0,x1,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 267 | else hline(x1,x0,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 268 | return; |
JDI_Mbed_Team | 0:b2d46804658c | 269 | } |
JDI_Mbed_Team | 0:b2d46804658c | 270 | |
JDI_Mbed_Team | 0:b2d46804658c | 271 | if (dy > 0) { |
JDI_Mbed_Team | 0:b2d46804658c | 272 | dy_sym = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 273 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 274 | dy_sym = -1; |
JDI_Mbed_Team | 0:b2d46804658c | 275 | } |
JDI_Mbed_Team | 0:b2d46804658c | 276 | |
JDI_Mbed_Team | 0:b2d46804658c | 277 | dx = dx_sym*dx; |
JDI_Mbed_Team | 0:b2d46804658c | 278 | dy = dy_sym*dy; |
JDI_Mbed_Team | 0:b2d46804658c | 279 | |
JDI_Mbed_Team | 0:b2d46804658c | 280 | dx_x2 = dx*2; |
JDI_Mbed_Team | 0:b2d46804658c | 281 | dy_x2 = dy*2; |
JDI_Mbed_Team | 0:b2d46804658c | 282 | |
JDI_Mbed_Team | 0:b2d46804658c | 283 | if (dx >= dy) { |
JDI_Mbed_Team | 0:b2d46804658c | 284 | di = dy_x2 - dx; |
JDI_Mbed_Team | 0:b2d46804658c | 285 | while (x0 != x1) { |
JDI_Mbed_Team | 0:b2d46804658c | 286 | |
JDI_Mbed_Team | 0:b2d46804658c | 287 | pixel(x0, y0, color); |
JDI_Mbed_Team | 0:b2d46804658c | 288 | x0 += dx_sym; |
JDI_Mbed_Team | 0:b2d46804658c | 289 | if (di<0) { |
JDI_Mbed_Team | 0:b2d46804658c | 290 | di += dy_x2; |
JDI_Mbed_Team | 0:b2d46804658c | 291 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 292 | di += dy_x2 - dx_x2; |
JDI_Mbed_Team | 0:b2d46804658c | 293 | y0 += dy_sym; |
JDI_Mbed_Team | 0:b2d46804658c | 294 | } |
JDI_Mbed_Team | 0:b2d46804658c | 295 | } |
JDI_Mbed_Team | 0:b2d46804658c | 296 | pixel(x0, y0, color); |
JDI_Mbed_Team | 0:b2d46804658c | 297 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 298 | di = dx_x2 - dy; |
JDI_Mbed_Team | 0:b2d46804658c | 299 | while (y0 != y1) { |
JDI_Mbed_Team | 0:b2d46804658c | 300 | pixel(x0, y0, color); |
JDI_Mbed_Team | 0:b2d46804658c | 301 | y0 += dy_sym; |
JDI_Mbed_Team | 0:b2d46804658c | 302 | if (di < 0) { |
JDI_Mbed_Team | 0:b2d46804658c | 303 | di += dx_x2; |
JDI_Mbed_Team | 0:b2d46804658c | 304 | } else { |
JDI_Mbed_Team | 0:b2d46804658c | 305 | di += dx_x2 - dy_x2; |
JDI_Mbed_Team | 0:b2d46804658c | 306 | x0 += dx_sym; |
JDI_Mbed_Team | 0:b2d46804658c | 307 | } |
JDI_Mbed_Team | 0:b2d46804658c | 308 | } |
JDI_Mbed_Team | 0:b2d46804658c | 309 | pixel(x0, y0, color); |
JDI_Mbed_Team | 0:b2d46804658c | 310 | } |
JDI_Mbed_Team | 0:b2d46804658c | 311 | return; |
JDI_Mbed_Team | 0:b2d46804658c | 312 | } |
JDI_Mbed_Team | 0:b2d46804658c | 313 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 314 | * @brief dispay a rectangle line by color data |
JDI_Mbed_Team | 0:b2d46804658c | 315 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 316 | void memLCD8::rect(int x0, int y0, int x1, int y1, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 317 | { |
JDI_Mbed_Team | 0:b2d46804658c | 318 | |
JDI_Mbed_Team | 0:b2d46804658c | 319 | if (x1 > x0) hline(x0,x1,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 320 | else hline(x1,x0,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 321 | |
JDI_Mbed_Team | 0:b2d46804658c | 322 | if (y1 > y0) vline(x0,y0,y1,color); |
JDI_Mbed_Team | 0:b2d46804658c | 323 | else vline(x0,y1,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 324 | |
JDI_Mbed_Team | 0:b2d46804658c | 325 | if (x1 > x0) hline(x0,x1,y1,color); |
JDI_Mbed_Team | 0:b2d46804658c | 326 | else hline(x1,x0,y1,color); |
JDI_Mbed_Team | 0:b2d46804658c | 327 | |
JDI_Mbed_Team | 0:b2d46804658c | 328 | if (y1 > y0) vline(x1,y0,y1,color); |
JDI_Mbed_Team | 0:b2d46804658c | 329 | else vline(x1,y1,y0,color); |
JDI_Mbed_Team | 0:b2d46804658c | 330 | |
JDI_Mbed_Team | 0:b2d46804658c | 331 | return; |
JDI_Mbed_Team | 0:b2d46804658c | 332 | } |
JDI_Mbed_Team | 0:b2d46804658c | 333 | |
JDI_Mbed_Team | 0:b2d46804658c | 334 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 335 | * @brief dispay a filled rectangle by color data |
JDI_Mbed_Team | 0:b2d46804658c | 336 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 337 | void memLCD8::fillrect(int x0, int y0, int x1, int y1, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 338 | { |
JDI_Mbed_Team | 0:b2d46804658c | 339 | int h = y1 - y0 + 1; |
JDI_Mbed_Team | 0:b2d46804658c | 340 | for (int i=0; i<h; i++) hline(x0, x1, y0+i, color); |
JDI_Mbed_Team | 0:b2d46804658c | 341 | } |
JDI_Mbed_Team | 0:b2d46804658c | 342 | |
JDI_Mbed_Team | 0:b2d46804658c | 343 | #ifdef LINEBUFF_MODE |
JDI_Mbed_Team | 0:b2d46804658c | 344 | void memLCD8::pixel(int x, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 345 | { |
JDI_Mbed_Team | 0:b2d46804658c | 346 | if(!(x % 2)) _dispBUF[x/2] = _dispBUF[x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111 |
JDI_Mbed_Team | 0:b2d46804658c | 347 | else _dispBUF[x/2] = _dispBUF[x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000 |
JDI_Mbed_Team | 0:b2d46804658c | 348 | } |
JDI_Mbed_Team | 0:b2d46804658c | 349 | |
JDI_Mbed_Team | 0:b2d46804658c | 350 | //void memLCD8::writeLine(int line) // refresh gate line display |
JDI_Mbed_Team | 0:b2d46804658c | 351 | void memLCD8::writeDISP(int line,int transfermode) // refresh gate line display |
JDI_Mbed_Team | 0:b2d46804658c | 352 | { |
JDI_Mbed_Team | 0:b2d46804658c | 353 | |
JDI_Mbed_Team | 0:b2d46804658c | 354 | char pol = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 355 | SetTransfermode(transfermode); |
JDI_Mbed_Team | 0:b2d46804658c | 356 | |
JDI_Mbed_Team | 0:b2d46804658c | 357 | |
JDI_Mbed_Team | 0:b2d46804658c | 358 | // line |
JDI_Mbed_Team | 0:b2d46804658c | 359 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 360 | _cs = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 361 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 362 | _spi.write(TrModeCommand | (pol << 6) | (line+1)>>8 ); // COMMAND |
JDI_Mbed_Team | 0:b2d46804658c | 363 | _spi.write((line+1)& 0x00FF ); // V ADDR |
JDI_Mbed_Team | 0:b2d46804658c | 364 | for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[j]); |
JDI_Mbed_Team | 0:b2d46804658c | 365 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 366 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 367 | // wait_ms(1); //1.8Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 368 | // wait_ms(2); //1.35Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 369 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 370 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 371 | if(pol) pol=0x00; |
JDI_Mbed_Team | 0:b2d46804658c | 372 | else pol=0x01; |
JDI_Mbed_Team | 0:b2d46804658c | 373 | } |
JDI_Mbed_Team | 0:b2d46804658c | 374 | #endif |
JDI_Mbed_Team | 0:b2d46804658c | 375 | |
JDI_Mbed_Team | 0:b2d46804658c | 376 | #ifndef LINEBUFF_MODE |
JDI_Mbed_Team | 0:b2d46804658c | 377 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 378 | * @brief Transfer One Pixel Data with x,y allocation |
JDI_Mbed_Team | 0:b2d46804658c | 379 | * @param[in] int x : horizontal allocation left to right |
JDI_Mbed_Team | 0:b2d46804658c | 380 | * @param[in] int y : vertival allocation top to bottom |
JDI_Mbed_Team | 0:b2d46804658c | 381 | * @param[in] uint8_t color : the color data for Drawing 0x0X x is color data(RGBC) C is not used |
JDI_Mbed_Team | 0:b2d46804658c | 382 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 383 | void memLCD8::pixel(int x, int y, uint8_t color) |
JDI_Mbed_Team | 0:b2d46804658c | 384 | { |
JDI_Mbed_Team | 0:b2d46804658c | 385 | if(!(x % 2)) _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111 |
JDI_Mbed_Team | 0:b2d46804658c | 386 | else _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000 |
JDI_Mbed_Team | 0:b2d46804658c | 387 | } |
JDI_Mbed_Team | 0:b2d46804658c | 388 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 389 | * @brief Transfer Pixel Data from buffer to Display |
JDI_Mbed_Team | 0:b2d46804658c | 390 | * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit |
JDI_Mbed_Team | 0:b2d46804658c | 391 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 392 | void memLCD8::writeDISP(int transfermode) // refresh whole display |
JDI_Mbed_Team | 0:b2d46804658c | 393 | { |
JDI_Mbed_Team | 0:b2d46804658c | 394 | char pol = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 395 | //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010 |
JDI_Mbed_Team | 0:b2d46804658c | 396 | SetTransfermode(transfermode); |
JDI_Mbed_Team | 0:b2d46804658c | 397 | |
JDI_Mbed_Team | 0:b2d46804658c | 398 | // frame |
JDI_Mbed_Team | 0:b2d46804658c | 399 | for (int i=0; i<_height; i++) { |
JDI_Mbed_Team | 0:b2d46804658c | 400 | // line |
JDI_Mbed_Team | 0:b2d46804658c | 401 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 402 | _cs = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 403 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 404 | _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND |
JDI_Mbed_Team | 0:b2d46804658c | 405 | //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8); |
JDI_Mbed_Team | 0:b2d46804658c | 406 | |
JDI_Mbed_Team | 0:b2d46804658c | 407 | _spi.write((i+1)& 0x00FF ); // V ADDR |
JDI_Mbed_Team | 0:b2d46804658c | 408 | //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF); |
JDI_Mbed_Team | 0:b2d46804658c | 409 | |
JDI_Mbed_Team | 0:b2d46804658c | 410 | for(int j=0; j<_width; j+=TrAdd) |
JDI_Mbed_Team | 0:b2d46804658c | 411 | { |
JDI_Mbed_Team | 0:b2d46804658c | 412 | GetPixelValue(j,i,_dispBUF); |
JDI_Mbed_Team | 0:b2d46804658c | 413 | //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd); |
JDI_Mbed_Team | 0:b2d46804658c | 414 | for(int k=0;k<TrValNum;k++) |
JDI_Mbed_Team | 0:b2d46804658c | 415 | _spi.write(TrValue[k]); |
JDI_Mbed_Team | 0:b2d46804658c | 416 | } |
JDI_Mbed_Team | 0:b2d46804658c | 417 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 418 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 419 | // wait_ms(1); //1.8Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 420 | // wait_ms(2); //1.35Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 421 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 422 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 423 | if(pol) pol=0x00; |
JDI_Mbed_Team | 0:b2d46804658c | 424 | else pol=0x01; |
JDI_Mbed_Team | 0:b2d46804658c | 425 | } |
JDI_Mbed_Team | 0:b2d46804658c | 426 | } |
JDI_Mbed_Team | 0:b2d46804658c | 427 | //old function |
JDI_Mbed_Team | 0:b2d46804658c | 428 | void memLCD8::writeDISP(void) // refresh whole display |
JDI_Mbed_Team | 0:b2d46804658c | 429 | { |
JDI_Mbed_Team | 0:b2d46804658c | 430 | |
JDI_Mbed_Team | 0:b2d46804658c | 431 | char pol = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 432 | char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010 |
JDI_Mbed_Team | 0:b2d46804658c | 433 | |
JDI_Mbed_Team | 0:b2d46804658c | 434 | // frame |
JDI_Mbed_Team | 0:b2d46804658c | 435 | for (int i=0; i<_height; i++) { |
JDI_Mbed_Team | 0:b2d46804658c | 436 | // line |
JDI_Mbed_Team | 0:b2d46804658c | 437 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 438 | _cs = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 439 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 440 | _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND |
JDI_Mbed_Team | 0:b2d46804658c | 441 | _spi.write((i+1)& 0x00FF ); // V ADDR |
JDI_Mbed_Team | 0:b2d46804658c | 442 | for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[i*_width/2 + j]); |
JDI_Mbed_Team | 0:b2d46804658c | 443 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 444 | _spi.write(0x00); // DUMMY transfer |
JDI_Mbed_Team | 0:b2d46804658c | 445 | // wait_ms(1); //1.8Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 446 | // wait_ms(2); //1.35Hz simulation |
JDI_Mbed_Team | 0:b2d46804658c | 447 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 448 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 449 | if(pol) pol=0x00; |
JDI_Mbed_Team | 0:b2d46804658c | 450 | else pol=0x01; |
JDI_Mbed_Team | 0:b2d46804658c | 451 | } |
JDI_Mbed_Team | 0:b2d46804658c | 452 | } |
JDI_Mbed_Team | 0:b2d46804658c | 453 | #endif |
JDI_Mbed_Team | 0:b2d46804658c | 454 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 455 | * @brief Get Edited data for SPI transfer |
JDI_Mbed_Team | 0:b2d46804658c | 456 | * @param[in] int x:horizontal allocation left to right |
JDI_Mbed_Team | 0:b2d46804658c | 457 | * @param[in] int y:vertival allocation top to bottom |
JDI_Mbed_Team | 0:b2d46804658c | 458 | * @param[in] uint8_t* buff:buffer data for Display |
JDI_Mbed_Team | 0:b2d46804658c | 459 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 460 | int* memLCD8::GetPixelValue(int _x, int _y ,uint8_t* buff) |
JDI_Mbed_Team | 0:b2d46804658c | 461 | { |
JDI_Mbed_Team | 0:b2d46804658c | 462 | //bitmap data = 4bit data => modify transfer data bit size; |
JDI_Mbed_Team | 0:b2d46804658c | 463 | switch(TrModeCommand) |
JDI_Mbed_Team | 0:b2d46804658c | 464 | { |
JDI_Mbed_Team | 0:b2d46804658c | 465 | case 0x90: //TrBIT4: |
JDI_Mbed_Team | 0:b2d46804658c | 466 | // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。 |
JDI_Mbed_Team | 0:b2d46804658c | 467 | // 176/4=44 400/4 = 100 640/4=160 |
JDI_Mbed_Team | 0:b2d46804658c | 468 | TrValue[0] = _dispBUF[_y* _width/2 + _x]; |
JDI_Mbed_Team | 0:b2d46804658c | 469 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 470 | case 0x80://TrBIT3: |
JDI_Mbed_Team | 0:b2d46804658c | 471 | // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。 |
JDI_Mbed_Team | 0:b2d46804658c | 472 | // 176/3=58.666... 400/3 = 133.333... 640/3=213.333... |
JDI_Mbed_Team | 0:b2d46804658c | 473 | for(int j=0;j<3;j++) TrValue[j] = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 474 | //for( int i = 0 ; i<12 ; i--) |
JDI_Mbed_Team | 0:b2d46804658c | 475 | { |
JDI_Mbed_Team | 0:b2d46804658c | 476 | //4 bit RGBN(Nは予備) => 3bit RGB |
JDI_Mbed_Team | 0:b2d46804658c | 477 | if( _width/2 > _x ) |
JDI_Mbed_Team | 0:b2d46804658c | 478 | { |
JDI_Mbed_Team | 0:b2d46804658c | 479 | TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0xE0) ) ); |
JDI_Mbed_Team | 0:b2d46804658c | 480 | TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0x0E) ) << 1); |
JDI_Mbed_Team | 0:b2d46804658c | 481 | } |
JDI_Mbed_Team | 0:b2d46804658c | 482 | if( _width/2 > _x + 1 ) |
JDI_Mbed_Team | 0:b2d46804658c | 483 | { |
JDI_Mbed_Team | 0:b2d46804658c | 484 | TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0xC0) ) >> 6); |
JDI_Mbed_Team | 0:b2d46804658c | 485 | |
JDI_Mbed_Team | 0:b2d46804658c | 486 | TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x20) ) << 2); |
JDI_Mbed_Team | 0:b2d46804658c | 487 | TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x0E) ) << 3); |
JDI_Mbed_Team | 0:b2d46804658c | 488 | } |
JDI_Mbed_Team | 0:b2d46804658c | 489 | if( _width/2 > _x + 2 ) |
JDI_Mbed_Team | 0:b2d46804658c | 490 | { |
JDI_Mbed_Team | 0:b2d46804658c | 491 | TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0xE0) ) >> 4); |
JDI_Mbed_Team | 0:b2d46804658c | 492 | TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x08) ) >> 3); |
JDI_Mbed_Team | 0:b2d46804658c | 493 | |
JDI_Mbed_Team | 0:b2d46804658c | 494 | TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x06) ) << 5); |
JDI_Mbed_Team | 0:b2d46804658c | 495 | } |
JDI_Mbed_Team | 0:b2d46804658c | 496 | if( _width/2 > _x + 3 ) |
JDI_Mbed_Team | 0:b2d46804658c | 497 | { |
JDI_Mbed_Team | 0:b2d46804658c | 498 | TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0xE0) ) >> 2); |
JDI_Mbed_Team | 0:b2d46804658c | 499 | TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0x0E) ) >> 1); |
JDI_Mbed_Team | 0:b2d46804658c | 500 | } |
JDI_Mbed_Team | 0:b2d46804658c | 501 | } |
JDI_Mbed_Team | 0:b2d46804658c | 502 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 503 | case 0x88://TrBIT1: |
JDI_Mbed_Team | 0:b2d46804658c | 504 | // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。 |
JDI_Mbed_Team | 0:b2d46804658c | 505 | // 176/4=44 400/4 = 100 640/4=160 |
JDI_Mbed_Team | 0:b2d46804658c | 506 | for(int j=0;j<3;j++) TrValue[j] = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 507 | for(int i = 0 ; i<4 ; i++) |
JDI_Mbed_Team | 0:b2d46804658c | 508 | { |
JDI_Mbed_Team | 0:b2d46804658c | 509 | //Green bit => monochrome bit |
JDI_Mbed_Team | 0:b2d46804658c | 510 | if( _width/2 > _x + i ) |
JDI_Mbed_Team | 0:b2d46804658c | 511 | { |
JDI_Mbed_Team | 0:b2d46804658c | 512 | TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) ); |
JDI_Mbed_Team | 0:b2d46804658c | 513 | TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 ); |
JDI_Mbed_Team | 0:b2d46804658c | 514 | //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]); |
JDI_Mbed_Team | 0:b2d46804658c | 515 | } |
JDI_Mbed_Team | 0:b2d46804658c | 516 | } |
JDI_Mbed_Team | 0:b2d46804658c | 517 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 518 | } |
JDI_Mbed_Team | 0:b2d46804658c | 519 | return TrValue; |
JDI_Mbed_Team | 0:b2d46804658c | 520 | } |
JDI_Mbed_Team | 0:b2d46804658c | 521 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 522 | * @brief set Configuration for transfer mode |
JDI_Mbed_Team | 0:b2d46804658c | 523 | * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit and some parameter |
JDI_Mbed_Team | 0:b2d46804658c | 524 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 525 | void memLCD8::SetTransfermode(int transfermode) |
JDI_Mbed_Team | 0:b2d46804658c | 526 | { |
JDI_Mbed_Team | 0:b2d46804658c | 527 | switch(transfermode) |
JDI_Mbed_Team | 0:b2d46804658c | 528 | { |
JDI_Mbed_Team | 0:b2d46804658c | 529 | case TrBIT4: |
JDI_Mbed_Team | 0:b2d46804658c | 530 | TrModeCommand = 0x90; |
JDI_Mbed_Team | 0:b2d46804658c | 531 | TrAdd = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 532 | TrValNum = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 533 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 534 | case TrBIT3: |
JDI_Mbed_Team | 0:b2d46804658c | 535 | TrModeCommand = 0x80; |
JDI_Mbed_Team | 0:b2d46804658c | 536 | // 176/3=58.666... 400/3 = 133.333... 640/3=213.333... |
JDI_Mbed_Team | 0:b2d46804658c | 537 | TrAdd = 4; |
JDI_Mbed_Team | 0:b2d46804658c | 538 | TrValNum = 3; |
JDI_Mbed_Team | 0:b2d46804658c | 539 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 540 | case TrBIT1: |
JDI_Mbed_Team | 0:b2d46804658c | 541 | TrModeCommand = 0x88; |
JDI_Mbed_Team | 0:b2d46804658c | 542 | // 176/4=44 400/4 = 100 640/4=160 |
JDI_Mbed_Team | 0:b2d46804658c | 543 | TrAdd = 4; |
JDI_Mbed_Team | 0:b2d46804658c | 544 | TrValNum = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 545 | //pc2.printf("TrBIT1 TW%d Tvn%d \n",TrAdd,TrValNum); |
JDI_Mbed_Team | 0:b2d46804658c | 546 | break; |
JDI_Mbed_Team | 0:b2d46804658c | 547 | } |
JDI_Mbed_Team | 0:b2d46804658c | 548 | } |
JDI_Mbed_Team | 0:b2d46804658c | 549 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 550 | * @brief clear buffer data by background color data |
JDI_Mbed_Team | 0:b2d46804658c | 551 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 552 | void memLCD8::clsBUF(void) |
JDI_Mbed_Team | 0:b2d46804658c | 553 | { |
JDI_Mbed_Team | 0:b2d46804658c | 554 | |
JDI_Mbed_Team | 0:b2d46804658c | 555 | for (int i=0; i<_height; i++) { |
JDI_Mbed_Team | 0:b2d46804658c | 556 | for (int j=0; j<_width; j++) { |
JDI_Mbed_Team | 0:b2d46804658c | 557 | pixel(j,i,_background); |
JDI_Mbed_Team | 0:b2d46804658c | 558 | } |
JDI_Mbed_Team | 0:b2d46804658c | 559 | } |
JDI_Mbed_Team | 0:b2d46804658c | 560 | } |
JDI_Mbed_Team | 0:b2d46804658c | 561 | |
JDI_Mbed_Team | 0:b2d46804658c | 562 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 563 | * @brief set color data of foreground |
JDI_Mbed_Team | 0:b2d46804658c | 564 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 565 | void memLCD8::foreground(uint8_t colour) |
JDI_Mbed_Team | 0:b2d46804658c | 566 | { |
JDI_Mbed_Team | 0:b2d46804658c | 567 | _foreground = colour; |
JDI_Mbed_Team | 0:b2d46804658c | 568 | } |
JDI_Mbed_Team | 0:b2d46804658c | 569 | |
JDI_Mbed_Team | 0:b2d46804658c | 570 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 571 | * @brief set color data of background |
JDI_Mbed_Team | 0:b2d46804658c | 572 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 573 | void memLCD8::background(uint8_t colour) |
JDI_Mbed_Team | 0:b2d46804658c | 574 | { |
JDI_Mbed_Team | 0:b2d46804658c | 575 | _background = colour; |
JDI_Mbed_Team | 0:b2d46804658c | 576 | } |
JDI_Mbed_Team | 0:b2d46804658c | 577 | /* |
JDI_Mbed_Team | 0:b2d46804658c | 578 | void memLCD8::setmarge(bool ifMarge) |
JDI_Mbed_Team | 0:b2d46804658c | 579 | { |
JDI_Mbed_Team | 0:b2d46804658c | 580 | _ifMarge = ifMarge; |
JDI_Mbed_Team | 0:b2d46804658c | 581 | } |
JDI_Mbed_Team | 0:b2d46804658c | 582 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 583 | |
JDI_Mbed_Team | 0:b2d46804658c | 584 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 585 | * @brief set a display size ,width ,height |
JDI_Mbed_Team | 0:b2d46804658c | 586 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 587 | void memLCD8::setWH(int width, int height) |
JDI_Mbed_Team | 0:b2d46804658c | 588 | { |
JDI_Mbed_Team | 0:b2d46804658c | 589 | _width = width; |
JDI_Mbed_Team | 0:b2d46804658c | 590 | _height = height; |
JDI_Mbed_Team | 0:b2d46804658c | 591 | } |
JDI_Mbed_Team | 0:b2d46804658c | 592 | |
JDI_Mbed_Team | 0:b2d46804658c | 593 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 594 | * @brief transfer a command code to the display by SPI |
JDI_Mbed_Team | 0:b2d46804658c | 595 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 596 | void memLCD8::command(char command) |
JDI_Mbed_Team | 0:b2d46804658c | 597 | { |
JDI_Mbed_Team | 0:b2d46804658c | 598 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 599 | _cs = 1; |
JDI_Mbed_Team | 0:b2d46804658c | 600 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 601 | _spi.write(command);// |
JDI_Mbed_Team | 0:b2d46804658c | 602 | _spi.write(0x00);// dummy |
JDI_Mbed_Team | 0:b2d46804658c | 603 | wait_us(6); |
JDI_Mbed_Team | 0:b2d46804658c | 604 | _cs = 0; |
JDI_Mbed_Team | 0:b2d46804658c | 605 | } |
JDI_Mbed_Team | 0:b2d46804658c | 606 | /** |
JDI_Mbed_Team | 0:b2d46804658c | 607 | * @brief set the Diaplay On/Off data |
JDI_Mbed_Team | 0:b2d46804658c | 608 | */ |
JDI_Mbed_Team | 0:b2d46804658c | 609 | void memLCD8::SwDisp(bool ONorOFF) |
JDI_Mbed_Team | 0:b2d46804658c | 610 | { |
JDI_Mbed_Team | 0:b2d46804658c | 611 | _disp= ONorOFF; |
JDI_Mbed_Team | 0:b2d46804658c | 612 | } |
JDI_Mbed_Team | 0:b2d46804658c | 613 |