MAPLEボードでOB基板に画像表示
.
mbedやLPCXpressoを搭載して開発できる、MAPLEボード。 これを用いてOLEDモジュールに画像表示させてみました。
Kazuhiro Ouchiさんの記事MARY OB基板(OLED)をmbedに接続してみました を読むと、@nxpfanさんのMAPLE用OLEDライブラリMARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)があるとか。。。
これをほぼそのまま流用させてもらいました(;
そのままでは面白くないので、 1画面分の画像DataをHeaderファイルとして作成し、 それを読み込んで表示させています。 こちらもPIC向けQVGA-LCDのコードを参考にさせてもらいました。
画像ファイルHeader(私は"imgdata.h"として記述)は以下のような記述にします。
const unsigned int Header1[16386]={ //配列Dataを作成. 128 x 128 + 2 = 16386 0x0080,0x0080, //1st data: Image Height, 2nd data: Image Width 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, //Image data 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, ・・・・ 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF };
DataはRGB565形式としました。画像抽出プログラムは別途自作してます。
OLEDライブラリに含まれているNokia LCDのライブラリでは、外部からのRGB888bitの Dataを読み込んで、内部でRGB444形式にしています。
そのため、画像Data(RGB565形式)をRGB888形式にする必要がありました。 mainプログラムに以下のサブルーチンを組み込みました。
void oled_image2(const unsigned int *ptr) { short height,width; int colour; height = *ptr; ptr++; width = *ptr; ptr++; oled1.locate(0,0); for(int i=1;i<=width;i++) { for(int j=1;j<=height;j++) { colour = (((*ptr&0xF800)<<8) | ((*ptr&0x07E0)<<5) | ((*ptr&0x001F)<<3)); //for RGB888 oled1.pixel(j,i,colour); ptr++; } } }
これをmain関数の中で
oled_image2(Header1);
のように呼び出せば、画像Dataを読みこんで表示してくれます。
※ 1枚分の画像Dataを組み込むと、binファイルが101KB程度になります。
Please log in to post comments.