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:
Mon Nov 12 05:08:34 2018 +0000
Revision:
5:8cc8e00fed46
Parent:
3:c67b96404016
Child:
6:4bfbc7e50577
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 5:8cc8e00fed46 3 * @brief ver5.0 Library source code file: Class for JDI MIP8 display
JDI_Mbed_Team 0:b2d46804658c 4 * @details
JDI_Mbed_Team 5:8cc8e00fed46 5 * Ver5.0 Addtional function is checking the refresh display speed between 4bit,3bit and 1bit transfer mode
JDI_Mbed_Team 3:c67b96404016 6 * Ver4.0 Addtional function is Line buffer version
JDI_Mbed_Team 3:c67b96404016 7 * Ver3.0 Addtional function is font display
JDI_Mbed_Team 3:c67b96404016 8 * ver2.0 Addtional function is Monochome display by 1bit mode of SPI transfer.
JDI_Mbed_Team 3:c67b96404016 9 *
JDI_Mbed_Team 5:8cc8e00fed46 10 * spi-transfer to Display has 3 mode.
JDI_Mbed_Team 5:8cc8e00fed46 11 * 4bit mode is color display, this bit arrange is R,G,B,x. R,G,B = R,G,B subpixel bit. x bit is Dummy.
JDI_Mbed_Team 5:8cc8e00fed46 12 * 3bit mode is color display, this bit arrange is R,G,B. R,G,B = R,G,B subpixel bit. No bit is Dummy.
JDI_Mbed_Team 5:8cc8e00fed46 13 * 1bit mode is monocrome display,high speed refresh mode. a only Green subpixel of bitmap data is transfered.
JDI_Mbed_Team 5:8cc8e00fed46 14 *
JDI_Mbed_Team 3:c67b96404016 15 * <license>
JDI_Mbed_Team 0:b2d46804658c 16 * Copyright 2018 Japan Display Inc.
JDI_Mbed_Team 0:b2d46804658c 17 * Licensed under the Apache License, Version 2.0 (the "License");
JDI_Mbed_Team 0:b2d46804658c 18 * you may not use this file except in compliance with the License.
JDI_Mbed_Team 0:b2d46804658c 19 * You may obtain a copy of the License at
JDI_Mbed_Team 0:b2d46804658c 20 * http://www.apache.org/licenses/LICENSE-2.0
JDI_Mbed_Team 0:b2d46804658c 21 * Unless required by applicable law or agreed to in writing, software
JDI_Mbed_Team 0:b2d46804658c 22 * distributed under the License is distributed on an "AS IS" BASIS,
JDI_Mbed_Team 0:b2d46804658c 23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JDI_Mbed_Team 0:b2d46804658c 24 * See the License for the specific language governing permissions and
JDI_Mbed_Team 0:b2d46804658c 25 * limitations under the License.
JDI_Mbed_Team 0:b2d46804658c 26 */
JDI_Mbed_Team 0:b2d46804658c 27
JDI_Mbed_Team 0:b2d46804658c 28 #include "mbed.h"
JDI_Mbed_Team 0:b2d46804658c 29 #include "MIP8F_SPI.h"
JDI_Mbed_Team 0:b2d46804658c 30
JDI_Mbed_Team 0:b2d46804658c 31 // for debug
JDI_Mbed_Team 0:b2d46804658c 32 //Serial pc2(USBTX, USBRX); // tx, rx
JDI_Mbed_Team 0:b2d46804658c 33
JDI_Mbed_Team 0:b2d46804658c 34 memLCD8::memLCD8(PinName mosi,PinName miso,PinName sclk,PinName cs,PinName disp,PinName power)
JDI_Mbed_Team 0:b2d46804658c 35 : _spi(mosi, miso, sclk),_cs(cs),_disp(disp),_power(power)
JDI_Mbed_Team 0:b2d46804658c 36 {
JDI_Mbed_Team 0:b2d46804658c 37
JDI_Mbed_Team 0:b2d46804658c 38 _power= 0;
JDI_Mbed_Team 0:b2d46804658c 39 _disp= 0;
JDI_Mbed_Team 0:b2d46804658c 40 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 41 wait_us(100);
JDI_Mbed_Team 0:b2d46804658c 42
JDI_Mbed_Team 0:b2d46804658c 43 _power= 1;
JDI_Mbed_Team 0:b2d46804658c 44 _spi.format(8,0); // 8bit mode3
JDI_Mbed_Team 0:b2d46804658c 45 _spi.frequency(2000000); // 2 Mhz SPI clock
JDI_Mbed_Team 0:b2d46804658c 46 _spi.write(0x00); // mbed dummy
JDI_Mbed_Team 0:b2d46804658c 47
JDI_Mbed_Team 0:b2d46804658c 48 /*
JDI_Mbed_Team 0:b2d46804658c 49 _cs = 1;
JDI_Mbed_Team 0:b2d46804658c 50 command(0x02); // All crear mode
JDI_Mbed_Team 0:b2d46804658c 51 _cs = 0;
JDI_Mbed_Team 0:b2d46804658c 52 */
JDI_Mbed_Team 2:944f2968c19f 53 _FixedFontWidth=0;//setting:actual font width display if _FixedFontWidth !=1: font fixed witdh
JDI_Mbed_Team 0:b2d46804658c 54 }
JDI_Mbed_Team 0:b2d46804658c 55
JDI_Mbed_Team 0:b2d46804658c 56 /**
JDI_Mbed_Team 0:b2d46804658c 57 * @brief set font name
JDI_Mbed_Team 0:b2d46804658c 58 */
JDI_Mbed_Team 0:b2d46804658c 59 void memLCD8::set_font(unsigned char* f)
JDI_Mbed_Team 0:b2d46804658c 60 {
JDI_Mbed_Team 0:b2d46804658c 61 font = f;
JDI_Mbed_Team 0:b2d46804658c 62 }
JDI_Mbed_Team 0:b2d46804658c 63
JDI_Mbed_Team 0:b2d46804658c 64 /**
JDI_Mbed_Team 2:944f2968c19f 65 * @brief set allocation for font display
JDI_Mbed_Team 0:b2d46804658c 66 */
JDI_Mbed_Team 0:b2d46804658c 67 void memLCD8::locate(int x, int y)
JDI_Mbed_Team 0:b2d46804658c 68 {
JDI_Mbed_Team 0:b2d46804658c 69 char_x = x;
JDI_Mbed_Team 0:b2d46804658c 70 char_y = y;
JDI_Mbed_Team 0:b2d46804658c 71 }
JDI_Mbed_Team 2:944f2968c19f 72
JDI_Mbed_Team 0:b2d46804658c 73 /**
JDI_Mbed_Team 3:c67b96404016 74 * @brief setting fixed width between charactor and charctor for font display
JDI_Mbed_Team 2:944f2968c19f 75 */
JDI_Mbed_Team 2:944f2968c19f 76 void memLCD8::set_FixedFontWidth( unsigned char width )
JDI_Mbed_Team 2:944f2968c19f 77 {
JDI_Mbed_Team 2:944f2968c19f 78 _FixedFontWidth = width;
JDI_Mbed_Team 2:944f2968c19f 79 }
JDI_Mbed_Team 3:c67b96404016 80 /**
JDI_Mbed_Team 3:c67b96404016 81 * @brief setting Actual width between charactor and charctor for font display
JDI_Mbed_Team 3:c67b96404016 82 */
JDI_Mbed_Team 2:944f2968c19f 83 void memLCD8::set_ActualFontWidth(void)
JDI_Mbed_Team 2:944f2968c19f 84 {
JDI_Mbed_Team 2:944f2968c19f 85 _FixedFontWidth = 0;
JDI_Mbed_Team 2:944f2968c19f 86 }
JDI_Mbed_Team 3:c67b96404016 87
JDI_Mbed_Team 2:944f2968c19f 88 /**
JDI_Mbed_Team 3:c67b96404016 89 * @brief set Configuration for transfer mode
JDI_Mbed_Team 3:c67b96404016 90 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit and some parameter
JDI_Mbed_Team 3:c67b96404016 91 */
JDI_Mbed_Team 3:c67b96404016 92 void memLCD8::SetTransfermode(int transfermode)
JDI_Mbed_Team 3:c67b96404016 93 {
JDI_Mbed_Team 3:c67b96404016 94 switch(transfermode)
JDI_Mbed_Team 3:c67b96404016 95 {
JDI_Mbed_Team 3:c67b96404016 96 case TrBIT4:
JDI_Mbed_Team 3:c67b96404016 97 TrModeCommand = 0x90;
JDI_Mbed_Team 3:c67b96404016 98 TrAdd = 1;
JDI_Mbed_Team 3:c67b96404016 99 TrValNum = 1;
JDI_Mbed_Team 3:c67b96404016 100 break;
JDI_Mbed_Team 3:c67b96404016 101 case TrBIT3:
JDI_Mbed_Team 3:c67b96404016 102 TrModeCommand = 0x80;
JDI_Mbed_Team 3:c67b96404016 103 TrAdd = 4;
JDI_Mbed_Team 3:c67b96404016 104 TrValNum = 3;
JDI_Mbed_Team 3:c67b96404016 105 break;
JDI_Mbed_Team 3:c67b96404016 106 case TrBIT1:
JDI_Mbed_Team 3:c67b96404016 107 TrModeCommand = 0x88;
JDI_Mbed_Team 3:c67b96404016 108 TrAdd = 4;
JDI_Mbed_Team 3:c67b96404016 109 TrValNum = 1;
JDI_Mbed_Team 3:c67b96404016 110 break;
JDI_Mbed_Team 3:c67b96404016 111 }
JDI_Mbed_Team 3:c67b96404016 112 }
JDI_Mbed_Team 3:c67b96404016 113
JDI_Mbed_Team 3:c67b96404016 114 /**
JDI_Mbed_Team 3:c67b96404016 115 * @brief set a display size ,width ,height
JDI_Mbed_Team 3:c67b96404016 116 */
JDI_Mbed_Team 3:c67b96404016 117 void memLCD8::setWH(int width, int height)
JDI_Mbed_Team 3:c67b96404016 118 {
JDI_Mbed_Team 3:c67b96404016 119 _width = width;
JDI_Mbed_Team 3:c67b96404016 120 _height = height;
JDI_Mbed_Team 3:c67b96404016 121 }
JDI_Mbed_Team 3:c67b96404016 122
JDI_Mbed_Team 3:c67b96404016 123 /**
JDI_Mbed_Team 3:c67b96404016 124 * @brief set color data of foreground
JDI_Mbed_Team 3:c67b96404016 125 */
JDI_Mbed_Team 3:c67b96404016 126 void memLCD8::foreground(uint8_t colour)
JDI_Mbed_Team 3:c67b96404016 127 {
JDI_Mbed_Team 3:c67b96404016 128 _foreground = colour;
JDI_Mbed_Team 3:c67b96404016 129 }
JDI_Mbed_Team 3:c67b96404016 130
JDI_Mbed_Team 3:c67b96404016 131 /**
JDI_Mbed_Team 3:c67b96404016 132 * @brief set color data of background
JDI_Mbed_Team 3:c67b96404016 133 */
JDI_Mbed_Team 3:c67b96404016 134 void memLCD8::background(uint8_t colour)
JDI_Mbed_Team 3:c67b96404016 135 {
JDI_Mbed_Team 3:c67b96404016 136 _background = colour;
JDI_Mbed_Team 3:c67b96404016 137 }
JDI_Mbed_Team 3:c67b96404016 138
JDI_Mbed_Team 3:c67b96404016 139 /**
JDI_Mbed_Team 3:c67b96404016 140 * @brief set the Diaplay On/Off data
JDI_Mbed_Team 3:c67b96404016 141 */
JDI_Mbed_Team 3:c67b96404016 142 void memLCD8::SwDisp(bool ONorOFF)
JDI_Mbed_Team 3:c67b96404016 143 {
JDI_Mbed_Team 3:c67b96404016 144 _disp= ONorOFF;
JDI_Mbed_Team 3:c67b96404016 145 }
JDI_Mbed_Team 3:c67b96404016 146
JDI_Mbed_Team 3:c67b96404016 147 /**
JDI_Mbed_Team 3:c67b96404016 148 * @brief transfer a command code to the display by SPI
JDI_Mbed_Team 3:c67b96404016 149 */
JDI_Mbed_Team 3:c67b96404016 150 void memLCD8::command(char command)
JDI_Mbed_Team 3:c67b96404016 151 {
JDI_Mbed_Team 3:c67b96404016 152 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 153 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 154 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 155 _spi.write(command);//
JDI_Mbed_Team 3:c67b96404016 156 _spi.write(0x00);// dummy
JDI_Mbed_Team 3:c67b96404016 157 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 158 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 159 }
JDI_Mbed_Team 3:c67b96404016 160
JDI_Mbed_Team 3:c67b96404016 161 /**
JDI_Mbed_Team 3:c67b96404016 162 * @brief putc
JDI_Mbed_Team 3:c67b96404016 163 */
JDI_Mbed_Team 3:c67b96404016 164 int memLCD8::_putc(int value)
JDI_Mbed_Team 3:c67b96404016 165 {
JDI_Mbed_Team 3:c67b96404016 166 if (value == '\n') { // new line
JDI_Mbed_Team 3:c67b96404016 167 char_x = 0;
JDI_Mbed_Team 3:c67b96404016 168 char_y = char_y + font[3];
JDI_Mbed_Team 3:c67b96404016 169 if (char_y >= _height - font[3]) {
JDI_Mbed_Team 3:c67b96404016 170 char_y = 0;
JDI_Mbed_Team 3:c67b96404016 171 }
JDI_Mbed_Team 3:c67b96404016 172 }
JDI_Mbed_Team 3:c67b96404016 173 #if FRAMEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 174 else {
JDI_Mbed_Team 3:c67b96404016 175 character(char_x, char_y, value);
JDI_Mbed_Team 3:c67b96404016 176 }
JDI_Mbed_Team 3:c67b96404016 177 #endif
JDI_Mbed_Team 3:c67b96404016 178 return value;
JDI_Mbed_Team 3:c67b96404016 179 }
JDI_Mbed_Team 3:c67b96404016 180
JDI_Mbed_Team 3:c67b96404016 181 /**
JDI_Mbed_Team 3:c67b96404016 182 * @brief getc
JDI_Mbed_Team 3:c67b96404016 183 */
JDI_Mbed_Team 3:c67b96404016 184 int memLCD8::_getc()
JDI_Mbed_Team 3:c67b96404016 185 {
JDI_Mbed_Team 3:c67b96404016 186 return -1;
JDI_Mbed_Team 3:c67b96404016 187 }
JDI_Mbed_Team 3:c67b96404016 188 /**
JDI_Mbed_Team 3:c67b96404016 189 * @brief get color data of background
JDI_Mbed_Team 3:c67b96404016 190 */
JDI_Mbed_Team 3:c67b96404016 191 unsigned char memLCD8::get_Background(void)
JDI_Mbed_Team 3:c67b96404016 192 {
JDI_Mbed_Team 3:c67b96404016 193 return _background;
JDI_Mbed_Team 3:c67b96404016 194 }
JDI_Mbed_Team 3:c67b96404016 195 /*
JDI_Mbed_Team 3:c67b96404016 196 void memLCD8::setmarge(bool ifMarge)
JDI_Mbed_Team 3:c67b96404016 197 {
JDI_Mbed_Team 3:c67b96404016 198 _ifMarge = ifMarge;
JDI_Mbed_Team 3:c67b96404016 199 }
JDI_Mbed_Team 3:c67b96404016 200 */
JDI_Mbed_Team 3:c67b96404016 201 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 202 // line buffer mode
JDI_Mbed_Team 3:c67b96404016 203 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 204 #if LINEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 205 /**
JDI_Mbed_Team 3:c67b96404016 206 * @brief Transfer One Pixel Data with x,y allocation Line buffer mode
JDI_Mbed_Team 3:c67b96404016 207 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 208 * @param[in] uint8_t color : the color data for Drawing 0x0X x is color data(RGBC) C is not used
JDI_Mbed_Team 3:c67b96404016 209 */
JDI_Mbed_Team 3:c67b96404016 210 void memLCD8::pixel(int x, uint8_t color)
JDI_Mbed_Team 3:c67b96404016 211 {
JDI_Mbed_Team 3:c67b96404016 212 if(!(x % 2)) _dispLINEBUF[x/2] = _dispLINEBUF[x/2]&0x0F | (color << 4)&0xF0 ; //MASK 0000 1111
JDI_Mbed_Team 3:c67b96404016 213 else _dispLINEBUF[x/2] = _dispLINEBUF[x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 3:c67b96404016 214 }
JDI_Mbed_Team 3:c67b96404016 215
JDI_Mbed_Team 3:c67b96404016 216 /**
JDI_Mbed_Team 3:c67b96404016 217 * @brief Transfer Pixel Data from same Line buffer to Display
JDI_Mbed_Team 3:c67b96404016 218 */
JDI_Mbed_Team 3:c67b96404016 219 void memLCD8::writeDISPLinebuffer(void) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 220 {
JDI_Mbed_Team 3:c67b96404016 221
JDI_Mbed_Team 3:c67b96404016 222 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 223 char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 224
JDI_Mbed_Team 3:c67b96404016 225 // frame
JDI_Mbed_Team 3:c67b96404016 226 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 227 // line
JDI_Mbed_Team 3:c67b96404016 228 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 229 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 230 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 231 _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 232 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 233 for(int j=0; j<_width/2; j++) _spi.write(_dispLINEBUF[j]);
JDI_Mbed_Team 3:c67b96404016 234 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 235 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 236 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 237 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 238 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 239 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 240 }
JDI_Mbed_Team 3:c67b96404016 241 }
JDI_Mbed_Team 3:c67b96404016 242
JDI_Mbed_Team 3:c67b96404016 243 /**
JDI_Mbed_Team 3:c67b96404016 244 * @brief Transfer Pixel Data from line buffer to Display
JDI_Mbed_Team 3:c67b96404016 245 * @param[in] int line : set line number for display.
JDI_Mbed_Team 3:c67b96404016 246 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 3:c67b96404016 247 */
JDI_Mbed_Team 3:c67b96404016 248 void memLCD8::writeDISP(int line,int transfermode) // refresh gate line display
JDI_Mbed_Team 3:c67b96404016 249 {
JDI_Mbed_Team 3:c67b96404016 250
JDI_Mbed_Team 3:c67b96404016 251 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 252 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 253 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 254
JDI_Mbed_Team 3:c67b96404016 255 // frame
JDI_Mbed_Team 3:c67b96404016 256 // line
JDI_Mbed_Team 3:c67b96404016 257 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 258 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 259 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 260 _spi.write(TrModeCommand | (pol << 6) | (line+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 261 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 262
JDI_Mbed_Team 3:c67b96404016 263 _spi.write((line+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 264 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 265
JDI_Mbed_Team 3:c67b96404016 266 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 267 {
JDI_Mbed_Team 3:c67b96404016 268 GetPixelValueFromLineBuffer(j,_dispLINEBUF);
JDI_Mbed_Team 3:c67b96404016 269 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 270 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 271 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 272 }
JDI_Mbed_Team 3:c67b96404016 273 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 274 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 275 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 276 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 277 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 278 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 279 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 280 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 281
JDI_Mbed_Team 3:c67b96404016 282 }
JDI_Mbed_Team 3:c67b96404016 283
JDI_Mbed_Team 3:c67b96404016 284 /**
JDI_Mbed_Team 3:c67b96404016 285 * @brief Get Edited data for SPI transfer from line buffer
JDI_Mbed_Team 3:c67b96404016 286 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 287 * @param[in] uint8_t* buff : buffer data for Display
JDI_Mbed_Team 3:c67b96404016 288 */
JDI_Mbed_Team 3:c67b96404016 289 int* memLCD8::GetPixelValueFromLineBuffer(int _x,uint8_t* buff)
JDI_Mbed_Team 3:c67b96404016 290 {
JDI_Mbed_Team 3:c67b96404016 291 //bitmap data = 4bit data => modify transfer data bit size;
JDI_Mbed_Team 3:c67b96404016 292 switch(TrModeCommand)
JDI_Mbed_Team 3:c67b96404016 293 {
JDI_Mbed_Team 3:c67b96404016 294 case 0x90: //TrBIT4:
JDI_Mbed_Team 3:c67b96404016 295 // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。
JDI_Mbed_Team 3:c67b96404016 296 TrValue[0] = _dispLINEBUF[_x];
JDI_Mbed_Team 3:c67b96404016 297 break;
JDI_Mbed_Team 3:c67b96404016 298 case 0x80://TrBIT3:
JDI_Mbed_Team 3:c67b96404016 299 // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。
JDI_Mbed_Team 3:c67b96404016 300 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 3:c67b96404016 301 //for( int i = 0 ; i<12 ; i--)
JDI_Mbed_Team 3:c67b96404016 302 {
JDI_Mbed_Team 3:c67b96404016 303 //4 bit RGBN(Nは予備) => 3bit RGB
JDI_Mbed_Team 3:c67b96404016 304 if( _width/2 > _x )
JDI_Mbed_Team 3:c67b96404016 305 {
JDI_Mbed_Team 3:c67b96404016 306 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x ]&0xE0) ) );
JDI_Mbed_Team 3:c67b96404016 307 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x ]&0x0E) ) << 1);
JDI_Mbed_Team 3:c67b96404016 308 }
JDI_Mbed_Team 3:c67b96404016 309 if( _width/2 > _x + 1 )
JDI_Mbed_Team 3:c67b96404016 310 {
JDI_Mbed_Team 3:c67b96404016 311 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + 1]&0xC0) ) >> 6);
JDI_Mbed_Team 3:c67b96404016 312
JDI_Mbed_Team 3:c67b96404016 313 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[_x + 1]&0x20) ) << 2);
JDI_Mbed_Team 3:c67b96404016 314 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[_x + 1]&0x0E) ) << 3);
JDI_Mbed_Team 3:c67b96404016 315 }
JDI_Mbed_Team 3:c67b96404016 316 if( _width/2 > _x + 2 )
JDI_Mbed_Team 3:c67b96404016 317 {
JDI_Mbed_Team 3:c67b96404016 318 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[ _x + 2]&0xE0) ) >> 4);
JDI_Mbed_Team 3:c67b96404016 319 TrValue[1] = TrValue[1] | ( ( (_dispLINEBUF[ _x + 2]&0x08) ) >> 3);
JDI_Mbed_Team 3:c67b96404016 320
JDI_Mbed_Team 3:c67b96404016 321 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[_x + 2]&0x06) ) << 5);
JDI_Mbed_Team 3:c67b96404016 322 }
JDI_Mbed_Team 3:c67b96404016 323 if( _width/2 > _x + 3 )
JDI_Mbed_Team 3:c67b96404016 324 {
JDI_Mbed_Team 3:c67b96404016 325 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[ _x + 3]&0xE0) ) >> 2);
JDI_Mbed_Team 3:c67b96404016 326 TrValue[2] = TrValue[2] | ( ( (_dispLINEBUF[_x + 3]&0x0E) ) >> 1);
JDI_Mbed_Team 3:c67b96404016 327 }
JDI_Mbed_Team 3:c67b96404016 328 }
JDI_Mbed_Team 3:c67b96404016 329 break;
JDI_Mbed_Team 3:c67b96404016 330 case 0x88://TrBIT1:
JDI_Mbed_Team 3:c67b96404016 331 // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。
JDI_Mbed_Team 3:c67b96404016 332 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 3:c67b96404016 333 for(int i = 0 ; i<4 ; i++)
JDI_Mbed_Team 3:c67b96404016 334 {
JDI_Mbed_Team 3:c67b96404016 335 //Green bit => monochrome bit
JDI_Mbed_Team 3:c67b96404016 336 if( _width/2 > _x + i )
JDI_Mbed_Team 3:c67b96404016 337 {
JDI_Mbed_Team 3:c67b96404016 338 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) );
JDI_Mbed_Team 3:c67b96404016 339 TrValue[0] = TrValue[0] | ( ( (_dispLINEBUF[_x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 );
JDI_Mbed_Team 3:c67b96404016 340 //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]);
JDI_Mbed_Team 3:c67b96404016 341 }
JDI_Mbed_Team 3:c67b96404016 342 }
JDI_Mbed_Team 3:c67b96404016 343 break;
JDI_Mbed_Team 3:c67b96404016 344 }
JDI_Mbed_Team 3:c67b96404016 345 return TrValue;
JDI_Mbed_Team 3:c67b96404016 346 }
JDI_Mbed_Team 3:c67b96404016 347
JDI_Mbed_Team 3:c67b96404016 348 /**
JDI_Mbed_Team 3:c67b96404016 349 * @brief clear line buffer data by background color data
JDI_Mbed_Team 3:c67b96404016 350 */
JDI_Mbed_Team 3:c67b96404016 351 void memLCD8::clsLINEBUF(void)
JDI_Mbed_Team 3:c67b96404016 352 {
JDI_Mbed_Team 3:c67b96404016 353
JDI_Mbed_Team 3:c67b96404016 354 for (int j=0; j<_width; j++) {
JDI_Mbed_Team 3:c67b96404016 355 pixel(j,_background);
JDI_Mbed_Team 3:c67b96404016 356 }
JDI_Mbed_Team 3:c67b96404016 357 }
JDI_Mbed_Team 3:c67b96404016 358 #endif
JDI_Mbed_Team 3:c67b96404016 359 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 360 // Frame buffer mode
JDI_Mbed_Team 3:c67b96404016 361 //////////////////////////////////////////////////////////////////////////////
JDI_Mbed_Team 3:c67b96404016 362 #if FRAMEBUFF_MODE
JDI_Mbed_Team 3:c67b96404016 363
JDI_Mbed_Team 3:c67b96404016 364 /**
JDI_Mbed_Team 3:c67b96404016 365 * @brief display the text.
JDI_Mbed_Team 3:c67b96404016 366 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 367 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 368 * @param[in] char* text : strings
JDI_Mbed_Team 3:c67b96404016 369 */
JDI_Mbed_Team 3:c67b96404016 370 int memLCD8::textout(int x,int y,char* text)
JDI_Mbed_Team 3:c67b96404016 371 {
JDI_Mbed_Team 3:c67b96404016 372 int i=0;
JDI_Mbed_Team 3:c67b96404016 373 char_x = x;
JDI_Mbed_Team 3:c67b96404016 374 char_y = y;
JDI_Mbed_Team 3:c67b96404016 375
JDI_Mbed_Team 3:c67b96404016 376 while(text[i] != 0x00 )
JDI_Mbed_Team 3:c67b96404016 377 {
JDI_Mbed_Team 3:c67b96404016 378 character(char_x, char_y, text[i]);
JDI_Mbed_Team 3:c67b96404016 379 i++;
JDI_Mbed_Team 3:c67b96404016 380 }
JDI_Mbed_Team 3:c67b96404016 381 return text[i];
JDI_Mbed_Team 3:c67b96404016 382 }
JDI_Mbed_Team 3:c67b96404016 383
JDI_Mbed_Team 3:c67b96404016 384 /**
JDI_Mbed_Team 3:c67b96404016 385 * @brief display the oblique text.
JDI_Mbed_Team 3:c67b96404016 386 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 387 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 388 * @param[in] char* text : strings
JDI_Mbed_Team 3:c67b96404016 389 */
JDI_Mbed_Team 3:c67b96404016 390 int memLCD8::obliqueout(int x,int y,char* text)
JDI_Mbed_Team 3:c67b96404016 391 {
JDI_Mbed_Team 3:c67b96404016 392 int i=0;
JDI_Mbed_Team 3:c67b96404016 393 char_x = x;
JDI_Mbed_Team 3:c67b96404016 394 char_y = y;
JDI_Mbed_Team 3:c67b96404016 395
JDI_Mbed_Team 3:c67b96404016 396 while(text[i] != 0x00 )
JDI_Mbed_Team 3:c67b96404016 397 {
JDI_Mbed_Team 3:c67b96404016 398 oblique(char_x, char_y, text[i]);
JDI_Mbed_Team 3:c67b96404016 399 i++;
JDI_Mbed_Team 3:c67b96404016 400 }
JDI_Mbed_Team 3:c67b96404016 401 return text[i];
JDI_Mbed_Team 3:c67b96404016 402 }
JDI_Mbed_Team 3:c67b96404016 403
JDI_Mbed_Team 3:c67b96404016 404 /**
JDI_Mbed_Team 3:c67b96404016 405 * @brief dispay a character by bog font. big font is that "char data" byte size is over 0xff.
JDI_Mbed_Team 3:c67b96404016 406 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 407 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 408 * @param[in] char c : a charactor.
JDI_Mbed_Team 1:2b85e7edcc4e 409 *
JDI_Mbed_Team 0:b2d46804658c 410 */
JDI_Mbed_Team 2:944f2968c19f 411 void memLCD8::character(int x, int y, int c)
JDI_Mbed_Team 0:b2d46804658c 412 {
JDI_Mbed_Team 0:b2d46804658c 413 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 414 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 0:b2d46804658c 415 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 416 unsigned char z,w;
JDI_Mbed_Team 2:944f2968c19f 417
JDI_Mbed_Team 3:c67b96404016 418 if ((c < 32) || (c > 127)) return; // test char range
JDI_Mbed_Team 1:2b85e7edcc4e 419
JDI_Mbed_Team 2:944f2968c19f 420 //for big font
JDI_Mbed_Team 2:944f2968c19f 421 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 422 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 423 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 424 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 425 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 426 headroffset = 5;
JDI_Mbed_Team 0:b2d46804658c 427
JDI_Mbed_Team 2:944f2968c19f 428 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 429 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 430 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 431 if (char_y >= _height - vert) char_y = 0; // original = font[2] T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 432 }
JDI_Mbed_Team 0:b2d46804658c 433
JDI_Mbed_Team 2:944f2968c19f 434 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 435
JDI_Mbed_Team 2:944f2968c19f 436 if( _FixedFontWidth == 0 ) w = zeichen[0]; // width of actual char
JDI_Mbed_Team 2:944f2968c19f 437 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 438
JDI_Mbed_Team 0:b2d46804658c 439 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 440 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 441 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 442 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 443 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 444 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 445
JDI_Mbed_Team 0:b2d46804658c 446 }
JDI_Mbed_Team 0:b2d46804658c 447 }
JDI_Mbed_Team 0:b2d46804658c 448 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 449 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 450 }
JDI_Mbed_Team 0:b2d46804658c 451
JDI_Mbed_Team 0:b2d46804658c 452 /**
JDI_Mbed_Team 3:c67b96404016 453 * @brief dispay a oblique typte character by big font.
JDI_Mbed_Team 3:c67b96404016 454 * @param[in] int x : horizontal allocation , up-left of text
JDI_Mbed_Team 3:c67b96404016 455 * @param[in] int y : vertical allocation , bottom-right of text
JDI_Mbed_Team 3:c67b96404016 456 * @param[in] char c : a charactor.
JDI_Mbed_Team 2:944f2968c19f 457 */
JDI_Mbed_Team 2:944f2968c19f 458 void memLCD8::oblique(int x, int y, int c)
JDI_Mbed_Team 2:944f2968c19f 459 {
JDI_Mbed_Team 2:944f2968c19f 460 unsigned int hor,vert,offset0,offset1,bpl,j,i,b; // T.Okamoto modified, for big font
JDI_Mbed_Team 2:944f2968c19f 461 unsigned int headroffset;// 2018-10-26 added by Y.Saruhashi
JDI_Mbed_Team 2:944f2968c19f 462 unsigned char* zeichen;
JDI_Mbed_Team 2:944f2968c19f 463 unsigned char z,w;
JDI_Mbed_Team 3:c67b96404016 464 if ((c < 32) || (c > 127)) return; // test char range
JDI_Mbed_Team 2:944f2968c19f 465
JDI_Mbed_Team 2:944f2968c19f 466 //for big font
JDI_Mbed_Team 2:944f2968c19f 467 offset0 = font[0]; // bytes / char uppser adress
JDI_Mbed_Team 2:944f2968c19f 468 offset1 = font[1]; // bytes / char lower adress
JDI_Mbed_Team 2:944f2968c19f 469 hor = font[2]; // get hor size of font
JDI_Mbed_Team 2:944f2968c19f 470 vert = font[3]; // get vert size of font
JDI_Mbed_Team 2:944f2968c19f 471 bpl = font[4]; // bytes per line
JDI_Mbed_Team 2:944f2968c19f 472 headroffset = 5;
JDI_Mbed_Team 2:944f2968c19f 473
JDI_Mbed_Team 2:944f2968c19f 474 int oblique_raio=3; // 3 = 30(%percentage) / 10
JDI_Mbed_Team 2:944f2968c19f 475 int shift_x = (hor*oblique_raio)/10; //oblique pixel x size, top of char;
JDI_Mbed_Team 2:944f2968c19f 476 int shift_y = vert / shift_x; //oblique ratio for vertical.
JDI_Mbed_Team 2:944f2968c19f 477
JDI_Mbed_Team 2:944f2968c19f 478 if (char_x + hor > _width) {
JDI_Mbed_Team 2:944f2968c19f 479 char_x = 0;
JDI_Mbed_Team 2:944f2968c19f 480 char_y = char_y + vert;
JDI_Mbed_Team 2:944f2968c19f 481 if (char_y >= _height - vert) char_y = 0;
JDI_Mbed_Team 2:944f2968c19f 482 }
JDI_Mbed_Team 2:944f2968c19f 483
JDI_Mbed_Team 2:944f2968c19f 484 zeichen = &font[(c -32) * (offset0 *256 + offset1) + headroffset];
JDI_Mbed_Team 2:944f2968c19f 485 if( _FixedFontWidth == 0 ) w = zeichen[0]; // actual width of char
JDI_Mbed_Team 2:944f2968c19f 486 else w = _FixedFontWidth; // fixed width of char
JDI_Mbed_Team 2:944f2968c19f 487
JDI_Mbed_Team 2:944f2968c19f 488 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 2:944f2968c19f 489 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 2:944f2968c19f 490 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 2:944f2968c19f 491 b = 1 << (j & 0x07);
JDI_Mbed_Team 2:944f2968c19f 492 if (( z & b ) != 0x00) pixel(x+i+shift_x-(j/shift_y),y+j,_foreground);
JDI_Mbed_Team 2:944f2968c19f 493 else if (_ifMarge == 0) pixel(x+i+shift_x-(j/shift_y),y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 2:944f2968c19f 494
JDI_Mbed_Team 2:944f2968c19f 495 }
JDI_Mbed_Team 2:944f2968c19f 496 }
JDI_Mbed_Team 2:944f2968c19f 497 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 2:944f2968c19f 498 else char_x += hor;
JDI_Mbed_Team 2:944f2968c19f 499 }
JDI_Mbed_Team 2:944f2968c19f 500
JDI_Mbed_Team 2:944f2968c19f 501 /**
JDI_Mbed_Team 2:944f2968c19f 502 * @brief dispay the image from symbol data
JDI_Mbed_Team 0:b2d46804658c 503 */
JDI_Mbed_Team 0:b2d46804658c 504 void memLCD8::Symbol(unsigned int x, unsigned int y, unsigned char *symbol)
JDI_Mbed_Team 0:b2d46804658c 505 {
JDI_Mbed_Team 0:b2d46804658c 506 unsigned int hor,vert,bpl,j,i,b;
JDI_Mbed_Team 0:b2d46804658c 507 unsigned char* zeichen;
JDI_Mbed_Team 0:b2d46804658c 508 unsigned char z,w;
JDI_Mbed_Team 0:b2d46804658c 509 hor = symbol[0]; // get hor size of font
JDI_Mbed_Team 0:b2d46804658c 510 vert = symbol[1]; // get vert size of font
JDI_Mbed_Team 0:b2d46804658c 511 bpl = symbol[2]; // bytes per line
JDI_Mbed_Team 0:b2d46804658c 512
JDI_Mbed_Team 0:b2d46804658c 513 if (char_x + hor > _width) {
JDI_Mbed_Team 0:b2d46804658c 514 char_x = 0;
JDI_Mbed_Team 0:b2d46804658c 515 char_y = char_y + vert;
JDI_Mbed_Team 0:b2d46804658c 516 if (char_y >= _height - symbol[1]) char_y = 0;
JDI_Mbed_Team 0:b2d46804658c 517 }
JDI_Mbed_Team 2:944f2968c19f 518
JDI_Mbed_Team 0:b2d46804658c 519 zeichen = &symbol[3];
JDI_Mbed_Team 2:944f2968c19f 520 w = zeichen[0]; // actual width of char
JDI_Mbed_Team 0:b2d46804658c 521 for (j=0; j<vert; j++) { // vert line
JDI_Mbed_Team 0:b2d46804658c 522 for (i=0; i<hor; i++) { // horz line
JDI_Mbed_Team 0:b2d46804658c 523 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
JDI_Mbed_Team 0:b2d46804658c 524 b = 1 << (j & 0x07);
JDI_Mbed_Team 0:b2d46804658c 525 if (( z & b ) != 0x00) pixel(x+i,y+j,_foreground);
JDI_Mbed_Team 0:b2d46804658c 526 else if (_ifMarge == 0) pixel(x+i,y+j,_background);// _background -> _LayerBUF[index];
JDI_Mbed_Team 0:b2d46804658c 527 }
JDI_Mbed_Team 0:b2d46804658c 528 }
JDI_Mbed_Team 0:b2d46804658c 529 if ((w + 2) < hor) char_x += w + 2; // x offset to next char
JDI_Mbed_Team 0:b2d46804658c 530 else char_x += hor;
JDI_Mbed_Team 0:b2d46804658c 531 }
JDI_Mbed_Team 0:b2d46804658c 532
JDI_Mbed_Team 0:b2d46804658c 533 /**
JDI_Mbed_Team 0:b2d46804658c 534 * @brief dispay a circle line by color data
JDI_Mbed_Team 0:b2d46804658c 535 */
JDI_Mbed_Team 0:b2d46804658c 536 void memLCD8::circle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 537 {
JDI_Mbed_Team 0:b2d46804658c 538 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 539 do {
JDI_Mbed_Team 0:b2d46804658c 540 pixel(x0-x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 541 pixel(x0+x, y0+y,color);
JDI_Mbed_Team 0:b2d46804658c 542 pixel(x0+x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 543 pixel(x0-x, y0-y,color);
JDI_Mbed_Team 0:b2d46804658c 544 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 545 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 546 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 547 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 548 }
JDI_Mbed_Team 0:b2d46804658c 549 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 550 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 551
JDI_Mbed_Team 0:b2d46804658c 552 }
JDI_Mbed_Team 3:c67b96404016 553
JDI_Mbed_Team 0:b2d46804658c 554 /**
JDI_Mbed_Team 0:b2d46804658c 555 * @brief dispay a filled circle by color data
JDI_Mbed_Team 0:b2d46804658c 556 */
JDI_Mbed_Team 0:b2d46804658c 557 void memLCD8::fillcircle(int x0, int y0, int r, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 558 {
JDI_Mbed_Team 0:b2d46804658c 559 int x = -r, y = 0, err = 2-2*r, e2;
JDI_Mbed_Team 0:b2d46804658c 560 do {
JDI_Mbed_Team 0:b2d46804658c 561 vline(x0-x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 562 vline(x0+x, y0-y, y0+y, color);
JDI_Mbed_Team 0:b2d46804658c 563 e2 = err;
JDI_Mbed_Team 0:b2d46804658c 564 if (e2 <= y) {
JDI_Mbed_Team 0:b2d46804658c 565 err += ++y*2+1;
JDI_Mbed_Team 0:b2d46804658c 566 if (-x == y && e2 <= x) e2 = 0;
JDI_Mbed_Team 0:b2d46804658c 567 }
JDI_Mbed_Team 0:b2d46804658c 568 if (e2 > x) err += ++x*2+1;
JDI_Mbed_Team 0:b2d46804658c 569 } while (x <= 0);
JDI_Mbed_Team 0:b2d46804658c 570 }
JDI_Mbed_Team 2:944f2968c19f 571
JDI_Mbed_Team 0:b2d46804658c 572 /**
JDI_Mbed_Team 0:b2d46804658c 573 * @brief dispay a horizontal line by color data
JDI_Mbed_Team 0:b2d46804658c 574 */
JDI_Mbed_Team 0:b2d46804658c 575 void memLCD8::hline(int x0, int x1, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 576 {
JDI_Mbed_Team 0:b2d46804658c 577 int w;
JDI_Mbed_Team 0:b2d46804658c 578 w = x1 - x0 + 1;
JDI_Mbed_Team 0:b2d46804658c 579 for (int j=0; j<w; j++) pixel(x0+j, y,color);
JDI_Mbed_Team 0:b2d46804658c 580 }
JDI_Mbed_Team 0:b2d46804658c 581 /**
JDI_Mbed_Team 0:b2d46804658c 582 * @brief dispay a vertical line by color data
JDI_Mbed_Team 0:b2d46804658c 583 */
JDI_Mbed_Team 0:b2d46804658c 584 void memLCD8::vline(int x, int y0, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 585 {
JDI_Mbed_Team 0:b2d46804658c 586 int h;
JDI_Mbed_Team 0:b2d46804658c 587 h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 588 for (int j=0; j<h; j++) pixel(x, y0+j,color);
JDI_Mbed_Team 0:b2d46804658c 589 }
JDI_Mbed_Team 3:c67b96404016 590
JDI_Mbed_Team 0:b2d46804658c 591 /**
JDI_Mbed_Team 0:b2d46804658c 592 * @brief dispay a line by color data
JDI_Mbed_Team 0:b2d46804658c 593 */
JDI_Mbed_Team 0:b2d46804658c 594 void memLCD8::line(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 595 {
JDI_Mbed_Team 0:b2d46804658c 596 int dx = 0, dy = 0;
JDI_Mbed_Team 0:b2d46804658c 597 int dx_sym = 0, dy_sym = 0;
JDI_Mbed_Team 0:b2d46804658c 598 int dx_x2 = 0, dy_x2 = 0;
JDI_Mbed_Team 0:b2d46804658c 599 int di = 0;
JDI_Mbed_Team 0:b2d46804658c 600
JDI_Mbed_Team 0:b2d46804658c 601 dx = x1-x0;
JDI_Mbed_Team 0:b2d46804658c 602 dy = y1-y0;
JDI_Mbed_Team 0:b2d46804658c 603
JDI_Mbed_Team 3:c67b96404016 604 if (dx == 0) { // vertical line
JDI_Mbed_Team 0:b2d46804658c 605 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 606 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 607 return;
JDI_Mbed_Team 0:b2d46804658c 608 }
JDI_Mbed_Team 0:b2d46804658c 609
JDI_Mbed_Team 0:b2d46804658c 610 if (dx > 0) {
JDI_Mbed_Team 0:b2d46804658c 611 dx_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 612 } else {
JDI_Mbed_Team 0:b2d46804658c 613 dx_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 614 }
JDI_Mbed_Team 3:c67b96404016 615 if (dy == 0) { // horizontal line
JDI_Mbed_Team 0:b2d46804658c 616 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 617 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 618 return;
JDI_Mbed_Team 0:b2d46804658c 619 }
JDI_Mbed_Team 0:b2d46804658c 620
JDI_Mbed_Team 0:b2d46804658c 621 if (dy > 0) {
JDI_Mbed_Team 0:b2d46804658c 622 dy_sym = 1;
JDI_Mbed_Team 0:b2d46804658c 623 } else {
JDI_Mbed_Team 0:b2d46804658c 624 dy_sym = -1;
JDI_Mbed_Team 0:b2d46804658c 625 }
JDI_Mbed_Team 0:b2d46804658c 626
JDI_Mbed_Team 0:b2d46804658c 627 dx = dx_sym*dx;
JDI_Mbed_Team 0:b2d46804658c 628 dy = dy_sym*dy;
JDI_Mbed_Team 0:b2d46804658c 629
JDI_Mbed_Team 0:b2d46804658c 630 dx_x2 = dx*2;
JDI_Mbed_Team 0:b2d46804658c 631 dy_x2 = dy*2;
JDI_Mbed_Team 0:b2d46804658c 632
JDI_Mbed_Team 0:b2d46804658c 633 if (dx >= dy) {
JDI_Mbed_Team 0:b2d46804658c 634 di = dy_x2 - dx;
JDI_Mbed_Team 0:b2d46804658c 635 while (x0 != x1) {
JDI_Mbed_Team 0:b2d46804658c 636
JDI_Mbed_Team 0:b2d46804658c 637 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 638 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 639 if (di<0) {
JDI_Mbed_Team 0:b2d46804658c 640 di += dy_x2;
JDI_Mbed_Team 0:b2d46804658c 641 } else {
JDI_Mbed_Team 0:b2d46804658c 642 di += dy_x2 - dx_x2;
JDI_Mbed_Team 0:b2d46804658c 643 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 644 }
JDI_Mbed_Team 0:b2d46804658c 645 }
JDI_Mbed_Team 0:b2d46804658c 646 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 647 } else {
JDI_Mbed_Team 0:b2d46804658c 648 di = dx_x2 - dy;
JDI_Mbed_Team 0:b2d46804658c 649 while (y0 != y1) {
JDI_Mbed_Team 0:b2d46804658c 650 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 651 y0 += dy_sym;
JDI_Mbed_Team 0:b2d46804658c 652 if (di < 0) {
JDI_Mbed_Team 0:b2d46804658c 653 di += dx_x2;
JDI_Mbed_Team 0:b2d46804658c 654 } else {
JDI_Mbed_Team 0:b2d46804658c 655 di += dx_x2 - dy_x2;
JDI_Mbed_Team 0:b2d46804658c 656 x0 += dx_sym;
JDI_Mbed_Team 0:b2d46804658c 657 }
JDI_Mbed_Team 0:b2d46804658c 658 }
JDI_Mbed_Team 0:b2d46804658c 659 pixel(x0, y0, color);
JDI_Mbed_Team 0:b2d46804658c 660 }
JDI_Mbed_Team 0:b2d46804658c 661 return;
JDI_Mbed_Team 0:b2d46804658c 662 }
JDI_Mbed_Team 0:b2d46804658c 663 /**
JDI_Mbed_Team 0:b2d46804658c 664 * @brief dispay a rectangle line by color data
JDI_Mbed_Team 0:b2d46804658c 665 */
JDI_Mbed_Team 0:b2d46804658c 666 void memLCD8::rect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 667 {
JDI_Mbed_Team 0:b2d46804658c 668
JDI_Mbed_Team 0:b2d46804658c 669 if (x1 > x0) hline(x0,x1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 670 else hline(x1,x0,y0,color);
JDI_Mbed_Team 0:b2d46804658c 671
JDI_Mbed_Team 0:b2d46804658c 672 if (y1 > y0) vline(x0,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 673 else vline(x0,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 674
JDI_Mbed_Team 0:b2d46804658c 675 if (x1 > x0) hline(x0,x1,y1,color);
JDI_Mbed_Team 0:b2d46804658c 676 else hline(x1,x0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 677
JDI_Mbed_Team 0:b2d46804658c 678 if (y1 > y0) vline(x1,y0,y1,color);
JDI_Mbed_Team 0:b2d46804658c 679 else vline(x1,y1,y0,color);
JDI_Mbed_Team 0:b2d46804658c 680
JDI_Mbed_Team 0:b2d46804658c 681 return;
JDI_Mbed_Team 0:b2d46804658c 682 }
JDI_Mbed_Team 0:b2d46804658c 683 /**
JDI_Mbed_Team 0:b2d46804658c 684 * @brief dispay a filled rectangle by color data
JDI_Mbed_Team 0:b2d46804658c 685 */
JDI_Mbed_Team 0:b2d46804658c 686 void memLCD8::fillrect(int x0, int y0, int x1, int y1, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 687 {
JDI_Mbed_Team 0:b2d46804658c 688 int h = y1 - y0 + 1;
JDI_Mbed_Team 0:b2d46804658c 689 for (int i=0; i<h; i++) hline(x0, x1, y0+i, color);
JDI_Mbed_Team 0:b2d46804658c 690 }
JDI_Mbed_Team 0:b2d46804658c 691 /**
JDI_Mbed_Team 0:b2d46804658c 692 * @brief Transfer One Pixel Data with x,y allocation
JDI_Mbed_Team 0:b2d46804658c 693 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 0:b2d46804658c 694 * @param[in] int y : vertival allocation top to bottom
JDI_Mbed_Team 0:b2d46804658c 695 * @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 696 */
JDI_Mbed_Team 0:b2d46804658c 697 void memLCD8::pixel(int x, int y, uint8_t color)
JDI_Mbed_Team 0:b2d46804658c 698 {
JDI_Mbed_Team 0:b2d46804658c 699 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 700 else _dispBUF[y*_width/2+x/2] = _dispBUF[y*_width/2+x/2]&0xF0 | (color )&0x0F ; //MASK 1111 0000
JDI_Mbed_Team 0:b2d46804658c 701 }
JDI_Mbed_Team 2:944f2968c19f 702
JDI_Mbed_Team 0:b2d46804658c 703 /**
JDI_Mbed_Team 0:b2d46804658c 704 * @brief Get Edited data for SPI transfer
JDI_Mbed_Team 3:c67b96404016 705 * @param[in] int x : horizontal allocation left to right
JDI_Mbed_Team 3:c67b96404016 706 * @param[in] int y : vertival allocation top to bottom
JDI_Mbed_Team 3:c67b96404016 707 * @param[in] uint8_t* buff : buffer data for Display
JDI_Mbed_Team 0:b2d46804658c 708 */
JDI_Mbed_Team 0:b2d46804658c 709 int* memLCD8::GetPixelValue(int _x, int _y ,uint8_t* buff)
JDI_Mbed_Team 0:b2d46804658c 710 {
JDI_Mbed_Team 0:b2d46804658c 711 //bitmap data = 4bit data => modify transfer data bit size;
JDI_Mbed_Team 0:b2d46804658c 712 switch(TrModeCommand)
JDI_Mbed_Team 0:b2d46804658c 713 {
JDI_Mbed_Team 0:b2d46804658c 714 case 0x90: //TrBIT4:
JDI_Mbed_Team 0:b2d46804658c 715 // buffer 2pixel/1byte => 2pixel/1byte buffe 2byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 716 TrValue[0] = _dispBUF[_y* _width/2 + _x];
JDI_Mbed_Team 0:b2d46804658c 717 break;
JDI_Mbed_Team 0:b2d46804658c 718 case 0x80://TrBIT3:
JDI_Mbed_Team 0:b2d46804658c 719 // buffer 2pixel/1byte => 3pixel-1subpixel/1bye (24 pixel/3byte) buffer 3byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 720 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 721 //for( int i = 0 ; i<12 ; i--)
JDI_Mbed_Team 0:b2d46804658c 722 {
JDI_Mbed_Team 0:b2d46804658c 723 //4 bit RGBN(Nは予備) => 3bit RGB
JDI_Mbed_Team 0:b2d46804658c 724 if( _width/2 > _x )
JDI_Mbed_Team 0:b2d46804658c 725 {
JDI_Mbed_Team 0:b2d46804658c 726 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0xE0) ) );
JDI_Mbed_Team 0:b2d46804658c 727 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x ]&0x0E) ) << 1);
JDI_Mbed_Team 0:b2d46804658c 728 }
JDI_Mbed_Team 0:b2d46804658c 729 if( _width/2 > _x + 1 )
JDI_Mbed_Team 0:b2d46804658c 730 {
JDI_Mbed_Team 0:b2d46804658c 731 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0xC0) ) >> 6);
JDI_Mbed_Team 0:b2d46804658c 732
JDI_Mbed_Team 0:b2d46804658c 733 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x20) ) << 2);
JDI_Mbed_Team 0:b2d46804658c 734 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 1]&0x0E) ) << 3);
JDI_Mbed_Team 0:b2d46804658c 735 }
JDI_Mbed_Team 0:b2d46804658c 736 if( _width/2 > _x + 2 )
JDI_Mbed_Team 0:b2d46804658c 737 {
JDI_Mbed_Team 0:b2d46804658c 738 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0xE0) ) >> 4);
JDI_Mbed_Team 0:b2d46804658c 739 TrValue[1] = TrValue[1] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x08) ) >> 3);
JDI_Mbed_Team 0:b2d46804658c 740
JDI_Mbed_Team 0:b2d46804658c 741 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 2]&0x06) ) << 5);
JDI_Mbed_Team 0:b2d46804658c 742 }
JDI_Mbed_Team 0:b2d46804658c 743 if( _width/2 > _x + 3 )
JDI_Mbed_Team 0:b2d46804658c 744 {
JDI_Mbed_Team 0:b2d46804658c 745 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0xE0) ) >> 2);
JDI_Mbed_Team 0:b2d46804658c 746 TrValue[2] = TrValue[2] | ( ( (_dispBUF[_y* _width/2 + _x + 3]&0x0E) ) >> 1);
JDI_Mbed_Team 0:b2d46804658c 747 }
JDI_Mbed_Team 0:b2d46804658c 748 }
JDI_Mbed_Team 0:b2d46804658c 749 break;
JDI_Mbed_Team 0:b2d46804658c 750 case 0x88://TrBIT1:
JDI_Mbed_Team 0:b2d46804658c 751 // buffer 2pixel/1byte => 8 pixel/1byte buffe 4byte毎進める。
JDI_Mbed_Team 0:b2d46804658c 752 for(int j=0;j<3;j++) TrValue[j] = 0;
JDI_Mbed_Team 0:b2d46804658c 753 for(int i = 0 ; i<4 ; i++)
JDI_Mbed_Team 0:b2d46804658c 754 {
JDI_Mbed_Team 0:b2d46804658c 755 //Green bit => monochrome bit
JDI_Mbed_Team 0:b2d46804658c 756 if( _width/2 > _x + i )
JDI_Mbed_Team 0:b2d46804658c 757 {
JDI_Mbed_Team 0:b2d46804658c 758 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x40) == 0 ? 0 : 1 ) << (7-i*2) );
JDI_Mbed_Team 0:b2d46804658c 759 TrValue[0] = TrValue[0] | ( ( (_dispBUF[_y* _width/2 + _x + i]&0x04) == 0 ? 0 : 1 ) << (7-i*2)-1 );
JDI_Mbed_Team 0:b2d46804658c 760 //pc2.printf("[%d+%d][%d]<0x%x>\n",_x,i,_y,_dispBUF[_y* _width/2 + _x + i]);
JDI_Mbed_Team 0:b2d46804658c 761 }
JDI_Mbed_Team 0:b2d46804658c 762 }
JDI_Mbed_Team 0:b2d46804658c 763 break;
JDI_Mbed_Team 0:b2d46804658c 764 }
JDI_Mbed_Team 0:b2d46804658c 765 return TrValue;
JDI_Mbed_Team 0:b2d46804658c 766 }
JDI_Mbed_Team 2:944f2968c19f 767
JDI_Mbed_Team 0:b2d46804658c 768 /**
JDI_Mbed_Team 3:c67b96404016 769 * @brief Transfer Pixel Data from buffer to Display
JDI_Mbed_Team 3:c67b96404016 770 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 0:b2d46804658c 771 */
JDI_Mbed_Team 3:c67b96404016 772 void memLCD8::writeDISP(int transfermode) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 773 {
JDI_Mbed_Team 3:c67b96404016 774 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 775 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 776 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 777
JDI_Mbed_Team 3:c67b96404016 778 // frame
JDI_Mbed_Team 3:c67b96404016 779 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 780 // line
JDI_Mbed_Team 3:c67b96404016 781 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 782 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 783 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 784 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 785 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 786
JDI_Mbed_Team 3:c67b96404016 787 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 788 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 789
JDI_Mbed_Team 3:c67b96404016 790 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 791 {
JDI_Mbed_Team 3:c67b96404016 792 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 3:c67b96404016 793 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 794 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 795 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 796 }
JDI_Mbed_Team 3:c67b96404016 797 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 798 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 799 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 800 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 801 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 802 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 803 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 804 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 805 }
JDI_Mbed_Team 3:c67b96404016 806 }
JDI_Mbed_Team 3:c67b96404016 807
JDI_Mbed_Team 3:c67b96404016 808 /**
JDI_Mbed_Team 3:c67b96404016 809 * @brief Transfer Pixel Data : from Start line number to Display of frame buffer
JDI_Mbed_Team 3:c67b96404016 810 * @param[in] int startline : Start line number to Display
JDI_Mbed_Team 3:c67b96404016 811 * @param[in] int endline : end line number to Display
JDI_Mbed_Team 3:c67b96404016 812 * @param[in] int transfermode : instruction the transfer data size ,4bit,3bit,1bit
JDI_Mbed_Team 3:c67b96404016 813 */
JDI_Mbed_Team 3:c67b96404016 814 void memLCD8::writeDISP(int startline , int endline , int transfermode) // refresh display selected line
JDI_Mbed_Team 0:b2d46804658c 815 {
JDI_Mbed_Team 3:c67b96404016 816 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 817 //char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 818 SetTransfermode(transfermode);
JDI_Mbed_Team 3:c67b96404016 819
JDI_Mbed_Team 3:c67b96404016 820 // frame
JDI_Mbed_Team 3:c67b96404016 821 for (int i=startline; i<=endline; i++) {
JDI_Mbed_Team 3:c67b96404016 822 // line
JDI_Mbed_Team 3:c67b96404016 823 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 824 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 825 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 826 _spi.write(TrModeCommand | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 827 //pc2.printf("com 0x%x\n",TrModeCommand | (pol << 6) | (i+1)>>8);
JDI_Mbed_Team 3:c67b96404016 828
JDI_Mbed_Team 3:c67b96404016 829 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 830 //pc2.printf("v adr 0x%x\n",(i+1)& 0x00FF);
JDI_Mbed_Team 3:c67b96404016 831
JDI_Mbed_Team 3:c67b96404016 832 for(int j=0; j<_width; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 833 //for(int j=0; j<100; j+=TrAdd)
JDI_Mbed_Team 3:c67b96404016 834 {
JDI_Mbed_Team 3:c67b96404016 835 GetPixelValue(j,i,_dispBUF);
JDI_Mbed_Team 3:c67b96404016 836 //pc2.printf("data=[%d]{%d][%d]/[%d]\n",j*TrAdd,i,TrValue[0],TrAdd);
JDI_Mbed_Team 3:c67b96404016 837 for(int k=0;k<TrValNum;k++)
JDI_Mbed_Team 3:c67b96404016 838 _spi.write(TrValue[k]);
JDI_Mbed_Team 3:c67b96404016 839 }
JDI_Mbed_Team 3:c67b96404016 840 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 841 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 842 // wait_ms(1); //1.8Hz simulation
JDI_Mbed_Team 3:c67b96404016 843 // wait_ms(2); //1.35Hz simulation
JDI_Mbed_Team 3:c67b96404016 844 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 845 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 846 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 847 else pol=0x01;
JDI_Mbed_Team 3:c67b96404016 848 }
JDI_Mbed_Team 3:c67b96404016 849 }
JDI_Mbed_Team 3:c67b96404016 850
JDI_Mbed_Team 3:c67b96404016 851 /**
JDI_Mbed_Team 3:c67b96404016 852 * @brief Transfer Pixel Data from frame buffer to Display
JDI_Mbed_Team 3:c67b96404016 853 */
JDI_Mbed_Team 3:c67b96404016 854 void memLCD8::writeDISP(void) // refresh whole display
JDI_Mbed_Team 3:c67b96404016 855 {
JDI_Mbed_Team 3:c67b96404016 856
JDI_Mbed_Team 3:c67b96404016 857 char pol = 0;
JDI_Mbed_Team 3:c67b96404016 858 char command = 0x90; // 8b 1*0xNNNN *=POL x=AutoW A 1010
JDI_Mbed_Team 3:c67b96404016 859
JDI_Mbed_Team 3:c67b96404016 860 // frame
JDI_Mbed_Team 3:c67b96404016 861 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 3:c67b96404016 862 // line
JDI_Mbed_Team 3:c67b96404016 863 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 864 _cs = 1;
JDI_Mbed_Team 3:c67b96404016 865 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 866 _spi.write(command | (pol << 6) | (i+1)>>8 ); // COMMAND
JDI_Mbed_Team 3:c67b96404016 867 _spi.write((i+1)& 0x00FF ); // V ADDR
JDI_Mbed_Team 3:c67b96404016 868 for(int j=0; j<_width/2; j++) _spi.write(_dispBUF[i*_width/2 + j]);
JDI_Mbed_Team 3:c67b96404016 869 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 870 _spi.write(0x00); // DUMMY transfer
JDI_Mbed_Team 3:c67b96404016 871 wait_us(6);
JDI_Mbed_Team 3:c67b96404016 872 _cs = 0;
JDI_Mbed_Team 3:c67b96404016 873 if(pol) pol=0x00;
JDI_Mbed_Team 3:c67b96404016 874 else pol=0x01;
JDI_Mbed_Team 0:b2d46804658c 875 }
JDI_Mbed_Team 0:b2d46804658c 876 }
JDI_Mbed_Team 2:944f2968c19f 877
JDI_Mbed_Team 0:b2d46804658c 878 /**
JDI_Mbed_Team 0:b2d46804658c 879 * @brief clear buffer data by background color data
JDI_Mbed_Team 0:b2d46804658c 880 */
JDI_Mbed_Team 0:b2d46804658c 881 void memLCD8::clsBUF(void)
JDI_Mbed_Team 0:b2d46804658c 882 {
JDI_Mbed_Team 0:b2d46804658c 883
JDI_Mbed_Team 0:b2d46804658c 884 for (int i=0; i<_height; i++) {
JDI_Mbed_Team 0:b2d46804658c 885 for (int j=0; j<_width; j++) {
JDI_Mbed_Team 0:b2d46804658c 886 pixel(j,i,_background);
JDI_Mbed_Team 0:b2d46804658c 887 }
JDI_Mbed_Team 0:b2d46804658c 888 }
JDI_Mbed_Team 0:b2d46804658c 889 }
JDI_Mbed_Team 3:c67b96404016 890 #endif
JDI_Mbed_Team 2:944f2968c19f 891