JDI_MIP on ThunderBoardSense2(Silicon-Labs)

JDI_MIP (LPM013M126A) Sample on ThunderBoard2(Silicon-Labs)

/media/uploads/STakayama/mip8_tb2_sample0_.jpg LPM013M126A /media/uploads/STakayama/mip8_tb2_sample1.jpg

Links

https://os.mbed.com/teams/JapanDisplayInc/

https://os.mbed.com/teams/JapanDisplayInc/wiki/MIP-reflective-color-display

Committer:
STakayama
Date:
Wed May 16 03:48:35 2018 +0000
Revision:
3:79758cbd4a92
Parent:
2:0585ae14d9a9
Child:
4:588bc9618fff
SPI8->MIP16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
STakayama 0:dbc295c4383e 1
STakayama 0:dbc295c4383e 2
STakayama 0:dbc295c4383e 3 #include "mbed.h"
STakayama 3:79758cbd4a92 4 #include "SPI_MIP16.h"
STakayama 2:0585ae14d9a9 5 #include "data.h"
STakayama 0:dbc295c4383e 6
STakayama 3:79758cbd4a92 7 WatchDisp WD(PK0,PK2,PF7,PA5); //PTC12); // mosi,miso,clk,cs,disp,power(EXTMODE)
STakayama 3:79758cbd4a92 8 DigitalOut _lcd_disp(PA8); // DISP
STakayama 3:79758cbd4a92 9 DigitalOut _lcd_extmod(PF6); // EXTMODE
STakayama 3:79758cbd4a92 10 //_lcd_reset(reset),_lcd_extcom(extcom)
STakayama 0:dbc295c4383e 11
STakayama 0:dbc295c4383e 12 InterruptIn UV_INT(PA6); // YV Interrupt
STakayama 0:dbc295c4383e 13 DigitalIn PushSW0(PD14); // Switch
STakayama 0:dbc295c4383e 14 DigitalIn PushSW1(PD15); // Switch
STakayama 0:dbc295c4383e 15
STakayama 0:dbc295c4383e 16 DigitalOut ledPJ14(PJ14);
STakayama 0:dbc295c4383e 17 DigitalOut led1(LED1);
STakayama 0:dbc295c4383e 18 DigitalOut ledPI0(PI0);
STakayama 0:dbc295c4383e 19 DigitalOut ledPI1(PI1);
STakayama 0:dbc295c4383e 20 DigitalOut ledPI2(PI2);
STakayama 0:dbc295c4383e 21 DigitalOut ledPI3(PI3);
STakayama 0:dbc295c4383e 22 DigitalOut ledR(PD11);
STakayama 0:dbc295c4383e 23 DigitalOut ledG(PD12);
STakayama 0:dbc295c4383e 24 DigitalOut ledB(PD13);
STakayama 0:dbc295c4383e 25
STakayama 3:79758cbd4a92 26 uint8_t ccolor_table[] = {Black,Gray,Blue ,LightBlue ,Green ,LightGreen ,Cyan ,LightCyan,
STakayama 3:79758cbd4a92 27 Red ,pink,Magenta,LightMagenta,Yellow,LightYellow,LightGray,White};
STakayama 0:dbc295c4383e 28 bool if16 = 0;
STakayama 0:dbc295c4383e 29 bool ifMargeTXT = 0;
STakayama 3:79758cbd4a92 30 int width =176;
STakayama 3:79758cbd4a92 31 int height=176;
STakayama 3:79758cbd4a92 32 int test_lcd(void)
STakayama 3:79758cbd4a92 33 {
STakayama 3:79758cbd4a92 34 int i;
STakayama 3:79758cbd4a92 35 // Power On Sequece
STakayama 3:79758cbd4a92 36 // _lcd_reset = 0;
STakayama 3:79758cbd4a92 37 // _lcd_reset = 1;
STakayama 3:79758cbd4a92 38 _lcd_extmod = 1;
STakayama 3:79758cbd4a92 39 _lcd_extmod = 0;
STakayama 3:79758cbd4a92 40 _lcd_disp = 1; // hontoha 0
STakayama 3:79758cbd4a92 41 // command(0);
STakayama 3:79758cbd4a92 42
STakayama 3:79758cbd4a92 43 WD.setWH(width,height); // Default X/Y
STakayama 3:79758cbd4a92 44 bool if16 = 1;
STakayama 3:79758cbd4a92 45 WD.set16col(if16); // 0= RGB, 1=RGBW
STakayama 3:79758cbd4a92 46 WD.setmarge(1);
STakayama 3:79758cbd4a92 47 WD.background(White);
STakayama 3:79758cbd4a92 48 WD.foreground(LightGreen);
STakayama 3:79758cbd4a92 49 WD.clsBUF();
STakayama 3:79758cbd4a92 50 WD.fillrect(i*(width/16), height/2+1, (i+1)*(width/16)-1, height , ccolor_table[15-i]);
STakayama 3:79758cbd4a92 51 _lcd_disp = 1;
STakayama 3:79758cbd4a92 52 return 0;
STakayama 3:79758cbd4a92 53 }
STakayama 0:dbc295c4383e 54
STakayama 1:dfd9046278b7 55 void uv_init_proc(void)
STakayama 1:dfd9046278b7 56 {
STakayama 1:dfd9046278b7 57 ;
STakayama 1:dfd9046278b7 58 }
STakayama 1:dfd9046278b7 59
STakayama 2:0585ae14d9a9 60
STakayama 0:dbc295c4383e 61 int main() {
STakayama 1:dfd9046278b7 62 ledPJ14 =1;
STakayama 0:dbc295c4383e 63 ledPI0 =1; ledPI1 =1; ledPI2 =1; ledPI3 =1;
STakayama 1:dfd9046278b7 64 UV_INT.fall(&uv_init_proc);
STakayama 1:dfd9046278b7 65
STakayama 3:79758cbd4a92 66 test_lcd();
STakayama 0:dbc295c4383e 67 while(1){
STakayama 0:dbc295c4383e 68 for (int i=0; i<0x10000;i++) {
STakayama 0:dbc295c4383e 69 for (int j=0; j<0x100000;j++) ;
STakayama 0:dbc295c4383e 70 led1 = (i%8==0)?(1):(0);
STakayama 3:79758cbd4a92 71 // ledR = (i%1==0)?(1):(0);
STakayama 3:79758cbd4a92 72 // ledG = (i%2==0)?(1):(0);
STakayama 3:79758cbd4a92 73 // ledB = (i%4==0)?(1):(0);
STakayama 0:dbc295c4383e 74 printf("aaa %d\n\r",i);
STakayama 0:dbc295c4383e 75 }
STakayama 0:dbc295c4383e 76 }
STakayama 0:dbc295c4383e 77 }
STakayama 2:0585ae14d9a9 78
STakayama 0:dbc295c4383e 79 /* MIP Main Reference
STakayama 0:dbc295c4383e 80 #include "stdio.h"
STakayama 0:dbc295c4383e 81 #include "string"
STakayama 0:dbc295c4383e 82 #include "mbed.h"
STakayama 0:dbc295c4383e 83 #include "SPI_MIP8.h"
STakayama 0:dbc295c4383e 84 #include "SDFileSystem.h"
STakayama 0:dbc295c4383e 85 #include "StateSW.h"
STakayama 0:dbc295c4383e 86 #include "TglSW.h"
STakayama 0:dbc295c4383e 87
STakayama 0:dbc295c4383e 88
STakayama 0:dbc295c4383e 89 #include "Arial28x28.h"
STakayama 0:dbc295c4383e 90 #include "Prototype29x28.h"
STakayama 0:dbc295c4383e 91 #include "Prototype70x86.h"
STakayama 0:dbc295c4383e 92 #include "HGP23x29.h"
STakayama 0:dbc295c4383e 93 #include "HGP15x19.h"
STakayama 0:dbc295c4383e 94 #include "symbol.h"
STakayama 0:dbc295c4383e 95
STakayama 0:dbc295c4383e 96 #define ON 1
STakayama 0:dbc295c4383e 97 #define OFF 0
STakayama 0:dbc295c4383e 98
STakayama 0:dbc295c4383e 99
STakayama 0:dbc295c4383e 100 //K64F
STakayama 0:dbc295c4383e 101 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // mosi,miso,sck,cs
STakayama 0:dbc295c4383e 102 memLCD8 WD(PTD2,PTD3,PTD1,PTD0,PTC4,PTD3); //PTC12); // mosi,miso,clk,cs,disp,power
STakayama 0:dbc295c4383e 103
STakayama 0:dbc295c4383e 104 TglSW HaltSW(PTA4); // SW3
STakayama 0:dbc295c4383e 105 InterruptIn OffSW(SW2);
STakayama 0:dbc295c4383e 106 DigitalIn TexSW(SW3);
STakayama 0:dbc295c4383e 107
STakayama 0:dbc295c4383e 108 void SD2BUF(char *filepath);
STakayama 0:dbc295c4383e 109 void SetMenu(void);
STakayama 0:dbc295c4383e 110 void OffSequence(void);
STakayama 0:dbc295c4383e 111 void DispAllDir(const char *fsrc);
STakayama 0:dbc295c4383e 112 void ReadBmp(const char *fsrc, uint32_t FileNum);
STakayama 0:dbc295c4383e 113 uint32_t CntFile(const char *fsrc);
STakayama 0:dbc295c4383e 114 int Menu = 0;
STakayama 0:dbc295c4383e 115 bool if16 = 0;
STakayama 0:dbc295c4383e 116 bool ifMargeTXT = 0;
STakayama 0:dbc295c4383e 117 int width =400;
STakayama 0:dbc295c4383e 118 int height=240;
STakayama 0:dbc295c4383e 119
STakayama 0:dbc295c4383e 120
STakayama 0:dbc295c4383e 121 int main() {
STakayama 0:dbc295c4383e 122
STakayama 0:dbc295c4383e 123 uint32_t filenum=0;
STakayama 0:dbc295c4383e 124 char filepath[40];
STakayama 0:dbc295c4383e 125 char pol;
STakayama 0:dbc295c4383e 126
STakayama 0:dbc295c4383e 127 if(OffSW==0) if16 = 1; //16color MODE
STakayama 0:dbc295c4383e 128 else if16 = 0;
STakayama 0:dbc295c4383e 129
STakayama 0:dbc295c4383e 130
STakayama 0:dbc295c4383e 131 if(TexSW==0) ifMargeTXT = 1;
STakayama 0:dbc295c4383e 132 ifMargeTXT = 0;
STakayama 0:dbc295c4383e 133 WD.setmarge(1);
STakayama 0:dbc295c4383e 134
STakayama 0:dbc295c4383e 135 sd.disk_initialize();
STakayama 0:dbc295c4383e 136 HaltSW.Enable(1);
STakayama 0:dbc295c4383e 137
STakayama 0:dbc295c4383e 138
STakayama 0:dbc295c4383e 139 FILE *fp = fopen("/sd/settings.txt", "rb");
STakayama 0:dbc295c4383e 140 if(fp != NULL) {
STakayama 0:dbc295c4383e 141 fscanf(fp, "%d",&width);
STakayama 0:dbc295c4383e 142 fscanf(fp, "%d",&height);
STakayama 0:dbc295c4383e 143 sprintf(filepath,"/sd/%dx%d",width,height); //DispAllDir("/sd/180x180")
STakayama 0:dbc295c4383e 144 }
STakayama 0:dbc295c4383e 145 else{
STakayama 0:dbc295c4383e 146 width =180;
STakayama 0:dbc295c4383e 147 height=180;
STakayama 0:dbc295c4383e 148 sprintf(filepath,"/sd/180x180"); //DispAllDir("/sd/180x180")
STakayama 0:dbc295c4383e 149 }
STakayama 0:dbc295c4383e 150 fclose(fp);
STakayama 0:dbc295c4383e 151
STakayama 0:dbc295c4383e 152
STakayama 0:dbc295c4383e 153 OffSW.fall(&OffSequence); // OFF Sequence
STakayama 0:dbc295c4383e 154 WD.setWH(width,height);
STakayama 0:dbc295c4383e 155
STakayama 0:dbc295c4383e 156 WD.background(Black);
STakayama 0:dbc295c4383e 157 WD.clsBUF();
STakayama 0:dbc295c4383e 158 WD.writeDISP();
STakayama 0:dbc295c4383e 159 WD.SwDisp(1);
STakayama 0:dbc295c4383e 160
STakayama 0:dbc295c4383e 161 while(HaltSW.State()){}
STakayama 0:dbc295c4383e 162 HaltSW.Clear();
STakayama 0:dbc295c4383e 163 // WD.background(White);
STakayama 0:dbc295c4383e 164 // WD.clsBUF();
STakayama 0:dbc295c4383e 165 // for (int i=0; i<8; i++) WD.fillrect(i*26+6,16, i*26+6+20, 36, i*2);
STakayama 0:dbc295c4383e 166 // WD.writeDISP();
STakayama 0:dbc295c4383e 167 // wait(0.5);
STakayama 0:dbc295c4383e 168 // while(HaltSW.State()){}
STakayama 0:dbc295c4383e 169 // HaltSW.Clear();
STakayama 0:dbc295c4383e 170
STakayama 0:dbc295c4383e 171
STakayama 0:dbc295c4383e 172 while(1){ //BITMAPS
STakayama 0:dbc295c4383e 173
STakayama 0:dbc295c4383e 174 filenum = CntFile(filepath);
STakayama 0:dbc295c4383e 175 for(uint32_t i=0; i<filenum; i++){
STakayama 0:dbc295c4383e 176 ReadBmp(filepath,i);
STakayama 0:dbc295c4383e 177
STakayama 0:dbc295c4383e 178 while(HaltSW.State()){ // VCOM invert when image is still
STakayama 0:dbc295c4383e 179 pol++;
STakayama 0:dbc295c4383e 180 WD.command( (pol << 6) & 0x40 );
STakayama 0:dbc295c4383e 181 wait(1); //1Hz
STakayama 0:dbc295c4383e 182 }
STakayama 0:dbc295c4383e 183 // Brink
STakayama 0:dbc295c4383e 184 // for(char j = 0; j < 8; j++){
STakayama 0:dbc295c4383e 185 // pol = j&0x01;
STakayama 0:dbc295c4383e 186 // EnterOrLeave = (j+1)&0x01;
STakayama 0:dbc295c4383e 187 // WD.command( (pol << 6) | (EnterOrLeave << 3) );
STakayama 0:dbc295c4383e 188 // wait(0.2);
STakayama 0:dbc295c4383e 189 // }
STakayama 0:dbc295c4383e 190
STakayama 0:dbc295c4383e 191 HaltSW.Clear();
STakayama 0:dbc295c4383e 192 WD.writeDISP();
STakayama 0:dbc295c4383e 193 wait(2);
STakayama 0:dbc295c4383e 194 }
STakayama 0:dbc295c4383e 195 }
STakayama 0:dbc295c4383e 196 }
STakayama 0:dbc295c4383e 197
STakayama 0:dbc295c4383e 198
STakayama 0:dbc295c4383e 199 void SD2BUF(char *filepath){
STakayama 0:dbc295c4383e 200 char R8[1],G8[1],B8[1] ,DUMMY[1];
STakayama 0:dbc295c4383e 201 int RGB;
STakayama 0:dbc295c4383e 202 FILE *fp ;
STakayama 0:dbc295c4383e 203
STakayama 0:dbc295c4383e 204 fp = fopen(filepath, "rb");
STakayama 0:dbc295c4383e 205 if(fp != NULL) {
STakayama 0:dbc295c4383e 206 for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 54bytes
STakayama 0:dbc295c4383e 207 for(int y=height-1; y>=0; y--) {
STakayama 0:dbc295c4383e 208 for(int x=0; x< width; x++) { //24bit color B 8bit -> G 8bit -> R 8bit
STakayama 0:dbc295c4383e 209 fscanf(fp, "%c",B8);
STakayama 0:dbc295c4383e 210 fscanf(fp, "%c",G8);
STakayama 0:dbc295c4383e 211 fscanf(fp, "%c",R8);
STakayama 0:dbc295c4383e 212
STakayama 0:dbc295c4383e 213 RGB = RGB8(*R8,*G8,*B8); //6bit(8bit) MIP MASK 0000 1110
STakayama 0:dbc295c4383e 214 WD.pixel(x,y,RGB);
STakayama 0:dbc295c4383e 215 }
STakayama 0:dbc295c4383e 216 if( y!=0) // The last data column doesn't need padding
STakayama 0:dbc295c4383e 217 for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY); // 4byte boundery for every column
STakayama 0:dbc295c4383e 218 }
STakayama 0:dbc295c4383e 219 }
STakayama 0:dbc295c4383e 220 fclose(fp);
STakayama 0:dbc295c4383e 221 }
STakayama 0:dbc295c4383e 222
STakayama 0:dbc295c4383e 223 void SDtex2BUF(char *filepath){
STakayama 0:dbc295c4383e 224 int x,y,font,color;
STakayama 0:dbc295c4383e 225 char text[40];
STakayama 0:dbc295c4383e 226 int ifEOF;
STakayama 0:dbc295c4383e 227 FILE *fp ;
STakayama 0:dbc295c4383e 228
STakayama 0:dbc295c4383e 229 fp = fopen(filepath, "r");
STakayama 0:dbc295c4383e 230 if(fp != NULL) {
STakayama 0:dbc295c4383e 231 // for(int i=0; i<3; i++){
STakayama 0:dbc295c4383e 232 while(ifEOF != -1){
STakayama 0:dbc295c4383e 233 ifEOF = fscanf(fp,"%d,%d,%d,%d,%[^,],",&x,&y,&font,&color,text);
STakayama 0:dbc295c4383e 234 WD.locate(x,y);
STakayama 0:dbc295c4383e 235 WD.foreground(color);
STakayama 0:dbc295c4383e 236 if (font ==1) WD.set_font((unsigned char*) HGP15x19);
STakayama 0:dbc295c4383e 237 else if (font ==2) WD.set_font((unsigned char*) HGP23x29);
STakayama 0:dbc295c4383e 238 else if (font ==3) WD.set_font((unsigned char*) Arial28x28);
STakayama 0:dbc295c4383e 239 else WD.set_font((unsigned char*) Prototype70x86);
STakayama 0:dbc295c4383e 240
STakayama 0:dbc295c4383e 241 WD.printf("%s",text);
STakayama 0:dbc295c4383e 242 }
STakayama 0:dbc295c4383e 243 }
STakayama 0:dbc295c4383e 244 fclose(fp);
STakayama 0:dbc295c4383e 245 }
STakayama 0:dbc295c4383e 246
STakayama 0:dbc295c4383e 247
STakayama 0:dbc295c4383e 248 void OffSequence(void){
STakayama 0:dbc295c4383e 249 WD.background(Black);
STakayama 0:dbc295c4383e 250 WD.clsBUF();
STakayama 0:dbc295c4383e 251 WD.SwDisp(0);
STakayama 0:dbc295c4383e 252 WD.writeDISP();
STakayama 0:dbc295c4383e 253 WD.writeDISP();
STakayama 0:dbc295c4383e 254
STakayama 0:dbc295c4383e 255 }
STakayama 0:dbc295c4383e 256 void DispAllDir(const char *fsrc)
STakayama 0:dbc295c4383e 257 {
STakayama 0:dbc295c4383e 258 DIR *d = opendir(fsrc);
STakayama 0:dbc295c4383e 259 struct dirent *p;
STakayama 0:dbc295c4383e 260 char filepath[40];
STakayama 0:dbc295c4383e 261
STakayama 0:dbc295c4383e 262 while ((p = readdir(d)) != NULL) {
STakayama 0:dbc295c4383e 263 sprintf(filepath, "%s/%s",fsrc,p->d_name);
STakayama 0:dbc295c4383e 264 SD2BUF(filepath);
STakayama 0:dbc295c4383e 265 WD.writeDISP();
STakayama 0:dbc295c4383e 266 }
STakayama 0:dbc295c4383e 267 closedir(d);
STakayama 0:dbc295c4383e 268 }
STakayama 0:dbc295c4383e 269
STakayama 0:dbc295c4383e 270 void ReadBmp(const char *fsrc, uint32_t FileNum)
STakayama 0:dbc295c4383e 271 {
STakayama 0:dbc295c4383e 272 DIR *d = opendir(fsrc);
STakayama 0:dbc295c4383e 273 struct dirent *p;
STakayama 0:dbc295c4383e 274 char filepath[40];
STakayama 0:dbc295c4383e 275
STakayama 0:dbc295c4383e 276 for(uint32_t i=0; i< FileNum; i++) readdir(d);
STakayama 0:dbc295c4383e 277 if ((p = readdir(d)) != NULL) {
STakayama 0:dbc295c4383e 278 sprintf(filepath, "%s/%s",fsrc,p->d_name);
STakayama 0:dbc295c4383e 279 SD2BUF(filepath);
STakayama 0:dbc295c4383e 280 if(ifMargeTXT){
STakayama 0:dbc295c4383e 281 sprintf(filepath, "%s_txt/%s.txt",fsrc,p->d_name);
STakayama 0:dbc295c4383e 282 SDtex2BUF(filepath);
STakayama 0:dbc295c4383e 283 }
STakayama 0:dbc295c4383e 284 }
STakayama 0:dbc295c4383e 285 closedir(d);
STakayama 0:dbc295c4383e 286 }
STakayama 0:dbc295c4383e 287
STakayama 0:dbc295c4383e 288 uint32_t CntFile(const char *fsrc)
STakayama 0:dbc295c4383e 289 {
STakayama 0:dbc295c4383e 290 DIR *d = opendir(fsrc);
STakayama 0:dbc295c4383e 291 uint32_t counter = 0;
STakayama 0:dbc295c4383e 292 while (readdir(d)!= NULL) counter++;
STakayama 0:dbc295c4383e 293 closedir(d);
STakayama 0:dbc295c4383e 294 return counter;
STakayama 0:dbc295c4383e 295 }
STakayama 0:dbc295c4383e 296
STakayama 0:dbc295c4383e 297 */