目次
前
ドット位置をバイト埋込み
グラフィックLCDに2値画像を表示するため
ドット情報を、フレームバッファを構成する
バイトに埋込むことが必要になりました。
1ラインが、どのくらいのバイト数になるのかを
計算してみます。
64ドッドx64ラインという構成なので
1ラインは64/8=8バイト。
8バイトの中に、どのドット位置にビットをセット
するのかを、図を描いて考えます。
12ドット目に、ビットをセットしたいときは
8の剰余系で、商と余りを求めて、所属する
バイトとビット位置を算出できるとなります。
具体的に計算すると、以下。
12 / 8 = 1
12 % 8 = 4
所属するバイトは、1バイト目。
ビット位置はMSBから数えて4ビット目。
1バイト中で、ビットをセットするとすれば
次の変換計算が必要。
1 << (7-4)
8の剰余系で、商と余りを求めていけば
セットするビットのデータは、次のように
まとめられます。(2進数)
- 1000 0000 (余り 0)
- 0100 0000 (余り 1)
- 0010 0000 (余り 2)
- 0001 0000 (余り 3)
- 0000 1000 (余り 4)
- 0000 0100 (余り 5)
- 0000 0010 (余り 6)
- 0000 0001 (余り 7)
8の剰余系で、商と余りを求められるので
ドット位置をNとすると、次の計算式を
用意できます。
pQ = tbit / 8 ;
pR = tbit % 8 ;
pData = (1 << (7 - pR) ;
指定のドット位置に1をセットするなら
配列datでフレームバッファを構成として
次のように計算できます。
pQ = tbit / 8 ;
pR = tbit % 8 ;
pData = (1 << (7 - pR) ;
dat[pQ] |= pData ;
ラインごとに処理するなら、ライン番号を0からと
して、変数lineを使い次のように表現できます。
dat[8*line+pQ] |= pData ;
ORでビットをセットするのは、他のドットに
影響を与えないようにするため、
64ドッドx64ライン構成で、10ドットの倍数の
位置で、8ライトの縦線を入れるには、以下のように
コードを書けばよいはず。
unsigned char dat[8*64];
int line,ii ;
int tbit ;
int pQ,pR,pData ;
for ( line = 0 ; line < 8 ; line++ ) {
for ( ii = 0 ; ii < 64 ; ii++ ) {
if ( (ii % 10) == 0 ) {
tbit = ii ;
pQ = tbit / 8 ;
pR = tbit % 8 ;
pData = (1 << (7 - pR)) ;
dat[8*line+pQ] |= pData ;
}
}
}
8の剰余系で、いろいろなパターンで
縦線を入れてみると、次のようになり
ます。
これらは、CLIで動作確認できるように
フレームバッファを配列で構成した後に
1バイトを2進数で表示しています。
目次
前