[H8-ML(2919)] Re: C++での設計
From: 松園 敬二 <k-zono@xxxxxxxxxxxxxxxx>
Date: 2003年03月05日(水)21時18分43秒
こんばんは、まつぞの です。

丁度 GCC の C++ コンパイラを使って、7セグLED クラスを作って
遊んでいたところです(^^)

こんな感じです。

// DIP 型 7セグの LED 5 桁をダイナミック点灯させるクラス 
class Dip7seg{
public:
    Dip7seg();
    ~Dip7seg();
    void disp(long ldata); // long のデータを与えると LED に表示する
private:
    // long のデータを表示用のセグメントデータに変換する
    void convert(long ldata, seg_type* cdata);

    // long のデータを各桁のデータに分解する
  // ( convert() から呼ばれる )
    char calc_digit(long* pNum, long base);
};

# 実際にはもっとメンバがあるのですが、多少省略してあります。

LED を実際に点灯させるには、接続する I/O ポートのアドレス、
ダイナミック表示のスキャンスピードなどといったデータが
必要ですし、初期化処理としてポートの DDR を出力にする、
といった処理も必要です。

# 実は、上の例でも実際には ITU のタイマを利用していますし、
# I/O ポートを節約するためにシフトレジスタを使っているので
# ShiftRegister などという class も作っています 

C++ 的なところは、
 - このクラスを使って LED を点灯させるには、disp() に
   long のデータを与えるだけでよい。
   初期化処理や I/O ポートのアドレス、スキャン周期、などは
   気にしなくてよい
 - convert(), calc_digit() といった処理を private にしてあり
   このクラスの利用者には実装の詳細、ということで見えないように
   している

といったところでしょうか。 
長くなってしまったのでこのへんでやめておきます。
スレッド概略
[2849(R)](起点)
 └[2915(U)]
   └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]