目次
前
次
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進数のパターンを
付加するだけで、目的のコードを生成
できます。
目的のコードだけを取り出す場合には
パイプを利用して、フィールドを指定
します。
目次
前
次