● 実験テーマ104
「QVGA液晶に、7セグ風表示をさせる簡単な実験」
(京谷豊著「グラフィック表示モジュール応用製作集」の記事を参考に、PIC32MX370F+QVGAで実験してみました。)
以下、この実験の顛末記です。
■ 2018.3.12
・京谷豊著「グラフィック表示モジュール応用製作集」の記事の中に興味を引くものがありました。
第7章 Appendix1 LCDパネルに図形を描くプログラムの、リスト10、11に引数で数値を渡すと、1桁の7セグLED
のパターンを表示する関数と、最大5桁までの7セグLEDパターン表示関数が掲載されていました。
8080系時代からマイコンの世界に入った私にとって、7セグLEDには特別な愛着が今でもあります。
当時は、74HC4511等の、7セグデコーダICに、数値を入力してデコードされた7セグパターンで当該セグメントを
点灯させいたように思います。
これを、ソフトで制御し、数値に対応して、液晶上に表示したセグメントを、ON/OFF描画するように組まれており
大変興味を持ちました。
ただ使用しているハードが、ルネサスの、SHマイコン+自作の、FPGAで作られた、LCDコントローラなため、
PIC+QVGA内蔵のコントローラを常用している私にとって、これに移植すべき、アレンジが必要です。
・今回のハードは、実験のし易さから、最近作った、100M動作版の、PIC32MX370Fトレーニング基板を使うことにしました。
■ 2018.3.13
・移植作業開始。
液晶ライブラリに、以下の、3つの関数を追加した。
@ void Glcd_PaintBox(short X1, short Y1, short X2, short Y2, unsigned short
Color)
・指定色でBOXを塗りつぶす関数
上から下の垂直線を描画終了座標(右下)まで描画して塗りつぶす。
・引数:
(X1,Y1)→ 描画開始座標(左上)
(X2,Y2)→ 描画終了座標(右下)
Color→ 塗りつぶし色
A void Draw7seg_(short X, short Y, unsigned char cPat, unsigned short col, unsigned short coloff)
・1桁の7segパターンを描画する関数
・引数:
(X,Y)→ 原点のX,Y座標(7segの左上座標)
cPat→ 表示パターン
bit0:a
bit1:b
bit2:c
bit3:d
bit4:e
bit5:f
bit6:g
col→ 表示色
coloff→ 消灯色
B const unsigned char font7seg[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#define PITCH7SEG 18
void Draw7seg(short X, short Y, unsigned short Value, unsigned char cColum, unsigned short col, unsigned short coloff)
・最大5桁の7segパターンを描画する関数
・引数:
(X,Y)→ 原点のX,Y座標(7segの左上座標)
Value→ 7セグに表示したい数値を、10進で指定
cColum→ 表示桁数 最大5桁まで
col→ 表示色
■ 2018.3.14
・ソース書上げ、HEX書込みOK
デバッグ開始だが、まずは駄目。
スタートメッセージはOKだが、Fill Boxが上手く行ってないようで、セグメントが塗りつぶされない感じ。
ドットは打っている。
これはイージーミスが原因だった。
ドット描画関数を使っているが、オリジナルと原点位置の考えが逆と思い込んでいた。
素直にオリジナルと同じ座標指定にすれば良かっただけである。
まずは"999"3桁を表示させてみた。
・次にこのページ冒頭にある写真の通り、16進数の7セグパターンを全て表示させてみた。
・さらに温湿度・気圧表示のデモ画面を表示させてみた。(これも冒頭の写真を参照のこと。)
<関数の使い方で気が付いた点>
@ 数値'0'を、頭に表示する時は、表示文字桁数=1にして、Value=0を指定。
或いは、cPat=0x3Fとして、Draw7seg_関数を実行。
さらに、Value=1234として、表示文字桁数=5に指定すると、5桁目(頭)に、0サプレスされる。
A 数字以外の表示パターン(今回の例では、A〜F)を表示する時は、Draw7seg_関数を使用。
<回路図>
・こちらから、どうぞ→ PIC32MX370F汎用実験基板
<最終ソース>
・こちらから、どうぞ→ QVGA_7SEG_DISP_TEST.c
///
QVGAライブラリ
colorlcd_libPIC32MXVH_v2.c
colorlcd_libPIC32MXVH_v2.h
///
アスキーフォント
ASCII12dot.h (12x12dot)
← 実験テーマ1に戻る TOP PAGEに戻る 実験テーマ105へ →