こんばんは、まつぞの です。
丁度 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 にしてあり
このクラスの利用者には実装の詳細、ということで見えないように
している
といったところでしょうか。
長くなってしまったのでこのへんでやめておきます。