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:
Tue Nov 06 02:16:10 2018 +0000
Revision:
3:c67b96404016
Parent:
2:944f2968c19f
Child:
5:8cc8e00fed46
Ver40 Line buffer mode

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