● 実験テーマ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へ →