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.
