Version 6.0. Animaiton demo.

Dependents:   MIP8f_FRDM_Animation_sample

MIP8F_SPI_Ver6.0

Ver6.0 Addtional function is animation code sample.

Committer:
JDI_Mbed_Team
Date:
Wed Oct 31 02:05:47 2018 +0000
Revision:
2:944f2968c19f
Parent:
1:2b85e7edcc4e
Child:
3:c67b96404016
Ver3.0 update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JDI_Mbed_Team 0:b2d46804658c 1 /**
JDI_Mbed_Team 0:b2d46804658c 2 * @file MIP8F_SPI.cpp
JDI_Mbed_Team 2:944f2968c19f 3 * @brief ver3.0 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 2:944f2968c19f 43 _FixedFontWidth=0;//setting:actual font width display if _FixedFontWidth !=1: font fixed witdh
JDI_Mbed_Team 0:b2d46804658c 44 }
JDI_Mbed_Team 0:b2d46804658c 45
JDI_Mbed_Team 0:b2d46804658c 46 /**
JDI_Mbed_Team 0:b2d46804658c 47 * @brief putc
JDI_Mbed_Team 0:b2d46804658c 48 */
JDI_Mbed_Team 0:b2d46804658c 49 int memLCD8::_putc(int value)
JDI_Mbed_Team 0:b2d46804658c 50 {
JDI_Mbed_Team 0:b2d46804658c 51 if (value == '\n') { // new line
JDI_Mbed_Team 0:b2d46804658c 52 char_x = 0;
JDI_Mbed_Team 0:b2d46804658c 53 char_y = char_y + font[3];
JDI_Mbed_Team 0:b2d46804658c 54 if (char_y >= _height - font[3]) {
JDI_Mbed_Team 0:b2d46804658c 55 char_y = 0;
JDI_Mbed_Team 0:b2d46804658c 56 }
JDI_Mbed_Team 0:b2d46804658c 57 } else {
JDI_Mbed_Team 0:b2d46804658c 58 character(char_x, char_y, value);
JDI_Mbed_Team 0:b2d46804658c 59 }
JDI_Mbed_Team 0:b2d46804658c 60 return value;
JDI_Mbed_Team 0:b2d46804658c 61 }
JDI_Mbed_Team 0:b2d46804658c 62
JDI_Mbed_Team 2:944f2968c19f 63 int memLCD8::textout(int x,int y,char* text)
JDI_Mbed_Team 2:944f2968c19f 64 {
JDI_Mbed_Team 2:944f2968c19f 65 int i=0;
JDI_Mbed_Team 2:944f2968c19f 66 char_x = x;
JDI_Mbed_Team 2:944f2968c19f 67 char_y = y;
JDI_Mbed_Team 2:944f2968c19f 68
JDI_Mbed_Team 2:944f2968c19f 69 while(text[i] != 0x00 )
JDI_Mbed_Team 2:944f2968c19f 70 {
JDI_Mbed_Team 2:944f2968c19f 71 character(char_x, char_y, text[i]);
JDI_Mbed_Team 2:944f2968c19f 72 i++;
JDI_Mbed_Team 2:944f2968c19f 73 }
JDI_Mbed_Team 2:944f2968c19f 74 return text[i];
JDI_Mbed_Team 2:944f2968c19f 75 }
JDI_Mbed_Team 2:944f2968c19f 76
JDI_Mbed_Team 2:944f2968c19f 77 int memLCD8::obliqueout(int x,int y,char* text)
JDI_Mbed_Team 2:944f2968c19f 78 {
JDI_Mbed_Team 2:944f2968c19f 79 int i=0;
JDI_Mbed_Team 2:944f2968c19f 80 char_x = x;
JDI_Mbed_Team 2:944f2968c19f 81 char_y = y;
JDI_Mbed_Team 2:944f2968c19f 82
JDI_Mbed_Team 2:944f2968c19f 83 while(text[i] != 0x00 )
JDI_Mbed_Team 2:944f2968c19f 84 {
JDI_Mbed_Team 2:944f2968c19f 85 oblique(char_x, char_y, text[i]);
JDI_Mbed_Team 2:944f2968c19f 86 i++;
JDI_Mbed_Team 2:944f2968c19f 87 }
JDI_Mbed_Team 2:944f2968c19f 88 return text[i];
JDI_Mbed_Team 2:944f2968c19f 89 }
JDI_Mbed_Team 2:944f2968c19f 90
JDI_Mbed_Team 0:b2d46804658c 91 /**
JDI_Mbed_Team 0:b2d46804658c 92 * @brief getc
JDI_Mbed_Team 0:b2d46804658c 93 */
JDI_Mbed_Team 0:b2d46804658c 94 int memLCD8::_getc()
JDI_Mbed_Team 0:b2d46804658c 95 {
JDI_Mbed_Team 0:b2d46804658c 96 return -1;
JDI_Mbed_Team 0:b2d46804658c 97 }
JDI_Mbed_Team 0:b2d46804658c 98
JDI_Mbed_Team 0:b2d46804658c 99 /**
JDI_Mbed_Team 0:b2d46804658c 100 * @brief set font name
JDI_Mbed_Team 0:b2d46804658c 101 */
JDI_Mbed_Team 0:b2d46804658c 102 void memLCD8::set_font(unsigned char* f)
JDI_Mbed_Team 0:b2d46804658c 103 {
JDI_Mbed_Team 0:b2d46804658c 104 font = f;
JDI_Mbed_Team 0:b2d46804658c 105 }
JDI_Mbed_Team 0:b2d46804658c 106
JDI_Mbed_Team 0:b2d46804658c 107 /**
JDI_Mbed_Team 2:944f2968c19f 108 * @brief set allocation for font display
JDI_Mbed_Team 0:b2d46804658c 109 */
JDI_Mbed_Team 0:b2d46804658c 110 void memLCD8::locate(int x, int y)
JDI_Mbed_Team 0:b2d46804658c 111 {
JDI_Mbed_Team 0:b2d46804658c 112 char_x = x;
JDI_Mbed_Team 0:b2d46804658c 113 char_y = y;
JDI_Mbed_Team 0:b2d46804658c 114 }
JDI_Mbed_Team 2:944f2968c19f 115
JDI_Mbed_Team 0:b2d46804658c 116 /**
JDI_Mbed_Team 2:944f2968c19f 117 * @brief fixed width between charactor and charctor for font display
JDI_Mbed_Team 2:944f2968c19f 118 */
JDI_Mbed_Team 2:944f2968c19f 119 void memLCD8::set_FixedFontWidth( unsigned char width )
JDI_Mbed_Team 2:944f2968c19f 120 {
JDI_Mbed_Team 2:944f2968c19f 121 _FixedFontWidth = width;
JDI_Mbed_Team 2:944f2968c19f 122 }
JDI_Mbed_Team 2:944f2968c19f 123 void memLCD8::set_ActualFontWidth(void)
JDI_Mbed_Team 2:944f2968c19f 124 {
JDI_Mbed_Team 2:944f2968c19f 125 _FixedFontWidth = 0;
JDI_Mbed_Team 2:944f2968c19f 126 }
JDI_Mbed_Team 2:944f2968c19f 127 /**
JDI_Mbed_Team 2:944f2968c19f 128 * @brief dispay character by bog font.
JDI_Mbed_Team 1:2b85e7edcc4e 129 * big font is that "char data" byte size is over 0xff.
JDI_Mbed_Team 1:2b85e7edcc4e 130 *
JDI_Mbed_Team 0:b2d46804658c 131 */
JDI_Mbed_Team 2:944f2968c19f 132 void memLCD8::character(int x, int y, int c)
JDI_Mbed_Team 0:b2d46804658c 133 {
JDI_Mbed_Team 0:b2d46804658c 134 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 135 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 0:b2d46804658c 136 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 137 unsigned char z,w;
JDI_Mbed_Team 2:944f2968c19f 138
JDI_Mbed_Team 2:944f2968c19f 139 if ((c < 32/*31*/) || (c > 127)) return; // test char range
JDI_Mbed_Team 1:2b85e7edcc4e 140
JDI_Mbed_Team 2:944f2968c19f 141 //for big font
JDI_Mbed_Team 2:944f2968c19f 142 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 143 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 144 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 145 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 146 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 147 headroffset = 5;
JDI_Mbed_Team 0:b2d46804658c 148
JDI_Mbed_Team 2:944f2968c19f 149 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 150 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 151 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 152 if (char_y >= _height - vert) char_y = 0; // original = font[2] T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 153 }
JDI_Mbed_Team 0:b2d46804658c 154
JDI_Mbed_Team 2:944f2968c19f 155 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset]; // start of char bitmap // original = +4 T.Okamoto modified, for big font
JDI_Mbed_Team 1:2b85e7edcc4e 156
JDI_Mbed_Team 2:944f2968c19f 157 if( _FixedFontWidth == 0 ) w = zeichen[0]; // width of actual char
JDI_Mbed_Team 2:944f2968c19f 158 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 159
JDI_Mbed_Team 0:b2d46804658c 160 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 161 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 162 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 163 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 164 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 165 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 166
JDI_Mbed_Team 0:b2d46804658c 167 }
JDI_Mbed_Team 0:b2d46804658c 168 }
JDI_Mbed_Team 0:b2d46804658c 169 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 170 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 171 }
JDI_Mbed_Team 0:b2d46804658c 172
JDI_Mbed_Team 0:b2d46804658c 173 /**
JDI_Mbed_Team 2:944f2968c19f 174 * @brief dispay oblique typte big font.
JDI_Mbed_Team 2:944f2968c19f 175 *
JDI_Mbed_Team 2:944f2968c19f 176 */
JDI_Mbed_Team 2:944f2968c19f 177 void memLCD8::oblique(int x, int y, int c)
JDI_Mbed_Team 2:944f2968c19f 178 {
JDI_Mbed_Team 2:944f2968c19f 179 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 180 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 2:944f2968c19f 181 unsigned char* zeichen;
JDI_Mbed_Team 2:944f2968c19f 182 unsigned char z,w;
JDI_Mbed_Team 2:944f2968c19f 183 if ((c < 32/*31*/) || (c > 127)) return; // test char range
JDI_Mbed_Team 2:944f2968c19f 184
JDI_Mbed_Team 2:944f2968c19f 185 //for big font
JDI_Mbed_Team 2:944f2968c19f 186 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 187 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 188 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 189 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 190 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 191 headroffset = 5;
JDI_Mbed_Team 2:944f2968c19f 192
JDI_Mbed_Team 2:944f2968c19f 193 int oblique_raio=3; // 3 = 30(%percentage) / 10
JDI_Mbed_Team 2:944f2968c19f 194 int shift_x = (hor*oblique_raio)/10; //oblique pixel x size, top of char;
JDI_Mbed_Team 2:944f2968c19f 195 int shift_y = vert / shift_x; //oblique ratio for vertical.
JDI_Mbed_Team 2:944f2968c19f 196
JDI_Mbed_Team 2:944f2968c19f 197 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 198 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 199 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 200 if (char_y >= _height - vert) char_y = 0;
JDI_Mbed_Team 2:944f2968c19f 201 }
JDI_Mbed_Team 2:944f2968c19f 202
JDI_Mbed_Team 2:944f2968c19f 203 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset];
JDI_Mbed_Team 2:944f2968c19f 204 if( _FixedFontWidth == 0 ) w = zeichen[0]; // actual width of char
JDI_Mbed_Team 2:944f2968c19f 205 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 206
JDI_Mbed_Team 2:944f2968c19f 207 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 2:944f2968c19f 208 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 2:944f2968c19f 209 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 2:944f2968c19f 210 b = 1 << (j & 0x07);
JDI_Mbed_Team 2:944f2968c19f 211 if (( z & b ) != 0x00) pixel(x+i+shift_x-(j/shift_y),y+j,_foreground);
JDI_Mbed_Team 2:944f2968c19f 212 else if (_ifMarge == 0) pixel(x+i+shift_x-(j/shift_y),y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 2:944f2968c19f 213
JDI_Mbed_Team 2:944f2968c19f 214 }
JDI_Mbed_Team 2:944f2968c19f 215 }
JDI_Mbed_Team 2:944f2968c19f 216 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 2:944f2968c19f 217 else char_x += hor;
JDI_Mbed_Team 2:944f2968c19f 218 }
JDI_Mbed_Team 2:944f2968c19f 219
JDI_Mbed_Team 2:944f2968c19f 220
JDI_Mbed_Team 2:944f2968c19f 221 /**
JDI_Mbed_Team 2:944f2968c19f 222 * @brief dispay the image from symbol data
JDI_Mbed_Team 0:b2d46804658c 223 */
JDI_Mbed_Team 0:b2d46804658c 224 void memLCD8::Symbol(unsigned int x, unsigned int y, unsigned char *symbol)
JDI_Mbed_Team 0:b2d46804658c 225 {
JDI_Mbed_Team 0:b2d46804658c 226 unsigned int hor,vert,bpl,j,i,b;
JDI_Mbed_Team 0:b2d46804658c 227 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 228 unsigned char z,w;
JDI_Mbed_Team 0:b2d46804658c 229 hor = symbol[0]; // get hor size of font
JDI_Mbed_Team 0:b2d46804658c 230 vert = symbol[1]; // get vert size of font
JDI_Mbed_Team 0:b2d46804658c 231 bpl = symbol[2]; // bytes per line
JDI_Mbed_Team 0:b2d46804658c 232
JDI_Mbed_Team 0:b2d46804658c 233 if (char_x + hor > _width) {
JDI_Mbed_Team 0:b2d46804658c 234 char_x = 0;
JDI_Mbed_Team 0:b2d46804658c 235 char_y = char_y + vert;
JDI_Mbed_Team 0:b2d46804658c 236 if (char_y >= _height - symbol[1]) char_y = 0;
JDI_Mbed_Team 0:b2d46804658c 237 }
JDI_Mbed_Team 2:944f2968c19f 238
JDI_Mbed_Team 0:b2d46804658c 239 zeichen = &symbol[3];
JDI_Mbed_Team 2:944f2968c19f 240 w = zeichen[0]; // actual width of char
JDI_Mbed_Team 0:b2d46804658c 241 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 242 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 243 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 244 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 245 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 246 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 247 }
JDI_Mbed_Team 0:b2d46804658c 248 }
JDI_Mbed_Team 0:b2d46804658c 249 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 250 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 251 }
JDI_Mbed_Team 0:b2d46804658c 252
JDI_Mbed_Team 0:b2d46804658c 253 /*
JDI_Mbed_Team 0:b2d46804658c 254 void memLCD8::LayerCopy(void)
JDI_Mbed_Team 0:b2d46804658c 255 {
JDI_Mbed_Team 0:b2d46804658c 256 for(int i=0; i<FRAME_SIZE; i++) _LayerBUF[i] = _dispBUF[i];
JDI_Mbed_Team 0:b2d46804658c 257
JDI_Mbed_Team 0:b2d46804658c 258 }
JDI_Mbed_Team 0:b2d46804658c 259 */
JDI_Mbed_Team 2:944f2968c19f 260
JDI_Mbed_Team 0:b2d46804658c 261 /**
JDI_Mbed_Team 0:b2d46804658c 262 * @brief dispay a circle line by color data
JDI_Mbed_Team 0:b2d46804658c 263 */
JDI_Mbed_Team 0:b2d46804658c 264 void memLCD8::circle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 265 {
JDI_Mbed_Team 0:b2d46804658c 266 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 267 do {
JDI_Mbed_Team 0:b2d46804658c 268 pixel(x0-x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 269 pixel(x0+x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 270 pixel(x0+x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 271 pixel(x0-x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 272 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 273 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 274 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 275 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 276 }
JDI_Mbed_Team 0:b2d46804658c 277 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 278 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 279
JDI_Mbed_Team 0:b2d46804658c 280 }
JDI_Mbed_Team 0:b2d46804658c 281 /**
JDI_Mbed_Team 0:b2d46804658c 282 * @brief dispay a filled circle by color data
JDI_Mbed_Team 0:b2d46804658c 283 */
JDI_Mbed_Team 0:b2d46804658c 284 void memLCD8::fillcircle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 285 {
JDI_Mbed_Team 0:b2d46804658c 286 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 287 do {
JDI_Mbed_Team 0:b2d46804658c 288 vline(x0-x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 289 vline(x0+x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 290 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 291 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 292 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 293 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 294 }
JDI_Mbed_Team 0:b2d46804658c 295 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 296 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 297 }
JDI_Mbed_Team 2:944f2968c19f 298
JDI_Mbed_Team 0:b2d46804658c 299 /**
JDI_Mbed_Team 0:b2d46804658c 300 * @brief dispay a horizontal line by color data
JDI_Mbed_Team 0:b2d46804658c 301 */
JDI_Mbed_Team 0:b2d46804658c 302 void memLCD8::hline(int x0, int x1, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 303 {
JDI_Mbed_Team 0:b2d46804658c 304 int w;
JDI_Mbed_Team 0:b2d46804658c 305 w = x1 - x0 + 1;
JDI_Mbed_Team 0:b2d46804658c 306 for (int j=0; j<w; j++) pixel(x0+j, y,color);
JDI_Mbed_Team 0:b2d46804658c 307 }
JDI_Mbed_Team 0:b2d46804658c 308
JDI_Mbed_Team 0:b2d46804658c 309 /**
JDI_Mbed_Team 0:b2d46804658c 310 * @brief dispay a vertical line by color data
JDI_Mbed_Team 0:b2d46804658c 311 */
JDI_Mbed_Team 0:b2d46804658c 312 void memLCD8::vline(int x, int y0, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 313 {
JDI_Mbed_Team 0:b2d46804658c 314 int h;
JDI_Mbed_Team 0:b2d46804658c 315 h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 316 for (int j=0; j<h; j++) pixel(x, y0+j,color);
JDI_Mbed_Team 0:b2d46804658c 317 }
JDI_Mbed_Team 0:b2d46804658c 318 /**
JDI_Mbed_Team 0:b2d46804658c 319 * @brief dispay a line by color data
JDI_Mbed_Team 0:b2d46804658c 320 */
JDI_Mbed_Team 0:b2d46804658c 321 void memLCD8::line(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 322 {
JDI_Mbed_Team 0:b2d46804658c 323 int dx = 0, dy = 0;
JDI_Mbed_Team 0:b2d46804658c 324 int dx_sym = 0, dy_sym = 0;
JDI_Mbed_Team 0:b2d46804658c 325 int dx_x2 = 0, dy_x2 = 0;
JDI_Mbed_Team 0:b2d46804658c 326 int di = 0;
JDI_Mbed_Team 0:b2d46804658c 327
JDI_Mbed_Team 0:b2d46804658c 328 dx = x1-x0;
JDI_Mbed_Team 0:b2d46804658c 329 dy = y1-y0;
JDI_Mbed_Team 0:b2d46804658c 330
JDI_Mbed_Team 0:b2d46804658c 331 if (dx == 0) { /* vertical line */
JDI_Mbed_Team 0:b2d46804658c 332 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 333 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 334 return;
JDI_Mbed_Team 0:b2d46804658c 335 }
JDI_Mbed_Team 0:b2d46804658c 336
JDI_Mbed_Team 0:b2d46804658c 337 if (dx > 0) {
JDI_Mbed_Team 0:b2d46804658c 338 dx_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 339 } else {
JDI_Mbed_Team 0:b2d46804658c 340 dx_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 341 }
JDI_Mbed_Team 0:b2d46804658c 342 if (dy == 0) { /* horizontal line */
JDI_Mbed_Team 0:b2d46804658c 343 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 344 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 345 return;
JDI_Mbed_Team 0:b2d46804658c 346 }
JDI_Mbed_Team 0:b2d46804658c 347
JDI_Mbed_Team 0:b2d46804658c 348 if (dy > 0) {
JDI_Mbed_Team 0:b2d46804658c 349 dy_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 350 } else {
JDI_Mbed_Team 0:b2d46804658c 351 dy_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 352 }
JDI_Mbed_Team 0:b2d46804658c 353
JDI_Mbed_Team 0:b2d46804658c 354 dx = dx_sym*dx;
JDI_Mbed_Team 0:b2d46804658c 355 dy = dy_sym*dy;
JDI_Mbed_Team 0:b2d46804658c 356
JDI_Mbed_Team 0:b2d46804658c 357 dx_x2 = dx*2;
JDI_Mbed_Team 0:b2d46804658c 358 dy_x2 = dy*2;
JDI_Mbed_Team 0:b2d46804658c 359
JDI_Mbed_Team 0:b2d46804658c 360 if (dx >= dy) {
JDI_Mbed_Team 0:b2d46804658c 361 di = dy_x2 - dx;
JDI_Mbed_Team 0:b2d46804658c 362 while (x0 != x1) {
JDI_Mbed_Team 0:b2d46804658c 363
JDI_Mbed_Team 0:b2d46804658c 364 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 365 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 366 if (di<0) {
JDI_Mbed_Team 0:b2d46804658c 367 di += dy_x2;
JDI_Mbed_Team 0:b2d46804658c 368 } else {
JDI_Mbed_Team 0:b2d46804658c 369 di += dy_x2 - dx_x2;
JDI_Mbed_Team 0:b2d46804658c 370 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 371 }
JDI_Mbed_Team 0:b2d46804658c 372 }
JDI_Mbed_Team 0:b2d46804658c 373 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 374 } else {
JDI_Mbed_Team 0:b2d46804658c 375 di = dx_x2 - dy;
JDI_Mbed_Team 0:b2d46804658c 376 while (y0 != y1) {
JDI_Mbed_Team 0:b2d46804658c 377 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 378 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 379 if (di < 0) {
JDI_Mbed_Team 0:b2d46804658c 380 di += dx_x2;
JDI_Mbed_Team 0:b2d46804658c 381 } else {
JDI_Mbed_Team 0:b2d46804658c 382 di += dx_x2 - dy_x2;
JDI_Mbed_Team 0:b2d46804658c 383 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 384 }
JDI_Mbed_Team 0:b2d46804658c 385 }
JDI_Mbed_Team 0:b2d46804658c 386 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 387 }
JDI_Mbed_Team 0:b2d46804658c 388 return;
JDI_Mbed_Team 0:b2d46804658c 389 }
JDI_Mbed_Team 2:944f2968c19f 390
JDI_Mbed_Team 0:b2d46804658c 391 /**
JDI_Mbed_Team 0:b2d46804658c 392 * @brief dispay a rectangle line by color data
JDI_Mbed_Team 0:b2d46804658c 393 */
JDI_Mbed_Team 0:b2d46804658c 394 void memLCD8::rect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 395 {
JDI_Mbed_Team 0:b2d46804658c 396
JDI_Mbed_Team 0:b2d46804658c 397 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 398 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 399
JDI_Mbed_Team 0:b2d46804658c 400 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 401 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 402
JDI_Mbed_Team 0:b2d46804658c 403 if (x1 > x0) hline(x0,x1,y1,color);
JDI_Mbed_Team 0:b2d46804658c 404 else hline(x1,x0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 405
JDI_Mbed_Team 0:b2d46804658c 406 if (y1 > y0) vline(x1,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 407 else vline(x1,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 408
JDI_Mbed_Team 0:b2d46804658c 409 return;
JDI_Mbed_Team 0:b2d46804658c 410 }
JDI_Mbed_Team 0:b2d46804658c 411
JDI_Mbed_Team 0:b2d46804658c 412 /**
JDI_Mbed_Team 0:b2d46804658c 413 * @brief dispay a filled rectangle by color data
JDI_Mbed_Team 0:b2d46804658c 414 */
JDI_Mbed_Team 0:b2d46804658c 415 void memLCD8::fillrect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 416 {
JDI_Mbed_Team 0:b2d46804658c 417 int h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 418 for (int i=0; i<h; i++) hline(x0, x1, y0+i, color);
JDI_Mbed_Team 0:b2d46804658c 419 }
JDI_Mbed_Team 0:b2d46804658c 420
JDI_Mbed_Team 0:b2d46804658c 421 #ifdef LINEBUFF_MODE
JDI_Mbed_Team 0:b2d46804658c 422 void memLCD8::pixel(int x, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 423 {
JDI_Mbed_Team 0:b2d46804658c 424 if(!(x % 2)) _dispBUF[x/2] = _dispBUF[x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111
JDI_Mbed_Team 0:b2d46804658c 425 else _dispBUF[x/2] = _dispBUF[x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 0:b2d46804658c 426 }
JDI_Mbed_Team 0:b2d46804658c 427 //void memLCD8::writeLine(int line) // refresh gate line display
JDI_Mbed_Team 0:b2d46804658c 428 void memLCD8::writeDISP(int line,int transfermode) // refresh gate line 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 SetTransfermode(transfermode);
JDI_Mbed_Team 0:b2d46804658c 433
JDI_Mbed_Team 0:b2d46804658c 434
JDI_Mbed_Team 0:b2d46804658c 435 // line
JDI_Mbed_Team 0:b2d46804658c 436 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 437 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 438 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 439 _spi.write(TrModeCommand | (pol << 6) | (line+1)>>8 ); // COMMAND
JDI_Mbed_Team 0:b2d46804658c 440 _spi.write((line+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 0:b2d46804658c 441 for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[j]);
JDI_Mbed_Team 0:b2d46804658c 442 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 443 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 444 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 0:b2d46804658c 445 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 0:b2d46804658c 446 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 447 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 448 if(pol) pol=0x00;
JDI_Mbed_Team 0:b2d46804658c 449 else pol=0x01;
JDI_Mbed_Team 0:b2d46804658c 450 }
JDI_Mbed_Team 0:b2d46804658c 451 #endif
JDI_Mbed_Team 0:b2d46804658c 452
JDI_Mbed_Team 0:b2d46804658c 453 #ifndef LINEBUFF_MODE
JDI_Mbed_Team 0:b2d46804658c 454 /**
JDI_Mbed_Team 0:b2d46804658c 455 * @brief Transfer One Pixel Data with x,y allocation
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 color : the color data for Drawing 0x0X x is color data(RGBC) C is not used
JDI_Mbed_Team 0:b2d46804658c 459 */
JDI_Mbed_Team 0:b2d46804658c 460 void memLCD8::pixel(int x, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 461 {
JDI_Mbed_Team 0:b2d46804658c 462 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 463 else _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 0:b2d46804658c 464 }
JDI_Mbed_Team 2:944f2968c19f 465
JDI_Mbed_Team 0:b2d46804658c 466 /**
JDI_Mbed_Team 0:b2d46804658c 467 * @brief Transfer Pixel Data from buffer to Display
JDI_Mbed_Team 0:b2d46804658c 468 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 0:b2d46804658c 469 */
JDI_Mbed_Team 0:b2d46804658c 470 void memLCD8::writeDISP(int transfermode) // refresh whole display
JDI_Mbed_Team 0:b2d46804658c 471 {
JDI_Mbed_Team 0:b2d46804658c 472 char pol = 0;
JDI_Mbed_Team 0:b2d46804658c 473 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 0:b2d46804658c 474 SetTransfermode(transfermode);
JDI_Mbed_Team 0:b2d46804658c 475
JDI_Mbed_Team 0:b2d46804658c 476 // frame
JDI_Mbed_Team 0:b2d46804658c 477 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 0:b2d46804658c 478 // line
JDI_Mbed_Team 0:b2d46804658c 479 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 480 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 481 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 482 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 0:b2d46804658c 483 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 0:b2d46804658c 484
JDI_Mbed_Team 0:b2d46804658c 485 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 0:b2d46804658c 486 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 0:b2d46804658c 487
JDI_Mbed_Team 0:b2d46804658c 488 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 0:b2d46804658c 489 {
JDI_Mbed_Team 0:b2d46804658c 490 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 0:b2d46804658c 491 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 0:b2d46804658c 492 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 0:b2d46804658c 493 _spi.write(TrValue[k]);
JDI_Mbed_Team 0:b2d46804658c 494 }
JDI_Mbed_Team 0:b2d46804658c 495 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 496 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 497 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 0:b2d46804658c 498 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 0:b2d46804658c 499 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 500 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 501 if(pol) pol=0x00;
JDI_Mbed_Team 0:b2d46804658c 502 else pol=0x01;
JDI_Mbed_Team 0:b2d46804658c 503 }
JDI_Mbed_Team 0:b2d46804658c 504 }
JDI_Mbed_Team 2:944f2968c19f 505 void memLCD8::writeDISP(int startline , int endline , int transfermode) // refresh display selected line
JDI_Mbed_Team 2:944f2968c19f 506 {
JDI_Mbed_Team 2:944f2968c19f 507 char pol = 0;
JDI_Mbed_Team 2:944f2968c19f 508 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 2:944f2968c19f 509 SetTransfermode(transfermode);
JDI_Mbed_Team 2:944f2968c19f 510
JDI_Mbed_Team 2:944f2968c19f 511 // frame
JDI_Mbed_Team 2:944f2968c19f 512 for (int i=startline; i<=endline; i++) {
JDI_Mbed_Team 2:944f2968c19f 513 // line
JDI_Mbed_Team 2:944f2968c19f 514 wait_us(6);
JDI_Mbed_Team 2:944f2968c19f 515 _cs = 1;
JDI_Mbed_Team 2:944f2968c19f 516 wait_us(6);
JDI_Mbed_Team 2:944f2968c19f 517 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 2:944f2968c19f 518 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 2:944f2968c19f 519
JDI_Mbed_Team 2:944f2968c19f 520 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 2:944f2968c19f 521 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 2:944f2968c19f 522
JDI_Mbed_Team 2:944f2968c19f 523 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 2:944f2968c19f 524 //for(int j=0; j<100; j+=TrAdd)
JDI_Mbed_Team 2:944f2968c19f 525 {
JDI_Mbed_Team 2:944f2968c19f 526 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 2:944f2968c19f 527 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 2:944f2968c19f 528 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 2:944f2968c19f 529 _spi.write(TrValue[k]);
JDI_Mbed_Team 2:944f2968c19f 530 }
JDI_Mbed_Team 2:944f2968c19f 531 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 2:944f2968c19f 532 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 2:944f2968c19f 533 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 2:944f2968c19f 534 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 2:944f2968c19f 535 wait_us(6);
JDI_Mbed_Team 2:944f2968c19f 536 _cs = 0;
JDI_Mbed_Team 2:944f2968c19f 537 if(pol) pol=0x00;
JDI_Mbed_Team 2:944f2968c19f 538 else pol=0x01;
JDI_Mbed_Team 2:944f2968c19f 539 }
JDI_Mbed_Team 2:944f2968c19f 540 }
JDI_Mbed_Team 0:b2d46804658c 541 //old function
JDI_Mbed_Team 0:b2d46804658c 542 void memLCD8::writeDISP(void) // refresh whole display
JDI_Mbed_Team 0:b2d46804658c 543 {
JDI_Mbed_Team 0:b2d46804658c 544
JDI_Mbed_Team 0:b2d46804658c 545 char pol = 0;
JDI_Mbed_Team 0:b2d46804658c 546 char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 0:b2d46804658c 547
JDI_Mbed_Team 0:b2d46804658c 548 // frame
JDI_Mbed_Team 0:b2d46804658c 549 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 0:b2d46804658c 550 // line
JDI_Mbed_Team 0:b2d46804658c 551 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 552 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 553 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 554 _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 0:b2d46804658c 555 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 0:b2d46804658c 556 for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[i*_width/2 + j]);
JDI_Mbed_Team 0:b2d46804658c 557 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 558 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 0:b2d46804658c 559 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 0:b2d46804658c 560 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 0:b2d46804658c 561 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 562 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 563 if(pol) pol=0x00;
JDI_Mbed_Team 0:b2d46804658c 564 else pol=0x01;
JDI_Mbed_Team 0:b2d46804658c 565 }
JDI_Mbed_Team 0:b2d46804658c 566 }
JDI_Mbed_Team 0:b2d46804658c 567 #endif
JDI_Mbed_Team 2:944f2968c19f 568
JDI_Mbed_Team 0:b2d46804658c 569 /**
JDI_Mbed_Team 0:b2d46804658c 570 * @brief Get Edited data for SPI transfer
JDI_Mbed_Team 0:b2d46804658c 571 * @param[in] int x:horizontal allocation left to right
JDI_Mbed_Team 0:b2d46804658c 572 * @param[in] int y:vertival allocation top to bottom
JDI_Mbed_Team 0:b2d46804658c 573 * @param[in] uint8_t* buff:buffer data for Display
JDI_Mbed_Team 0:b2d46804658c 574 */
JDI_Mbed_Team 0:b2d46804658c 575 int* memLCD8::GetPixelValue(int _x, int _y ,uint8_t* buff)
JDI_Mbed_Team 0:b2d46804658c 576 {
JDI_Mbed_Team 0:b2d46804658c 577 //bitmap data = 4bit data => modify transfer data bit size;
JDI_Mbed_Team 0:b2d46804658c 578 switch(TrModeCommand)
JDI_Mbed_Team 0:b2d46804658c 579 {
JDI_Mbed_Team 0:b2d46804658c 580 case 0x90: //TrBIT4:
JDI_Mbed_Team 0:b2d46804658c 581 // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 582 TrValue[0] = _dispBUF[_y* _width/2 + _x];
JDI_Mbed_Team 0:b2d46804658c 583 break;
JDI_Mbed_Team 0:b2d46804658c 584 case 0x80://TrBIT3:
JDI_Mbed_Team 0:b2d46804658c 585 // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 586 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 587 //for( int i = 0 ; i<12 ; i--)
JDI_Mbed_Team 0:b2d46804658c 588 {
JDI_Mbed_Team 0:b2d46804658c 589 //4 bit RGBN(Nは予備) => 3bit RGB
JDI_Mbed_Team 0:b2d46804658c 590 if( _width/2 > _x )
JDI_Mbed_Team 0:b2d46804658c 591 {
JDI_Mbed_Team 0:b2d46804658c 592 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0xE0) ) );
JDI_Mbed_Team 0:b2d46804658c 593 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0x0E) ) << 1);
JDI_Mbed_Team 0:b2d46804658c 594 }
JDI_Mbed_Team 0:b2d46804658c 595 if( _width/2 > _x + 1 )
JDI_Mbed_Team 0:b2d46804658c 596 {
JDI_Mbed_Team 0:b2d46804658c 597 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0xC0) ) >> 6);
JDI_Mbed_Team 0:b2d46804658c 598
JDI_Mbed_Team 0:b2d46804658c 599 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x20) ) << 2);
JDI_Mbed_Team 0:b2d46804658c 600 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x0E) ) << 3);
JDI_Mbed_Team 0:b2d46804658c 601 }
JDI_Mbed_Team 0:b2d46804658c 602 if( _width/2 > _x + 2 )
JDI_Mbed_Team 0:b2d46804658c 603 {
JDI_Mbed_Team 0:b2d46804658c 604 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0xE0) ) >> 4);
JDI_Mbed_Team 0:b2d46804658c 605 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x08) ) >> 3);
JDI_Mbed_Team 0:b2d46804658c 606
JDI_Mbed_Team 0:b2d46804658c 607 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x06) ) << 5);
JDI_Mbed_Team 0:b2d46804658c 608 }
JDI_Mbed_Team 0:b2d46804658c 609 if( _width/2 > _x + 3 )
JDI_Mbed_Team 0:b2d46804658c 610 {
JDI_Mbed_Team 0:b2d46804658c 611 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0xE0) ) >> 2);
JDI_Mbed_Team 0:b2d46804658c 612 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0x0E) ) >> 1);
JDI_Mbed_Team 0:b2d46804658c 613 }
JDI_Mbed_Team 0:b2d46804658c 614 }
JDI_Mbed_Team 0:b2d46804658c 615 break;
JDI_Mbed_Team 0:b2d46804658c 616 case 0x88://TrBIT1:
JDI_Mbed_Team 0:b2d46804658c 617 // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 618 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 619 for(int i = 0 ; i<4 ; i++)
JDI_Mbed_Team 0:b2d46804658c 620 {
JDI_Mbed_Team 0:b2d46804658c 621 //Green bit => monochrome bit
JDI_Mbed_Team 0:b2d46804658c 622 if( _width/2 > _x + i )
JDI_Mbed_Team 0:b2d46804658c 623 {
JDI_Mbed_Team 0:b2d46804658c 624 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) );
JDI_Mbed_Team 0:b2d46804658c 625 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 );
JDI_Mbed_Team 0:b2d46804658c 626 //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]);
JDI_Mbed_Team 0:b2d46804658c 627 }
JDI_Mbed_Team 0:b2d46804658c 628 }
JDI_Mbed_Team 0:b2d46804658c 629 break;
JDI_Mbed_Team 0:b2d46804658c 630 }
JDI_Mbed_Team 0:b2d46804658c 631 return TrValue;
JDI_Mbed_Team 0:b2d46804658c 632 }
JDI_Mbed_Team 2:944f2968c19f 633
JDI_Mbed_Team 0:b2d46804658c 634 /**
JDI_Mbed_Team 0:b2d46804658c 635 * @brief set Configuration for transfer mode
JDI_Mbed_Team 0:b2d46804658c 636 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit and some parameter
JDI_Mbed_Team 0:b2d46804658c 637 */
JDI_Mbed_Team 0:b2d46804658c 638 void memLCD8::SetTransfermode(int transfermode)
JDI_Mbed_Team 0:b2d46804658c 639 {
JDI_Mbed_Team 0:b2d46804658c 640 switch(transfermode)
JDI_Mbed_Team 0:b2d46804658c 641 {
JDI_Mbed_Team 0:b2d46804658c 642 case TrBIT4:
JDI_Mbed_Team 0:b2d46804658c 643 TrModeCommand = 0x90;
JDI_Mbed_Team 0:b2d46804658c 644 TrAdd = 1;
JDI_Mbed_Team 0:b2d46804658c 645 TrValNum = 1;
JDI_Mbed_Team 0:b2d46804658c 646 break;
JDI_Mbed_Team 0:b2d46804658c 647 case TrBIT3:
JDI_Mbed_Team 0:b2d46804658c 648 TrModeCommand = 0x80;
JDI_Mbed_Team 0:b2d46804658c 649 TrAdd = 4;
JDI_Mbed_Team 0:b2d46804658c 650 TrValNum = 3;
JDI_Mbed_Team 0:b2d46804658c 651 break;
JDI_Mbed_Team 0:b2d46804658c 652 case TrBIT1:
JDI_Mbed_Team 0:b2d46804658c 653 TrModeCommand = 0x88;
JDI_Mbed_Team 0:b2d46804658c 654 TrAdd = 4;
JDI_Mbed_Team 0:b2d46804658c 655 TrValNum = 1;
JDI_Mbed_Team 0:b2d46804658c 656 break;
JDI_Mbed_Team 0:b2d46804658c 657 }
JDI_Mbed_Team 0:b2d46804658c 658 }
JDI_Mbed_Team 2:944f2968c19f 659
JDI_Mbed_Team 0:b2d46804658c 660 /**
JDI_Mbed_Team 0:b2d46804658c 661 * @brief clear buffer data by background color data
JDI_Mbed_Team 0:b2d46804658c 662 */
JDI_Mbed_Team 0:b2d46804658c 663 void memLCD8::clsBUF(void)
JDI_Mbed_Team 0:b2d46804658c 664 {
JDI_Mbed_Team 0:b2d46804658c 665
JDI_Mbed_Team 0:b2d46804658c 666 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 0:b2d46804658c 667 for (int j=0; j<_width; j++) {
JDI_Mbed_Team 0:b2d46804658c 668 pixel(j,i,_background);
JDI_Mbed_Team 0:b2d46804658c 669 }
JDI_Mbed_Team 0:b2d46804658c 670 }
JDI_Mbed_Team 0:b2d46804658c 671 }
JDI_Mbed_Team 0:b2d46804658c 672
JDI_Mbed_Team 0:b2d46804658c 673 /**
JDI_Mbed_Team 0:b2d46804658c 674 * @brief set color data of foreground
JDI_Mbed_Team 0:b2d46804658c 675 */
JDI_Mbed_Team 0:b2d46804658c 676 void memLCD8::foreground(uint8_t colour)
JDI_Mbed_Team 0:b2d46804658c 677 {
JDI_Mbed_Team 0:b2d46804658c 678 _foreground = colour;
JDI_Mbed_Team 0:b2d46804658c 679 }
JDI_Mbed_Team 0:b2d46804658c 680
JDI_Mbed_Team 0:b2d46804658c 681 /**
JDI_Mbed_Team 0:b2d46804658c 682 * @brief set color data of background
JDI_Mbed_Team 0:b2d46804658c 683 */
JDI_Mbed_Team 0:b2d46804658c 684 void memLCD8::background(uint8_t colour)
JDI_Mbed_Team 0:b2d46804658c 685 {
JDI_Mbed_Team 0:b2d46804658c 686 _background = colour;
JDI_Mbed_Team 0:b2d46804658c 687 }
JDI_Mbed_Team 2:944f2968c19f 688
JDI_Mbed_Team 2:944f2968c19f 689 /**
JDI_Mbed_Team 2:944f2968c19f 690 * @brief get color data of background
JDI_Mbed_Team 2:944f2968c19f 691 */
JDI_Mbed_Team 2:944f2968c19f 692
JDI_Mbed_Team 2:944f2968c19f 693 unsigned char memLCD8::get_Background(void)
JDI_Mbed_Team 2:944f2968c19f 694 {
JDI_Mbed_Team 2:944f2968c19f 695 return _background;
JDI_Mbed_Team 2:944f2968c19f 696 }
JDI_Mbed_Team 2:944f2968c19f 697
JDI_Mbed_Team 0:b2d46804658c 698 /*
JDI_Mbed_Team 0:b2d46804658c 699 void memLCD8::setmarge(bool ifMarge)
JDI_Mbed_Team 0:b2d46804658c 700 {
JDI_Mbed_Team 0:b2d46804658c 701 _ifMarge = ifMarge;
JDI_Mbed_Team 0:b2d46804658c 702 }
JDI_Mbed_Team 0:b2d46804658c 703 */
JDI_Mbed_Team 0:b2d46804658c 704
JDI_Mbed_Team 0:b2d46804658c 705 /**
JDI_Mbed_Team 0:b2d46804658c 706 * @brief set a display size ,width ,height
JDI_Mbed_Team 0:b2d46804658c 707 */
JDI_Mbed_Team 0:b2d46804658c 708 void memLCD8::setWH(int width, int height)
JDI_Mbed_Team 0:b2d46804658c 709 {
JDI_Mbed_Team 0:b2d46804658c 710 _width = width;
JDI_Mbed_Team 0:b2d46804658c 711 _height = height;
JDI_Mbed_Team 0:b2d46804658c 712 }
JDI_Mbed_Team 0:b2d46804658c 713
JDI_Mbed_Team 0:b2d46804658c 714 /**
JDI_Mbed_Team 0:b2d46804658c 715 * @brief transfer a command code to the display by SPI
JDI_Mbed_Team 0:b2d46804658c 716 */
JDI_Mbed_Team 0:b2d46804658c 717 void memLCD8::command(char command)
JDI_Mbed_Team 0:b2d46804658c 718 {
JDI_Mbed_Team 0:b2d46804658c 719 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 720 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 721 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 722 _spi.write(command);//
JDI_Mbed_Team 0:b2d46804658c 723 _spi.write(0x00);// dummy
JDI_Mbed_Team 0:b2d46804658c 724 wait_us(6);
JDI_Mbed_Team 0:b2d46804658c 725 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 726 }
JDI_Mbed_Team 0:b2d46804658c 727 /**
JDI_Mbed_Team 0:b2d46804658c 728 * @brief set the Diaplay On/Off data
JDI_Mbed_Team 0:b2d46804658c 729 */
JDI_Mbed_Team 0:b2d46804658c 730 void memLCD8::SwDisp(bool ONorOFF)
JDI_Mbed_Team 0:b2d46804658c 731 {
JDI_Mbed_Team 0:b2d46804658c 732 _disp= ONorOFF;
JDI_Mbed_Team 0:b2d46804658c 733 }
JDI_Mbed_Team 0:b2d46804658c 734