Animation demo with MIP8F_SPI_Ver60

Dependencies:   mbed MIP8F_SPI_Ver60 MIP8f_FRDM_LineBuffer_sample MIP8f_FRDM_TransferMode_sample

Introduction

Animation Demo. Some Goldfish swin in water, from left to right, from bottom to top. Color and monochrome version

Only for LPM027M128x (400x240) ,JDI DIsplay.

Other information , please refer to https://os.mbed.com/teams/JapanDisplayInc/code/MIP8f_FRDM_sample/

Usage

Copy Setting File and Image to micro SD-CARD. you can NOT use same sample color images of OTHER VERSION SAMPLE.

a) Download the following file corresponding to the target panel, and rename file identifier (.bin -> .zip), and unzip the file on micro SD Card's root directory.

LPM027M128x (400x240) :/media/uploads/JDI_Mbed_Team/goldfish_400x240.bin

b) Insert micro SD-CARD to FRDM-K64F. c) Upload binary file to FRDM-K64F.and push Reset Button.

Other information

refer to Usage on https://os.mbed.com/teams/JapanDisplayInc/code/MIP8f_FRDM_sample/

this Sample Code (.bin)

/media/uploads/JDI_Mbed_Team/mip8f_frdm_animation_sample.k64f.bin

Revision:
14:9d58f49f326f
Parent:
12:40156f03a763
Child:
16:7c472f8a81a5
--- a/main.cpp	Tue Nov 06 03:57:02 2018 +0000
+++ b/main.cpp	Mon Nov 12 04:33:43 2018 +0000
@@ -1,14 +1,15 @@
 /**
 * @file main.cpp
-* @brief Ver4.0 Sample source code for MIP8 diplay. 
+* @brief Ver5.0 Sample source code for MIP8 diplay. 
 * @details  
+* Ver5.0 Addtional function is checking the refresh display speed between 4bit and 3bit transfer mode 
 * Ver4.0 Addtional function is Line buffer version.the Sample bitmap display color and monochrome by line buffer.
 * Ver3.0 Addtional function is font display. this demo code is the nunber is counted up like a meter panel
 * ver2.0 Addtional function is Monochome display by 1bit mode of SPI transfer.
 *
 * spi-transfer to Display has 3 mode. 
-* 4bit mode is color display, this bit arrange is  R,G,B,x.   R,G,B = R,G,B subpixel bit.  a x bit is Dummy.
-* No ues(3bit mode is color display, this bit arrange is  R,G,B.   R,G,B = R,G,B subpixel bit.  No bit is Dummy.)
+* 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.
+* 3bit mode is color display, this bit arrange is  R,G,B.   R,G,B = R,G,B subpixel bit.  No bit is Dummy.
 * 1bit mode is monocrome display,high speed refresh mode. a only Green subpixel of bitmap data is transfered.
 * <License>
 * Copyright 2018 Japan Display Inc.
@@ -39,11 +40,6 @@
 #include "Arial42x42.h"
 #include "font_big.h"
 #include "Arial94x94.h"
-//#include "Prototype29x28.h"
-//#include "Prototype70x86.h"
-//#include "HGP23x29.h"
-//#include "HGP15x19.h"
-//#include "symbol.h"
 
 #define ON  1
 #define OFF 0
@@ -63,25 +59,17 @@
 DigitalIn TexSW(SW3);
 
 //for debug
-//Serial pc(USBTX, USBRX); // tx, rx
+Serial pc(USBTX, USBRX); // tx, rx
 
+void SDtex2BUF(char *filepath);
 
 //function prototype
-#if FRAMEBUFF_MODE
 void SD2BUF(char *filepath);
-void SDtex2BUF(char *filepath);
-void ReadBmp(const char *fsrc, uint32_t FileNum);
-#endif
-
-#if LINEBUFF_MODE
-void SD2LINEBUF(char *filepath,int transfermode);
-void ReadBmp2LineBuffer(const char *fsrc, uint32_t FileNum,int transfermode);
-#endif
-
 void ifOFFseq(void);
 void ifswPWM(void);
 void OffSequence(void);
 void DispAllDir(const char *fsrc);
+void ReadBmp(const char *fsrc, uint32_t FileNum);
 uint32_t CntFile(const char *fsrc);
 //Grobal value
 int  ifMargeTXT = 0;
@@ -100,15 +88,16 @@
 
 int main() {
 
-    uint32_t filenum=0;
+    //uint32_t filenum;
     char filepath[40];
-    //char countup[3+1];
-    //char KMPH[4+1];
-
-   
+    char countup[3+1];
+    char KMPH[4+1];
+    char Trans[13+1];
+    
     sd.disk_initialize();
     HaltSW.Enable(1);
 
+
     FILE *fp = fopen("/sd/settings2.txt", "rb");    //read binary
     if(fp != NULL) {
         fscanf(fp, "%d",&width);     //width read
@@ -136,18 +125,10 @@
     
     WD.setWH(width,height);    //input -> width, height
     WD.background(Black);      //background = black
-#if FRAMEBUFF_MODE
     WD.clsBUF();               //data initialize
     WD.writeDISP();            //picture write(black)
-#endif
-#if LINEBUFF_MODE
-    WD.clsLINEBUF();               //data initialize
-    WD.writeDISPLinebuffer();            //picture write(black)
-#endif
     WD.SwDisp(1);              //disp on
     
-	//OffSW.fall(&OffSequence);   // Renamed "OffSW" as "PWMorOFF" for BK PWM setting
-	//SW settings for PWM or OFF
     PWMorOFF.fall(&ifswPWM);  // Backlight    //sw2 fall edge
     PWMorOFF.rise(&ifOFFseq); // OFF Sequence    //sw2 rise edge
 
@@ -163,27 +144,228 @@
 
     //DIR *d;
 
+    //filenum = CntFile(filepath);    //file number read
+	ReadBmp(filepath,0);
    	while(1)
     { //BITMAPS
-        filenum = CntFile(filepath);    //file number read
-	   	for(uint32_t i=0; i<filenum; i++)
+	   	//for(uint32_t i=0; i<filenum; i++)
         {
-	        for( int j = 0; j < 2; j++)
+	        for( int j = 0; j < 3; j++)
        		{
-       			#if LINEBUFF_MODE
-				if( j%2 == 0  ) //&& bmp_bitcount != 8)
-					ReadBmp2LineBuffer(filepath,i,TrBIT4);
-				else
-					ReadBmp2LineBuffer(filepath,i,TrBIT1);
-				#endif
-  	       		while(HaltSW.State());
+
+  	       		while(HaltSW.State());    // VCOM invert when image is still
            		HaltSW.Clear();
 
+				//display bitmap
+		        WD.foreground(0x0e);
+		        WD.background(0x00);
+				WD.set_ActualFontWidth();
+				WD.set_font((unsigned char*) Arial28x28); 
+				//1bit trasfer mode = monochro diplay
+				if( j%3 == 0 )
+				{
+					sprintf(Trans,"4bit transfer");
+					WD.obliqueout(5,210,Trans);
+					WD.writeDISP(TrBIT4);
+				}else
+				if( j%3 == 1 ){			
+					sprintf(Trans,"3bit transfer");
+					WD.obliqueout(5,210,Trans);
+					WD.writeDISP(TrBIT3);
+				}else{
+					sprintf(Trans,"1bit transfer");
+					WD.obliqueout(5,210,Trans);
+					WD.writeDISP(TrBIT1);
+				}
+				
+				// print KM 
+				if( j%3 != 2 )
+				{
+					// for color diaplay
+			        WD.foreground(0x04);//Greeen
+			        WD.background(0x00);//black
+				}else{
+					// for monochrome diaplay
+			        WD.foreground(0x0e);//white
+			        WD.background(0x00);//black
+				}
+				sprintf(KMPH,"km/h");
+				WD.set_ActualFontWidth();
+				WD.set_font((unsigned char*) Arial28x28); 
+				WD.obliqueout(70+200+35,100+20+49,KMPH);
+
+				//print number
+	        	WD.set_font((unsigned char*) Arial94x94); 
+				WD.set_FixedFontWidth(50);
+				for(int t=0;t<31;t++)
+				{
+					sprintf(countup,"%2d",t);
+					WD.obliqueout(70+35+48,100+20,countup);
+
+					//transfer to display number				
+					if( j%3 == 0 )//4bit and 3bit trasfer 
+					{
+						// for color display
+						WD.writeDISP(100+20,190+20,TrBIT4);
+					}else
+					if( j%3 == 1 )//3bit and 3bit trasfer 
+					{
+						// for color diaplay
+						WD.writeDISP(100+20,190+20,TrBIT3);
+					}else//1bit and 3bit trasfer 
+					{
+						// for monochrome diaplay
+						WD.writeDISP(100+20,190+20,TrBIT1);
+					}
+					
+					//change charactor coloe
+					if(j%3 != 2 && t==10)
+					{
+						// 11 < t => 20 yellow char
+			        	WD.foreground(0x0C);
+					}else
+					if( j%3 != 2 && t==20)
+					{
+						// 21 < t => 30 red char
+			        	WD.foreground(0x08);
+					}
+			        //wait(0.5);
+				}
 		    }
         }
     }
 }
 
+/**
+* @brief read a bitmap file in SD. 8color mode
+*/
+void SD2BUF(char *filepath){
+    char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2];
+    char RGB;
+    FILE *fp ;
+
+  	pc.printf("file=%s\n",filepath);
+    fp = fopen(filepath, "rb");
+    if(fp != NULL) {
+        //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 54bytes
+        for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
+        fscanf(fp,"%c",&(bc[0]));// color bit size 2bytes
+        fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes
+        for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
+        bmp_bitcount = bc[0]+bc[1]*256;
+		if( bmp_bitcount == 1 )
+		{
+	        for(int i=0; i< 8 ; i++) fscanf(fp,"%c",DUMMY);  // Pallet Data
+			int x;
+	        for(int y=height-1; y>=0; y--) {
+    	        for(x=0; x< width; x += 8) { //1bit monochrome 
+            	    fscanf(fp, "%c",G8);
+            	    for(int i=0; i < 8 ; i++ ){
+	            	    RGB = 0;
+            	    	if( (*G8 & 0x80) != 0)  RGB = RGB|0x0e;
+	                	WD.pixel(x+i,y,RGB);
+            	    	*G8 = *G8 << 1;
+            	    }
+            	}
+            	if( width%8 != 0 )
+            	{
+            	    fscanf(fp, "%c",G8);
+            	    int i;
+            	    for(i=0; i < (width%8) ; i++ ){
+	            	    RGB = 0;
+            	    	if( (*G8 & 0x40) != 0)  RGB = RGB|0x0e;
+	                	WD.pixel(x+i,y,RGB);
+            	    	*G8 = *G8 << 1;
+            	    }
+            	}
+            	if( y!=0){  // The last data column doesn't need padding
+            		int wbyte = width/8 + ( width%8 == 0 ? 0:1 );
+            		for(int x=(wbyte*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);// 4byte boundery for every column(only windows bitmap format)
+            	}
+        	}
+		}else
+		if( bmp_bitcount == 24 )
+		{
+	        for(int y=height-1; y>=0; y--) {
+    	        for(int x=0; x< width; x++) {    //24bit color  B 8bit -> G 8bit -> R 8bit
+        	        fscanf(fp, "%c",B8);
+            	    fscanf(fp, "%c",G8);
+                	fscanf(fp, "%c",R8);
+                
+                	RGB =  RGB8(*R8,*G8,*B8);    //6bit(8bit) MIP  MASK 0000 1110
+                	WD.pixel(x,y,RGB);
+            	}
+            	if( y!=0)  // The last data column doesn't need padding
+            	for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);    // 4byte boundery for every column(only windows bitmap format)
+        	}
+        }
+    }
+    fclose(fp);
+}
+
+/**
+* @brief read a text file in SD.
+*/
+void SDtex2BUF(char *filepath){
+    int x,y,font,color;
+    char text[40];
+    int  ifEOF;
+    FILE *fp ;
+
+    fp = fopen(filepath, "r");
+    if(fp != NULL) {
+        while(ifEOF != -1){
+            ifEOF = fscanf(fp,"%d,%d,%d,%d,%[^,],",&x,&y,&font,&color,text);
+            WD.locate(x,y);
+            WD.foreground(color);
+            if      (font ==1)   WD.set_font((unsigned char*) Arial12x12);
+            else if (font ==2)   WD.set_font((unsigned char*) Arial24x23); 
+            else if (font ==3)   WD.set_font((unsigned char*) Arial28x28);
+            else                 WD.set_font((unsigned char*) Neu42x35); 
+
+            WD.printf("%s",text);
+        }
+    }
+    fclose(fp);
+}
+
+/*
+void DispAllDir(const char *fsrc)
+{
+    DIR *d = opendir(fsrc);
+    struct dirent *p;
+    char filepath[40];
+    
+    while ((p = readdir(d)) != NULL)  {
+        sprintf(filepath, "%s/%s",fsrc,p->d_name);
+        SD2BUF(filepath);
+        WD.writeDISP();
+    }
+    closedir(d);
+}
+*/
+
+/**
+* @brief read a bitmap file in SD by file number.
+*/
+void ReadBmp(const char *fsrc, uint32_t FileNum)
+{
+    DIR *d = opendir(fsrc);
+    struct dirent *p;
+    char filepath[40];
+    
+    for(uint32_t i=0; i< FileNum; i++) readdir(d);
+    if ((p = readdir(d)) != NULL)  {
+        sprintf(filepath, "%s/%s",fsrc,p->d_name);
+        SD2BUF(filepath);
+        if(ifMargeTXT){
+            sprintf(filepath, "%s_txt/%s.txt",fsrc,p->d_name);
+            SDtex2BUF(filepath);
+        }       
+    }
+    closedir(d);
+}
+
 uint32_t CntFile(const char *fsrc)
 {
     DIR *d = opendir(fsrc);
@@ -196,17 +378,10 @@
 void OffSequence(void){
     BK.write(0);    //add 20160712 17:00
     WD.background(Black);
-#if LINEBUFF_MODE    
-    WD.clsLINEBUF();
-    WD.SwDisp(0);
-    WD.writeDISPLinebuffer();
-#endif
-#if FRAMEBUFF_MODE    
     WD.clsBUF();
     WD.SwDisp(0);
     WD.writeDISP();
-#endif    
-    WD.SwDisp(0);
+    WD.writeDISP();
     bloff = 1;
 }
 
@@ -242,139 +417,4 @@
         OffSequence();
     }
 }
