Complex figures are tough to build programmatic-ally(dynamic creation), so such figures are converted from an image to equivalent header files, and then called after a certain time delay(creating frame rate) so to it seem as animated.
CLick to view swf.
This is the gif i choose.
Horse Running GIF. |
Frame by Frame Image. |
So obviously the next step is to separate each image by cropping. Using any image editor. As shown below.
Cropping Individual Image. |
Now separated image needs to be converted to monochrome. To see how to do view this post. Converting Bitmap Image to Equivalent Header File.
Difference Grayscale and Monochrome Image |
Individual Header Files. |
The LoadBitmap Function that was used to show bitmap images is used here to show the frame by frame animation.
void LoadBitmap(unsigned char *bitmap)
{
uint16_t i, j,by;
for(i=0; i<64; i+=8)
for(j=0;
j<128; j++)
{
by=pgm_read_byte(bitmap++);
ks0108GotoXY(j,
i);
ks0108WriteData(by);
}
}
|
void main() { for(volatile uint16_t i=0; i<15000; i++); ks0108Init(0); ks0108ClearScreen(); while(1) { LoadBitmap(horse001); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse002); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse003); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse004); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse005); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse006); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse007); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse008); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse009); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse010); for(volatile uint16_t i=0; i<15000; i++); LoadBitmap(horse011); for(volatile uint16_t i=0; i<15000; i++); }//end of while loop } |
Currently the frame rate is 15frames per second one can vary and change the speed of display by varying the value of i. To make a more precise frame rate stay connect for future post.
This is the final output.