目次

7セグメントLEDコードジェネレータ(AWK)

 7セグメントLEDは、表示器として利用される
 便利なLEDです。



 7セグメントは、独立したLEDが7個入っているので
 意味のある表示をするには、1と0の組合せが必要に
 なります。

  • '0' → (a,b,c,d,e,f,g) = (1,1,1,1,1,1,0)
  • '1' → (a,b,c,d,e,f,g) = (0,1,1,0,0,0,0)
  • '2' → (a,b,c,d,e,f,g) = (1,1,0,1,1,0,1)
  • '3' → (a,b,c,d,e,f,g) = (1,1,1,1,0,0,1)
  • '4' → (a,b,c,d,e,f,g) = (0,1,1,0,0,1,1)
  • '5' → (a,b,c,d,e,f,g) = (1,0,1,1,0,1,1)
  • '6' → (a,b,c,d,e,f,g) = (1,0,1,1,1,1,1)
  • '7' → (a,b,c,d,e,f,g) = (1,1,1,0,0,1,0)
  • '8' → (a,b,c,d,e,f,g) = (1,1,1,1,1,1,1)
  • '9' → (a,b,c,d,e,f,g) = (1,1,1,1,0,1,1)  C言語のように、2進数の表現をサポートして  いない場合、16進数や8進数に変換したコード  を指定しなければなりません。  2進数から16進数に変換して楽をするときは  スクリプト言語を利用するのが、お約束です。  Tcl/Tkを利用すると、セグメントaからgを  フィールドの$1から$7に対応させ、2倍  の値を加算すればよいでしょう。 BEGIN { FS = "," } { result = 0 for ( i = 7 ; i > 0 ; i-- ) { result = result * 2 + $i } printf("%s -> 0x%02X \n",$0,result) }  上のAWKスクリプトを利用して、2進数から  16進数に変換すると、次のようになります。  利用したテキストファイルの内容は、以下。 1,1,1,1,1,1,0 0,1,1,0,0,0,0 1,1,0,1,1,0,1 1,1,1,1,0,0,1 0,1,1,0,0,1,1 1,0,1,1,0,1,1 1,0,1,1,1,1,1 1,1,1,0,0,1,0 1,1,1,1,1,1,1 1,1,1,1,0,1,1  この場合、正論理で変換しています。  カソードコモンの7セグメントLEDであれば、正論理扱い  ですが、入手した7セグメントLEDがアノードコモンでは  負論理で扱います。  論理反転すればよいので、フィールドごとに  1と0を入れ替えた後、2倍し加算します。  フィールド値のデフォルトを1としておき  対象フィールド値が1のときは、0と置換  します。 BEGIN { FS = "," } { result = 0 for ( i = 7 ; i > 0 ; i-- ) { xx = 1 if ($i == 1) { xx = 0 } result = result * 2 + xx } printf("%s -> 0x%02X \n",$0,result) }  この方法で、16進数とすると以下。  8進数で表現したいときには、printfで  出力するときに、変換子を変えます。 printf("%s -> 0%03O \n",$0,result)  8進数表現は、次のようになります。  ここまでは、0から9の表現でしたが  AからFの場合、2進数のパターンを  付加するだけで、目的のコードを生成  できます。 目的のコードだけを取り出す場合には  パイプを利用して、フィールドを指定  します。

  • 目次

    inserted by FC2 system