-#if FRAMEBUFF_MODE
-/**
-* @brief read a bitmap file in SD. 8color mode
-*/
-void SD2BUF(char *filepath){
-    char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2];
-    int RGB;
-    FILE *fp ;
 
-  	//pc.printf("file=%s\n",filepath);
-    fp = fopen(filepath, "rb");
-    if(fp != NULL) {
-        //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 54bytes
-        for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
-        fscanf(fp,"%c",&(bc[0]));fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes
-        for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
-        bmp_bitcount = bc[0]+bc[1]*256;
-
-        for(int y=height-1; y>=0; y--) {
-           for(int x=0; x< width; x++) {    //24bit color  B 8bit -> G 8bit -> R 8bit
-                fscanf(fp, "%c",B8);
-                fscanf(fp, "%c",G8);
-                fscanf(fp, "%c",R8);
-                
-                RGB =  RGB8(*R8,*G8,*B8);    //6bit(8bit) MIP  MASK 0000 1110
-                WD.pixel(x,y,RGB);
-            }
-            if( y!=0)  // The last data column doesn't need padding
-            for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);    // 4byte boundery for every column(only windows bitmap format)
-        }
-    }
-    fclose(fp);
-}
-/**
-* @brief read a text file in SD.
-*/
-void SDtex2BUF(char *filepath){
-    int x,y,font,color;
-    char text[40];
-    int  ifEOF;
-    FILE *fp ;
-
-    fp = fopen(filepath, "r");
-    if(fp != NULL) {
-        while(ifEOF != -1){
-            ifEOF = fscanf(fp,"%d,%d,%d,%d,%[^,],",&x,&y,&font,&color,text);
-            WD.locate(x,y);
-            WD.foreground(color);
-            if      (font ==1)   WD.set_font((unsigned char*) Arial12x12);
-            else if (font ==2)   WD.set_font((unsigned char*) Arial24x23); 
-            else if (font ==3)   WD.set_font((unsigned char*) Arial28x28);
-            else                 WD.set_font((unsigned char*) Neu42x35); 
-
-            WD.printf("%s",text);
-        }
-    }
-    fclose(fp);
-}
-//**
-/* @brief read a bitmap file in SD by file number.
-*/
-void ReadBmp(const char *fsrc, uint32_t FileNum)
-{
-    DIR *d = opendir(fsrc);
-    struct dirent *p;
-    char filepath[40];
-    
-    for(uint32_t i=0; i< FileNum; i++) readdir(d);
-    if ((p = readdir(d)) != NULL)  {
-        sprintf(filepath, "%s/%s",fsrc,p->d_name);
-        pc.printf( "%s/%s[%u]\n",fsrc,p->d_name,p->d_type);
-        SD2BUF(filepath);
-        if(ifMargeTXT){
-            sprintf(filepath, "%s_txt/%s.txt",fsrc,p->d_name);
-            //SDtex2BUF(filepath);
-        }       
-    }
-    closedir(d);
-}
-#endif
-
-#if LINEBUFF_MODE
-/**
-* @brief read a bitmap file in SD. 8color mode
-*/
-void SD2LINEBUF(char *filepath,int transfermode){
-    char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2];
-    int RGB;
-    FILE *fp ;
-
-  	//pc.printf("file=%s\n",filepath);
-    fp = fopen(filepath, "rb");
-    if(fp != NULL) {
-        //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 54bytes
-        for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
-        fscanf(fp,"%c",&(bc[0]));fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes
-        for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY);  // Discard Header 26bytes
-        bmp_bitcount = bc[0]+bc[1]*256;
-        for(int y=height-1; y>=0; y--) {
-	        for(int x=0; x< width; x++) {    //24bit color  B 8bit -> G 8bit -> R 8bit
-		        fscanf(fp, "%c",B8);
-        	    fscanf(fp, "%c",G8);
-            	fscanf(fp, "%c",R8);
-                
-            	RGB =  RGB8(*R8,*G8,*B8);    //6bit(8bit) MIP  MASK 0000 1110
-            	WD.pixel(x,RGB);
-        	}
-        	if( y!=0)  // The last data column doesn't need padding
-        	for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);    // 4byte boundery for every column(only windows bitmap format)
-        	
-        	//Pixel Data Transfer by SPI
-        	WD.writeDISP(y,transfermode);
-        }
-	
-    }
-    fclose(fp);
-}
-
-//**
-/* @brief read a bitmap file in SD by file number.
-*/
-void ReadBmp2LineBuffer(const char *fsrc,uint32_t FileNum,int transfermode)
-{
-    DIR *d = opendir(fsrc);
-    struct dirent *p;
-    char filepath[40];
-    
-    for(uint32_t i=0; i< FileNum; i++) readdir(d);
-    if ((p = readdir(d)) != NULL)  {
-        sprintf(filepath, "%s/%s",fsrc,p->d_name);
-        //pc.printf( "%s/%s[%u]\n",fsrc,p->d_name,p->d_type);
-        SD2LINEBUF(filepath,transfermode);
-    }
-    closedir(d);
-}
-#endif