デジット32x16ドットマトリクスLEDモジュールのテストが終わったので、早速漢字を表示できる電光掲示板にしてみました。
こんなかんじで例が漢字でないのが残念!
漢字の表示例は動画を参照してください。
漢字フォントファイルはコード順に1行1文字で定義してあります。
==========
<前略>
/* eaa1 遙 */ 0x0020,0x607e,0x3184,0x1648,0x0130,0x00c0,0x0700,0xf1fc, 0x1320,0x1020,0x17ff,0x1020,0x1222,0x33fe,0x6800,0xc7ff ,
/* eaa2 瑤 */ 0x0020,0x007c,0xf8c4,0x23ac,0x2058,0x2030,0xf8e0,0x2380, 0x20fe,0x2120,0x2020,0x3bff,0xe020,0x0122,0x0122,0x01fe ,
==========
全漢字を並べたインデックスファイルを作ります。
==========
、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇
<後略>
==========
表示したい文字列を定義して、インデックスファイルを引いてフォントファイルの何行目かを求めて、フォントファイルの該当する行をkanji.hファイルへ出力します。
検索プログラムはHSPで書きました。
==========
s = "JJ1WKN ☆★○●◎◇◆□■△▲▽▼ "
==========
出力したkanji.hファイルです。漢字フォントを定義した配列です。
PROGMEMにしたので、Flashの容量一杯までフォントを置けます。
==========
PROGMEM prog_uint16_t kanji[] = {
/* 8269 J */ 0x0000,0x00f8,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, 0x0020,0x0020,0x0020,0x1020,0x1840,0x0f80,0x0000,0x0000 ,
/* 8269 J */ 0x0000,0x00f8,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020, 0x0020,0x0020,0x0020,0x1020,0x1840,0x0f80,0x0000,0x0000 ,
/* 8250 1 */ 0x0000,0x0100,0x0300,0x0500,0x0900,0x0100,0x0100,0x0100, 0x0100,0x0100,0x0100,0x0100,0x0100,0x0100,0x07c0,0x0000 ,
/* 8276 W */ 0x0000,0xf99f,0x2184,0x2184,0x23c4,0x324c,0x1248,0x1668, 0x1428,0x1428,0x1c38,0x0c30,0x0810,0x0810,0x0000,0x0000 ,
/* 826a K */ 0x0000,0x3e7c,0x0830,0x0860,0x08c0,0x0980,0x0b00,0x0f00, 0x0980,0x08c0,0x0860,0x0830,0x0818,0x3e3e,0x0000,0x0000 ,
/* 826d N */ 0x0000,0x783e,0x1c08,0x1408,0x1608,0x1308,0x1108,0x1188, 0x10c8,0x1048,0x1068,0x1038,0x1018,0x7808,0x0000,0x0000 ,
<中略>
/* 81a5 ▼ */ 0x0000,0x0000,0x7ffe,0x3ffc,0x3ffc,0x1ff8,0x1ff0,0x0ff0, 0x0fe0,0x07e0,0x07c0,0x0380,0x0380,0x0100,0x0000,0x0000 ,
/* 8140 */ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 ,
};
==========
Arduinoのスケッチでは縦に切り出して左シフトしていきます。
==========
// kanji txt scroll by JJ1WKN 2013-07-09
#include <MsTimer2.h>
#include <Digit32x16.h>
#include <avr/pgmspace.h>
#include "kanji.h"
void setup(){
Digit32x16::Init();
}
int len = sizeof(kanji)/sizeof(kanji[0]);
void loop(){
for(int j=0; j < len; j+=16) {
for(int x=0;x<16;x++) {
for(int y=0;y<16;y++) {
unsigned int wk = pgm_read_word_near(kanji+j+y);
Digit32x16::Set(31, y, bitRead(wk,15-x));
}
delay(60);
Digit32x16::ShiftLeft();
}
}
}
==========
動画です。
漢字表示してみました。
試してみたい方は、jj1wknあっとじゃーるへご連絡を。