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
main.cpp@19:487e9b5ed392, 2018-11-22 (annotated)
- Committer:
- JDI_Mbed_Team
- Date:
- Thu Nov 22 06:53:14 2018 +0000
- Revision:
- 19:487e9b5ed392
- Parent:
- 18:81201ac909c6
- Child:
- 20:1129e4e1ab76
comment update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JDI_Mbed_Team | 0:33fe30a2b785 | 1 | /** |
JDI_Mbed_Team | 1:e5796aa9f1aa | 2 | * @file main.cpp |
JDI_Mbed_Team | 19:487e9b5ed392 | 3 | * @brief Ver6.0 Sample source code for MIP8 diplay. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 4 | * @details |
JDI_Mbed_Team | 19:487e9b5ed392 | 5 | * Ver6.0 Addtional function is Animation sample code. goldfish swin form left to right, from bottom to top. |
JDI_Mbed_Team | 16:7c472f8a81a5 | 6 | * Ver5.0 Addtional function is checking the refresh display speed between 4bit,3bit and 1bit transfer mode |
JDI_Mbed_Team | 12:40156f03a763 | 7 | * Ver4.0 Addtional function is Line buffer version.the Sample bitmap display color and monochrome by line buffer. |
JDI_Mbed_Team | 10:167df76b02d0 | 8 | * Ver3.0 Addtional function is font display. this demo code is the nunber is counted up like a meter panel |
JDI_Mbed_Team | 7:c7a676157b4d | 9 | * ver2.0 Addtional function is Monochome display by 1bit mode of SPI transfer. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 10 | * |
JDI_Mbed_Team | 1:e5796aa9f1aa | 11 | * spi-transfer to Display has 3 mode. |
JDI_Mbed_Team | 14:9d58f49f326f | 12 | * 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 | 14:9d58f49f326f | 13 | * 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 | 1:e5796aa9f1aa | 14 | * 1bit mode is monocrome display,high speed refresh mode. a only Green subpixel of bitmap data is transfered. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 15 | * <License> |
JDI_Mbed_Team | 1:e5796aa9f1aa | 16 | * Copyright 2018 Japan Display Inc. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 17 | * Licensed under the Apache License, Version 2.0 (the "License"); |
JDI_Mbed_Team | 1:e5796aa9f1aa | 18 | * you may not use this file except in compliance with the License. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 19 | * You may obtain a copy of the License at |
JDI_Mbed_Team | 1:e5796aa9f1aa | 20 | * |
JDI_Mbed_Team | 1:e5796aa9f1aa | 21 | * http://www.apache.org/licenses/LICENSE-2.0 |
JDI_Mbed_Team | 1:e5796aa9f1aa | 22 | * |
JDI_Mbed_Team | 1:e5796aa9f1aa | 23 | * Unless required by applicable law or agreed to in writing, software |
JDI_Mbed_Team | 1:e5796aa9f1aa | 24 | * distributed under the License is distributed on an "AS IS" BASIS, |
JDI_Mbed_Team | 1:e5796aa9f1aa | 25 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 26 | * See the License for the specific language governing permissions and |
JDI_Mbed_Team | 1:e5796aa9f1aa | 27 | * limitations under the License. |
JDI_Mbed_Team | 1:e5796aa9f1aa | 28 | */ |
JDI_Mbed_Team | 1:e5796aa9f1aa | 29 | #include "stdio.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 30 | #include "string" |
JDI_Mbed_Team | 0:33fe30a2b785 | 31 | #include "mbed.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 32 | #include "MIP8F_SPI.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 33 | #include "SDFileSystem.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 34 | #include "StateSW.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 35 | #include "TglSW.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 36 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 37 | #include "Arial12x12.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 38 | #include "Arial24x23.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 39 | #include "Arial28x28.h" |
JDI_Mbed_Team | 7:c7a676157b4d | 40 | #include "Arial37x36.h" |
JDI_Mbed_Team | 7:c7a676157b4d | 41 | #include "Arial42x42.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 42 | #include "font_big.h" |
JDI_Mbed_Team | 7:c7a676157b4d | 43 | #include "Arial94x94.h" |
JDI_Mbed_Team | 0:33fe30a2b785 | 44 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 45 | #define ON 1 |
JDI_Mbed_Team | 0:33fe30a2b785 | 46 | #define OFF 0 |
JDI_Mbed_Team | 0:33fe30a2b785 | 47 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 48 | //K64F |
JDI_Mbed_Team | 0:33fe30a2b785 | 49 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // mosi,miso,sck,cs |
JDI_Mbed_Team | 0:33fe30a2b785 | 50 | memLCD8 WD(PTD2,PTD3,PTD1,PTD0,PTC4,PTD3); //PTC12); // mosi,miso,clk,cs,disp,power |
JDI_Mbed_Team | 0:33fe30a2b785 | 51 | PwmOut BK(PTC3); |
JDI_Mbed_Team | 0:33fe30a2b785 | 52 | PwmOut COM60HZ(PTC10); //add 20161108 |
JDI_Mbed_Team | 0:33fe30a2b785 | 53 | DigitalOut COMSEL(PTA2,0); //add 20161108 |
JDI_Mbed_Team | 0:33fe30a2b785 | 54 | DigitalOut BLCTRL(PTB10,0); //add 20171115 |
JDI_Mbed_Team | 0:33fe30a2b785 | 55 | // SW2 |
JDI_Mbed_Team | 0:33fe30a2b785 | 56 | StateSW swPWMorOFF(SW2); //PTC6); |
JDI_Mbed_Team | 0:33fe30a2b785 | 57 | InterruptIn PWMorOFF(SW2); |
JDI_Mbed_Team | 0:33fe30a2b785 | 58 | // SW3 |
JDI_Mbed_Team | 0:33fe30a2b785 | 59 | TglSW HaltSW(SW3); //PTA4); |
JDI_Mbed_Team | 0:33fe30a2b785 | 60 | DigitalIn TexSW(SW3); |
JDI_Mbed_Team | 0:33fe30a2b785 | 61 | |
JDI_Mbed_Team | 1:e5796aa9f1aa | 62 | //for debug |
JDI_Mbed_Team | 14:9d58f49f326f | 63 | Serial pc(USBTX, USBRX); // tx, rx |
JDI_Mbed_Team | 7:c7a676157b4d | 64 | |
JDI_Mbed_Team | 14:9d58f49f326f | 65 | void SDtex2BUF(char *filepath); |
JDI_Mbed_Team | 0:33fe30a2b785 | 66 | |
JDI_Mbed_Team | 1:e5796aa9f1aa | 67 | //function prototype |
JDI_Mbed_Team | 0:33fe30a2b785 | 68 | void SD2BUF(char *filepath); |
JDI_Mbed_Team | 0:33fe30a2b785 | 69 | void ifOFFseq(void); |
JDI_Mbed_Team | 0:33fe30a2b785 | 70 | void ifswPWM(void); |
JDI_Mbed_Team | 0:33fe30a2b785 | 71 | void OffSequence(void); |
JDI_Mbed_Team | 0:33fe30a2b785 | 72 | void DispAllDir(const char *fsrc); |
JDI_Mbed_Team | 14:9d58f49f326f | 73 | void ReadBmp(const char *fsrc, uint32_t FileNum); |
JDI_Mbed_Team | 0:33fe30a2b785 | 74 | uint32_t CntFile(const char *fsrc); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 75 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 76 | void fish_swim_RightToLeft(int y,int Speed,int No,int transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 77 | void fish_swim_LeftToRight(int y,int Speed,int No,int transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 78 | void fish_swim_BottomToTop(int x,int Speed,int No,int transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 79 | void fish_swim_TopToBottom(int x,int Speed,int No,int transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 80 | void fish_Surprise_LeftToRight(int y,int Speed,int no,int no2,int transfermode); |
JDI_Mbed_Team | 1:e5796aa9f1aa | 81 | //Grobal value |
JDI_Mbed_Team | 0:33fe30a2b785 | 82 | int ifMargeTXT = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 83 | int width = 400; |
JDI_Mbed_Team | 0:33fe30a2b785 | 84 | int height= 240; |
JDI_Mbed_Team | 0:33fe30a2b785 | 85 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 86 | float BKduty = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 87 | float BKjudge = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 88 | //double BKduty = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 89 | float bk_timer = 1.0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 90 | int blduty = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 91 | int bloff = 0; |
JDI_Mbed_Team | 1:e5796aa9f1aa | 92 | int blctrl_sel = 0; //0:40mA, 1:160mA //Y.S |
JDI_Mbed_Team | 7:c7a676157b4d | 93 | // Readed bitmap format, Color bit size = 1,4,8,(16),24,32 |
JDI_Mbed_Team | 7:c7a676157b4d | 94 | uint16_t bmp_bitcount; |
JDI_Mbed_Team | 0:33fe30a2b785 | 95 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 96 | void ReadMovieBmp(const char *fsrc, uint32_t FileNum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 97 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 98 | int main() { |
JDI_Mbed_Team | 0:33fe30a2b785 | 99 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 100 | uint32_t filenum; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 101 | char filepath[45]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 102 | uint32_t filenum2; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 103 | char filepath2[45]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 104 | //char countup[3+1]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 105 | //char KMPH[4+1]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 106 | //char Trans[13+1]; |
JDI_Mbed_Team | 14:9d58f49f326f | 107 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 108 | sd.disk_initialize(); |
JDI_Mbed_Team | 0:33fe30a2b785 | 109 | HaltSW.Enable(1); |
JDI_Mbed_Team | 0:33fe30a2b785 | 110 | |
JDI_Mbed_Team | 14:9d58f49f326f | 111 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 112 | FILE *fp = fopen("/sd/settings2.txt", "rb"); //read binary |
JDI_Mbed_Team | 0:33fe30a2b785 | 113 | if(fp != NULL) { |
JDI_Mbed_Team | 0:33fe30a2b785 | 114 | fscanf(fp, "%d",&width); //width read |
JDI_Mbed_Team | 0:33fe30a2b785 | 115 | fscanf(fp, "%d",&height); //height read |
JDI_Mbed_Team | 0:33fe30a2b785 | 116 | fscanf(fp, "%d",&blctrl_sel);//blct_sel read //0:40mA, 1:160mA |
JDI_Mbed_Team | 17:b1f9a00145b8 | 117 | //sprintf(filepath,"/sd/%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath |
JDI_Mbed_Team | 18:81201ac909c6 | 118 | sprintf(filepath,"/sd/backgrand_logo%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath |
JDI_Mbed_Team | 17:b1f9a00145b8 | 119 | sprintf(filepath2,"/sd/fish%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath |
JDI_Mbed_Team | 0:33fe30a2b785 | 120 | fclose(fp); |
JDI_Mbed_Team | 0:33fe30a2b785 | 121 | } else { |
JDI_Mbed_Team | 0:33fe30a2b785 | 122 | FILE *fp = fopen("/sd/settings.txt", "rb"); //read binary |
JDI_Mbed_Team | 0:33fe30a2b785 | 123 | if(fp != NULL) { |
JDI_Mbed_Team | 0:33fe30a2b785 | 124 | fscanf(fp, "%d",&width); //width read |
JDI_Mbed_Team | 0:33fe30a2b785 | 125 | fscanf(fp, "%d",&height); //height read |
JDI_Mbed_Team | 0:33fe30a2b785 | 126 | sprintf(filepath,"/sd/%dx%d",width,height); //DispAllDir("/sd/180x180") //file name write to filepath |
JDI_Mbed_Team | 0:33fe30a2b785 | 127 | fclose(fp); |
JDI_Mbed_Team | 0:33fe30a2b785 | 128 | } else{ |
JDI_Mbed_Team | 0:33fe30a2b785 | 129 | width =180; |
JDI_Mbed_Team | 0:33fe30a2b785 | 130 | height=180; |
JDI_Mbed_Team | 0:33fe30a2b785 | 131 | sprintf(filepath,"/sd/180x180"); //DispAllDir("/sd/180x180") |
JDI_Mbed_Team | 0:33fe30a2b785 | 132 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 133 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 134 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 135 | COMSEL.write(1); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 136 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 137 | BLCTRL.write(blctrl_sel); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 138 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 139 | WD.setWH(width,height); //input -> width, height |
JDI_Mbed_Team | 0:33fe30a2b785 | 140 | WD.background(Black); //background = black |
JDI_Mbed_Team | 0:33fe30a2b785 | 141 | WD.clsBUF(); //data initialize |
JDI_Mbed_Team | 0:33fe30a2b785 | 142 | WD.writeDISP(); //picture write(black) |
JDI_Mbed_Team | 0:33fe30a2b785 | 143 | WD.SwDisp(1); //disp on |
JDI_Mbed_Team | 0:33fe30a2b785 | 144 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 145 | PWMorOFF.fall(&ifswPWM); // Backlight //sw2 fall edge |
JDI_Mbed_Team | 0:33fe30a2b785 | 146 | PWMorOFF.rise(&ifOFFseq); // OFF Sequence //sw2 rise edge |
JDI_Mbed_Team | 0:33fe30a2b785 | 147 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 148 | swPWMorOFF.Enable(8, 2, 1); //int ModeNum, int NoiseCancel, int OpenTime //???? |
JDI_Mbed_Team | 0:33fe30a2b785 | 149 | swPWMorOFF.IfCntClose(ON); |
JDI_Mbed_Team | 0:33fe30a2b785 | 150 | swPWMorOFF.IfCntState(ON); |
JDI_Mbed_Team | 0:33fe30a2b785 | 151 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 152 | COM60HZ.period_ms(8); //add 20161108 |
JDI_Mbed_Team | 5:069467469900 | 153 | COM60HZ.write(0.5); //add 20161108 |
JDI_Mbed_Team | 0:33fe30a2b785 | 154 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 155 | BK.period_ms(1); //1ms cycle 20161012 |
JDI_Mbed_Team | 7:c7a676157b4d | 156 | BK.write(1); //low output 20160725 <- high output |
JDI_Mbed_Team | 7:c7a676157b4d | 157 | |
JDI_Mbed_Team | 7:c7a676157b4d | 158 | //DIR *d; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 159 | filenum = CntFile(filepath); //file number read |
JDI_Mbed_Team | 17:b1f9a00145b8 | 160 | pc.printf("filenum=%d\n",filenum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 161 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 162 | filenum2 = CntFile(filepath2); //file number read |
JDI_Mbed_Team | 17:b1f9a00145b8 | 163 | pc.printf("filenum2=%d\n",filenum2); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 164 | for(int i = 0; i < filenum2; i++) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 165 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 166 | ReadMovieBmp(filepath2,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 167 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 168 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 169 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 170 | //int x,y; |
JDI_Mbed_Team | 5:069467469900 | 171 | while(1) |
JDI_Mbed_Team | 1:e5796aa9f1aa | 172 | { //BITMAPS |
JDI_Mbed_Team | 17:b1f9a00145b8 | 173 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 174 | for(int i = 0; i < filenum;i++) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 175 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 176 | //pc.printf("1\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 177 | while(HaltSW.State()); // VCOM invert when image is still |
JDI_Mbed_Team | 17:b1f9a00145b8 | 178 | HaltSW.Clear(); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 179 | if( i%2 == 0 ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 180 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 181 | //color anime |
JDI_Mbed_Team | 17:b1f9a00145b8 | 182 | ReadBmp(filepath,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 183 | WD.writeDISP(TrBIT3); |
JDI_Mbed_Team | 18:81201ac909c6 | 184 | fish_swim_RightToLeft(60,10,2,TrBIT3); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 185 | fish_swim_TopToBottom(200,15,0,TrBIT3); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 186 | fish_swim_BottomToTop(100,10,4,TrBIT3); |
JDI_Mbed_Team | 18:81201ac909c6 | 187 | fish_Surprise_LeftToRight(80,30,2,6,TrBIT3); |
JDI_Mbed_Team | 18:81201ac909c6 | 188 | fish_swim_RightToLeft(80,10,8,TrBIT3); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 189 | }else{ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 190 | //monochrome anime |
JDI_Mbed_Team | 17:b1f9a00145b8 | 191 | ReadBmp(filepath,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 192 | WD.writeDISP(TrBIT1); |
JDI_Mbed_Team | 18:81201ac909c6 | 193 | fish_swim_RightToLeft(60,10,2,TrBIT1); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 194 | fish_swim_TopToBottom(200,15,4,TrBIT1); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 195 | fish_swim_BottomToTop(100,10,4,TrBIT1); |
JDI_Mbed_Team | 18:81201ac909c6 | 196 | fish_Surprise_LeftToRight(80,30,2,6,TrBIT1); |
JDI_Mbed_Team | 18:81201ac909c6 | 197 | fish_swim_RightToLeft(80,5,8,TrBIT1); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 198 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 199 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 200 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 201 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 202 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 203 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 204 | * @brief Fish(bmp) swim from Right to Left |
JDI_Mbed_Team | 17:b1f9a00145b8 | 205 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 206 | void fish_swim_RightToLeft(int y,int Speed,int no,int transfermode) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 207 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 208 | int x; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 209 | int i=no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 210 | for(x = width ; x >=-80 ; x-=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 211 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 212 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 213 | WD.makeMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 214 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 215 | WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 216 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 217 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 218 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 219 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 220 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 221 | * @brief Fish(bmp) swim from Left to Right |
JDI_Mbed_Team | 17:b1f9a00145b8 | 222 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 223 | void fish_swim_LeftToRight(int y,int Speed,int no,int transfermode) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 224 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 225 | int x; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 226 | int i=no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 227 | for(x = -80 ; x <=width+80 ; x+=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 228 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 229 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 230 | WD.makeMovieFrame_Reverse(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 231 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 232 | WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 233 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 234 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 235 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 236 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 237 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 238 | * @brief Fish(bmp) swim from Left to Right,but he surprise!! and return |
JDI_Mbed_Team | 17:b1f9a00145b8 | 239 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 240 | void fish_Surprise_LeftToRight(int y,int Speed,int no,int no2,int transfermode) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 241 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 242 | int x; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 243 | int i; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 244 | i=no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 245 | for(x = -80 ; x <=width-120 ; x+=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 246 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 247 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 248 | WD.makeMovieFrame_Reverse(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 249 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 250 | WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 251 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 252 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 253 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 254 | //surprise |
JDI_Mbed_Team | 17:b1f9a00145b8 | 255 | i = no2; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 256 | for(int j = 0 ; j < 6 ; j++ ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 257 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 258 | x = width-120; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 259 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 260 | WD.makeMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 261 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 262 | WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 263 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 264 | if( ++i > no2+1 ) i = no2; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 265 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 266 | // swim reverse |
JDI_Mbed_Team | 17:b1f9a00145b8 | 267 | i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 268 | for(x = width-120 ; x >= -80 ; x-=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 269 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 270 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 271 | WD.makeMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 272 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 273 | WD.writeDISP(y,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 274 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 275 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 276 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 277 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 278 | |
JDI_Mbed_Team | 14:9d58f49f326f | 279 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 280 | * @brief Fish(bmp) swim from bottom to top |
JDI_Mbed_Team | 17:b1f9a00145b8 | 281 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 282 | void fish_swim_BottomToTop(int x,int Speed,int no,int transfermode) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 283 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 284 | int y; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 285 | int i=no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 286 | for(y = height ; y >=-MOVIE_VERT_SIZE ; y-=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 287 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 288 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 289 | WD.makeMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 290 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 291 | WD.writeDISP(y,y+MOVIE_VERT_SIZE+Speed,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 292 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 293 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 294 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 295 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 296 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 297 | * @brief Fish(bmp) swim from top to bottom |
JDI_Mbed_Team | 17:b1f9a00145b8 | 298 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 299 | void fish_swim_TopToBottom(int x,int Speed,int no,int transfermode) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 300 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 301 | int y; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 302 | int i=no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 303 | for(y = -MOVIE_VERT_SIZE ; y < height+Speed; y+=Speed ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 304 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 305 | //pc.printf("2\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 306 | WD.makeMovieFrame_Updown(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 307 | //backgrand display |
JDI_Mbed_Team | 17:b1f9a00145b8 | 308 | WD.writeDISP(y-Speed,y+MOVIE_VERT_SIZE,transfermode); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 309 | WD.RestoreMovieFrame(x,y,i); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 310 | if( ++i > no+1 ) i = no; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 311 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 312 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 313 | /** |
JDI_Mbed_Team | 14:9d58f49f326f | 314 | * @brief read a bitmap file in SD. 8color mode |
JDI_Mbed_Team | 14:9d58f49f326f | 315 | */ |
JDI_Mbed_Team | 14:9d58f49f326f | 316 | void SD2BUF(char *filepath){ |
JDI_Mbed_Team | 14:9d58f49f326f | 317 | char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2]; |
JDI_Mbed_Team | 14:9d58f49f326f | 318 | char RGB; |
JDI_Mbed_Team | 14:9d58f49f326f | 319 | FILE *fp ; |
JDI_Mbed_Team | 14:9d58f49f326f | 320 | |
JDI_Mbed_Team | 14:9d58f49f326f | 321 | pc.printf("file=%s\n",filepath); |
JDI_Mbed_Team | 14:9d58f49f326f | 322 | fp = fopen(filepath, "rb"); |
JDI_Mbed_Team | 14:9d58f49f326f | 323 | if(fp != NULL) { |
JDI_Mbed_Team | 14:9d58f49f326f | 324 | //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 54bytes |
JDI_Mbed_Team | 14:9d58f49f326f | 325 | for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes |
JDI_Mbed_Team | 14:9d58f49f326f | 326 | fscanf(fp,"%c",&(bc[0]));// color bit size 2bytes |
JDI_Mbed_Team | 14:9d58f49f326f | 327 | fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes |
JDI_Mbed_Team | 14:9d58f49f326f | 328 | for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes |
JDI_Mbed_Team | 14:9d58f49f326f | 329 | bmp_bitcount = bc[0]+bc[1]*256; |
JDI_Mbed_Team | 14:9d58f49f326f | 330 | if( bmp_bitcount == 1 ) |
JDI_Mbed_Team | 14:9d58f49f326f | 331 | { |
JDI_Mbed_Team | 14:9d58f49f326f | 332 | for(int i=0; i< 8 ; i++) fscanf(fp,"%c",DUMMY); // Pallet Data |
JDI_Mbed_Team | 14:9d58f49f326f | 333 | int x; |
JDI_Mbed_Team | 14:9d58f49f326f | 334 | for(int y=height-1; y>=0; y--) { |
JDI_Mbed_Team | 14:9d58f49f326f | 335 | for(x=0; x< width; x += 8) { //1bit monochrome |
JDI_Mbed_Team | 14:9d58f49f326f | 336 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 14:9d58f49f326f | 337 | for(int i=0; i < 8 ; i++ ){ |
JDI_Mbed_Team | 14:9d58f49f326f | 338 | RGB = 0; |
JDI_Mbed_Team | 14:9d58f49f326f | 339 | if( (*G8 & 0x80) != 0) RGB = RGB|0x0e; |
JDI_Mbed_Team | 14:9d58f49f326f | 340 | WD.pixel(x+i,y,RGB); |
JDI_Mbed_Team | 14:9d58f49f326f | 341 | *G8 = *G8 << 1; |
JDI_Mbed_Team | 14:9d58f49f326f | 342 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 343 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 344 | if( width%8 != 0 ) |
JDI_Mbed_Team | 14:9d58f49f326f | 345 | { |
JDI_Mbed_Team | 14:9d58f49f326f | 346 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 14:9d58f49f326f | 347 | int i; |
JDI_Mbed_Team | 14:9d58f49f326f | 348 | for(i=0; i < (width%8) ; i++ ){ |
JDI_Mbed_Team | 14:9d58f49f326f | 349 | RGB = 0; |
JDI_Mbed_Team | 14:9d58f49f326f | 350 | if( (*G8 & 0x40) != 0) RGB = RGB|0x0e; |
JDI_Mbed_Team | 14:9d58f49f326f | 351 | WD.pixel(x+i,y,RGB); |
JDI_Mbed_Team | 14:9d58f49f326f | 352 | *G8 = *G8 << 1; |
JDI_Mbed_Team | 14:9d58f49f326f | 353 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 354 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 355 | if( y!=0){ // The last data column doesn't need padding |
JDI_Mbed_Team | 14:9d58f49f326f | 356 | int wbyte = width/8 + ( width%8 == 0 ? 0:1 ); |
JDI_Mbed_Team | 14:9d58f49f326f | 357 | for(int x=(wbyte*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);// 4byte boundery for every column(only windows bitmap format) |
JDI_Mbed_Team | 14:9d58f49f326f | 358 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 359 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 360 | }else |
JDI_Mbed_Team | 14:9d58f49f326f | 361 | if( bmp_bitcount == 24 ) |
JDI_Mbed_Team | 14:9d58f49f326f | 362 | { |
JDI_Mbed_Team | 14:9d58f49f326f | 363 | for(int y=height-1; y>=0; y--) { |
JDI_Mbed_Team | 14:9d58f49f326f | 364 | for(int x=0; x< width; x++) { //24bit color B 8bit -> G 8bit -> R 8bit |
JDI_Mbed_Team | 14:9d58f49f326f | 365 | fscanf(fp, "%c",B8); |
JDI_Mbed_Team | 14:9d58f49f326f | 366 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 14:9d58f49f326f | 367 | fscanf(fp, "%c",R8); |
JDI_Mbed_Team | 14:9d58f49f326f | 368 | |
JDI_Mbed_Team | 14:9d58f49f326f | 369 | RGB = RGB8(*R8,*G8,*B8); //6bit(8bit) MIP MASK 0000 1110 |
JDI_Mbed_Team | 14:9d58f49f326f | 370 | WD.pixel(x,y,RGB); |
JDI_Mbed_Team | 14:9d58f49f326f | 371 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 372 | if( y!=0) // The last data column doesn't need padding |
JDI_Mbed_Team | 14:9d58f49f326f | 373 | for(int x=(width*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY); // 4byte boundery for every column(only windows bitmap format) |
JDI_Mbed_Team | 14:9d58f49f326f | 374 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 375 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 376 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 377 | fclose(fp); |
JDI_Mbed_Team | 14:9d58f49f326f | 378 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 379 | |
JDI_Mbed_Team | 14:9d58f49f326f | 380 | /** |
JDI_Mbed_Team | 14:9d58f49f326f | 381 | * @brief read a text file in SD. |
JDI_Mbed_Team | 14:9d58f49f326f | 382 | */ |
JDI_Mbed_Team | 14:9d58f49f326f | 383 | void SDtex2BUF(char *filepath){ |
JDI_Mbed_Team | 14:9d58f49f326f | 384 | int x,y,font,color; |
JDI_Mbed_Team | 14:9d58f49f326f | 385 | char text[40]; |
JDI_Mbed_Team | 14:9d58f49f326f | 386 | int ifEOF; |
JDI_Mbed_Team | 14:9d58f49f326f | 387 | FILE *fp ; |
JDI_Mbed_Team | 14:9d58f49f326f | 388 | |
JDI_Mbed_Team | 14:9d58f49f326f | 389 | fp = fopen(filepath, "r"); |
JDI_Mbed_Team | 14:9d58f49f326f | 390 | if(fp != NULL) { |
JDI_Mbed_Team | 14:9d58f49f326f | 391 | while(ifEOF != -1){ |
JDI_Mbed_Team | 14:9d58f49f326f | 392 | ifEOF = fscanf(fp,"%d,%d,%d,%d,%[^,],",&x,&y,&font,&color,text); |
JDI_Mbed_Team | 14:9d58f49f326f | 393 | WD.locate(x,y); |
JDI_Mbed_Team | 14:9d58f49f326f | 394 | WD.foreground(color); |
JDI_Mbed_Team | 14:9d58f49f326f | 395 | if (font ==1) WD.set_font((unsigned char*) Arial12x12); |
JDI_Mbed_Team | 14:9d58f49f326f | 396 | else if (font ==2) WD.set_font((unsigned char*) Arial24x23); |
JDI_Mbed_Team | 14:9d58f49f326f | 397 | else if (font ==3) WD.set_font((unsigned char*) Arial28x28); |
JDI_Mbed_Team | 14:9d58f49f326f | 398 | else WD.set_font((unsigned char*) Neu42x35); |
JDI_Mbed_Team | 14:9d58f49f326f | 399 | |
JDI_Mbed_Team | 14:9d58f49f326f | 400 | WD.printf("%s",text); |
JDI_Mbed_Team | 14:9d58f49f326f | 401 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 402 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 403 | fclose(fp); |
JDI_Mbed_Team | 14:9d58f49f326f | 404 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 405 | |
JDI_Mbed_Team | 14:9d58f49f326f | 406 | /* |
JDI_Mbed_Team | 14:9d58f49f326f | 407 | void DispAllDir(const char *fsrc) |
JDI_Mbed_Team | 14:9d58f49f326f | 408 | { |
JDI_Mbed_Team | 14:9d58f49f326f | 409 | DIR *d = opendir(fsrc); |
JDI_Mbed_Team | 14:9d58f49f326f | 410 | struct dirent *p; |
JDI_Mbed_Team | 14:9d58f49f326f | 411 | char filepath[40]; |
JDI_Mbed_Team | 14:9d58f49f326f | 412 | |
JDI_Mbed_Team | 14:9d58f49f326f | 413 | while ((p = readdir(d)) != NULL) { |
JDI_Mbed_Team | 14:9d58f49f326f | 414 | sprintf(filepath, "%s/%s",fsrc,p->d_name); |
JDI_Mbed_Team | 14:9d58f49f326f | 415 | SD2BUF(filepath); |
JDI_Mbed_Team | 14:9d58f49f326f | 416 | WD.writeDISP(); |
JDI_Mbed_Team | 14:9d58f49f326f | 417 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 418 | closedir(d); |
JDI_Mbed_Team | 14:9d58f49f326f | 419 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 420 | */ |
JDI_Mbed_Team | 14:9d58f49f326f | 421 | |
JDI_Mbed_Team | 14:9d58f49f326f | 422 | /** |
JDI_Mbed_Team | 14:9d58f49f326f | 423 | * @brief read a bitmap file in SD by file number. |
JDI_Mbed_Team | 14:9d58f49f326f | 424 | */ |
JDI_Mbed_Team | 14:9d58f49f326f | 425 | void ReadBmp(const char *fsrc, uint32_t FileNum) |
JDI_Mbed_Team | 14:9d58f49f326f | 426 | { |
JDI_Mbed_Team | 14:9d58f49f326f | 427 | DIR *d = opendir(fsrc); |
JDI_Mbed_Team | 14:9d58f49f326f | 428 | struct dirent *p; |
JDI_Mbed_Team | 14:9d58f49f326f | 429 | char filepath[40]; |
JDI_Mbed_Team | 14:9d58f49f326f | 430 | |
JDI_Mbed_Team | 14:9d58f49f326f | 431 | for(uint32_t i=0; i< FileNum; i++) readdir(d); |
JDI_Mbed_Team | 14:9d58f49f326f | 432 | if ((p = readdir(d)) != NULL) { |
JDI_Mbed_Team | 14:9d58f49f326f | 433 | sprintf(filepath, "%s/%s",fsrc,p->d_name); |
JDI_Mbed_Team | 14:9d58f49f326f | 434 | SD2BUF(filepath); |
JDI_Mbed_Team | 14:9d58f49f326f | 435 | if(ifMargeTXT){ |
JDI_Mbed_Team | 14:9d58f49f326f | 436 | sprintf(filepath, "%s_txt/%s.txt",fsrc,p->d_name); |
JDI_Mbed_Team | 14:9d58f49f326f | 437 | SDtex2BUF(filepath); |
JDI_Mbed_Team | 14:9d58f49f326f | 438 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 439 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 440 | closedir(d); |
JDI_Mbed_Team | 14:9d58f49f326f | 441 | } |
JDI_Mbed_Team | 14:9d58f49f326f | 442 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 443 | uint32_t CntFile(const char *fsrc) |
JDI_Mbed_Team | 0:33fe30a2b785 | 444 | { |
JDI_Mbed_Team | 0:33fe30a2b785 | 445 | DIR *d = opendir(fsrc); |
JDI_Mbed_Team | 0:33fe30a2b785 | 446 | uint32_t counter = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 447 | while (readdir(d)!= NULL) counter++; |
JDI_Mbed_Team | 0:33fe30a2b785 | 448 | closedir(d); |
JDI_Mbed_Team | 0:33fe30a2b785 | 449 | return counter; |
JDI_Mbed_Team | 0:33fe30a2b785 | 450 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 451 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 452 | void OffSequence(void){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 453 | BK.write(0); //add 20160712 17:00 |
JDI_Mbed_Team | 0:33fe30a2b785 | 454 | WD.background(Black); |
JDI_Mbed_Team | 0:33fe30a2b785 | 455 | WD.clsBUF(); |
JDI_Mbed_Team | 0:33fe30a2b785 | 456 | WD.SwDisp(0); |
JDI_Mbed_Team | 0:33fe30a2b785 | 457 | WD.writeDISP(); |
JDI_Mbed_Team | 14:9d58f49f326f | 458 | WD.writeDISP(); |
JDI_Mbed_Team | 0:33fe30a2b785 | 459 | bloff = 1; |
JDI_Mbed_Team | 0:33fe30a2b785 | 460 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 461 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 462 | void ifswPWM(void){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 463 | if(bloff == 0){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 464 | if(blduty >= 10){ //0 |
JDI_Mbed_Team | 0:33fe30a2b785 | 465 | blduty = 0; //10 |
JDI_Mbed_Team | 0:33fe30a2b785 | 466 | COMSEL.write(1); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 467 | }else{ |
JDI_Mbed_Team | 0:33fe30a2b785 | 468 | blduty += 1; //-= |
JDI_Mbed_Team | 0:33fe30a2b785 | 469 | COMSEL.write(1); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 470 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 471 | }else{ |
JDI_Mbed_Team | 0:33fe30a2b785 | 472 | blduty = 0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 473 | COMSEL.write(1); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 474 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 475 | // BKduty = BKduty - 0.125; |
JDI_Mbed_Team | 0:33fe30a2b785 | 476 | // BKduty -= 0.125; |
JDI_Mbed_Team | 0:33fe30a2b785 | 477 | // if(BKduty <= 0) BKduty = 1; |
JDI_Mbed_Team | 0:33fe30a2b785 | 478 | // BK.write(BKduty); |
JDI_Mbed_Team | 0:33fe30a2b785 | 479 | BK.write(blduty*0.1); // |
JDI_Mbed_Team | 0:33fe30a2b785 | 480 | if(blduty == 0){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 481 | bk_timer = 1.0; |
JDI_Mbed_Team | 0:33fe30a2b785 | 482 | }else{ |
JDI_Mbed_Team | 0:33fe30a2b785 | 483 | bk_timer = 0.008; //0.016 20160712 |
JDI_Mbed_Team | 0:33fe30a2b785 | 484 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 485 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 486 | |
JDI_Mbed_Team | 0:33fe30a2b785 | 487 | void ifOFFseq(void){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 488 | if(swPWMorOFF.IfAtTime()){ |
JDI_Mbed_Team | 0:33fe30a2b785 | 489 | swPWMorOFF.IfCntClose(OFF); |
JDI_Mbed_Team | 0:33fe30a2b785 | 490 | swPWMorOFF.IfCntState(OFF); |
JDI_Mbed_Team | 0:33fe30a2b785 | 491 | OffSequence(); |
JDI_Mbed_Team | 0:33fe30a2b785 | 492 | } |
JDI_Mbed_Team | 0:33fe30a2b785 | 493 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 494 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 495 | * @brief read a bitmap,Animation page file in SD. |
JDI_Mbed_Team | 17:b1f9a00145b8 | 496 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 497 | void SD2MOVIEBUF(char *filepath,int memnum){ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 498 | char R8[1],G8[1],B8[1] ,DUMMY[1],bc[2]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 499 | char RGB; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 500 | FILE *fp ; |
JDI_Mbed_Team | 0:33fe30a2b785 | 501 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 502 | pc.printf("[%d]%s\n",memnum,filepath); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 503 | fp = fopen(filepath, "rb"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 504 | if(fp != NULL) { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 505 | //for(int i=0; i< 54 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 54bytes |
JDI_Mbed_Team | 17:b1f9a00145b8 | 506 | for(int i=0; i< 28 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes |
JDI_Mbed_Team | 17:b1f9a00145b8 | 507 | fscanf(fp,"%c",&(bc[0]));// color bit size 2bytes |
JDI_Mbed_Team | 17:b1f9a00145b8 | 508 | fscanf(fp,"%c",&(bc[1]));// color bit size 2bytes |
JDI_Mbed_Team | 17:b1f9a00145b8 | 509 | for(int i=0; i< 24 ; i++) fscanf(fp,"%c",DUMMY); // Discard Header 26bytes |
JDI_Mbed_Team | 17:b1f9a00145b8 | 510 | bmp_bitcount = bc[0]+bc[1]*256; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 511 | pc.printf("bitcount=%d\n",bmp_bitcount); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 512 | if( bmp_bitcount == 1 ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 513 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 514 | for(int i=0; i< 8 ; i++) fscanf(fp,"%c",DUMMY); // Pallet Data |
JDI_Mbed_Team | 17:b1f9a00145b8 | 515 | int x; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 516 | for(int y=MOVIE_VERT_SIZE-1; y>=0; y--) { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 517 | for(x=0; x< MOVIE_HORI_SIZE; x += 8) { //1bit monochrome |
JDI_Mbed_Team | 17:b1f9a00145b8 | 518 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 519 | for(int i=0; i < 8 ; i++ ){ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 520 | RGB = 0; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 521 | if( (*G8 & 0x80) != 0) RGB = RGB|0x0e; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 522 | WD.movie_pixel(x+i,y,RGB,memnum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 523 | *G8 = *G8 << 1; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 524 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 525 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 526 | if( MOVIE_HORI_SIZE%8 != 0 ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 527 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 528 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 529 | int i; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 530 | for(i=0; i < (width%8) ; i++ ){ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 531 | RGB = 0; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 532 | if( (*G8 & 0x40) != 0) RGB = RGB|0x0e; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 533 | WD.movie_pixel(x+i,y,RGB,memnum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 534 | *G8 = *G8 << 1; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 535 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 536 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 537 | if( y!=0){ // The last data column doesn't need padding |
JDI_Mbed_Team | 17:b1f9a00145b8 | 538 | int wbyte = MOVIE_HORI_SIZE/8 + ( MOVIE_HORI_SIZE%8 == 0 ? 0:1 ); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 539 | for(int x=(wbyte*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY);// 4byte boundery for every column(only windows bitmap format) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 540 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 541 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 542 | }else |
JDI_Mbed_Team | 17:b1f9a00145b8 | 543 | if( bmp_bitcount == 24 ) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 544 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 545 | for(int y=MOVIE_VERT_SIZE-1; y>=0; y--) { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 546 | for(int x=0; x< MOVIE_HORI_SIZE; x++) { //24bit color B 8bit -> G 8bit -> R 8bit |
JDI_Mbed_Team | 17:b1f9a00145b8 | 547 | fscanf(fp, "%c",B8); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 548 | fscanf(fp, "%c",G8); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 549 | fscanf(fp, "%c",R8); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 550 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 551 | RGB = RGB8(*R8,*G8,*B8); //6bit(8bit) MIP MASK 0000 1110 |
JDI_Mbed_Team | 17:b1f9a00145b8 | 552 | WD.movie_pixel(x,y,RGB,memnum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 553 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 554 | if( y!=0) // The last data column doesn't need padding |
JDI_Mbed_Team | 17:b1f9a00145b8 | 555 | for(int x=(MOVIE_HORI_SIZE*3)%4; (x%4 !=0); x++) fscanf(fp, "%c",DUMMY); // 4byte boundery for every column(only windows bitmap format) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 556 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 557 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 558 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 559 | fclose(fp); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 560 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 561 | /** |
JDI_Mbed_Team | 17:b1f9a00145b8 | 562 | * @brief read a bitmap,All Animation page file in SD. |
JDI_Mbed_Team | 17:b1f9a00145b8 | 563 | */ |
JDI_Mbed_Team | 17:b1f9a00145b8 | 564 | void ReadMovieBmp(const char *fsrc, uint32_t FileNum) |
JDI_Mbed_Team | 17:b1f9a00145b8 | 565 | { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 566 | DIR *d = opendir(fsrc); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 567 | struct dirent *p; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 568 | char filepath[40]; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 569 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 570 | if( FileNum >= MOVIE_NUM ) return; |
JDI_Mbed_Team | 17:b1f9a00145b8 | 571 | |
JDI_Mbed_Team | 17:b1f9a00145b8 | 572 | pc.printf("read bmp No%d\n",FileNum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 573 | for(uint32_t i=0; i< FileNum; i++) readdir(d); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 574 | if ((p = readdir(d)) != NULL) { |
JDI_Mbed_Team | 17:b1f9a00145b8 | 575 | sprintf(filepath, "%s/%s",fsrc,p->d_name); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 576 | SD2MOVIEBUF(filepath,FileNum); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 577 | pc.printf("read finish\n"); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 578 | } |
JDI_Mbed_Team | 17:b1f9a00145b8 | 579 | closedir(d); |
JDI_Mbed_Team | 17:b1f9a00145b8 | 580 | } |