2021年9月17日金曜日

プログラマ向け逆ポーランド電卓(その2、32ビットバイナリの表示)

昨日の課題の32ビットバイナリ表示 を何とかしようと試してみました。20桁のキャラクタLCDに32ビット分のバイナリ値を表示します。キースイッチで上位16ビットと下位16ビットを切り替えるとか、32ビットバイナル表示のときは2行に表示するとかが一般的かと思います。

でも、ちょっと思いついたトリッキーな方法で表示してみたら、それっぽく見えたのでこれにします。

普通の10進数表示です。まだ、符号付32ビット演算のみ。

16進数表示にするとこんな感じ。上位2バイトがゼロのときは非表示ですが、演算バイト数(byte, word, doubleword)を指定できるようにしたら、すべてのバイトを表示するようにするつもり。

そして、これが2進数の32ビット表示です。16ビットのときは通常の0/1文字を使いますが、32ビット表示時は一文字に2ビットを詰め込んでいます。

このLCDモジュールは、ユーザが表示文字を定義できる機能があるので一文字分に、バイナリ値2文字を定義したら行けるのでは? と思い試してみました。定義できるフォントサイズは8x5ドットなので、'01', '10', '11' はなんとかなりますが、'00'はドットが足りません。無理やり'00'間の縦棒を共有にして以下のように定義してみました。

byte bin00[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b10101,
  0b10101,
  0b10101,
  0b11111,
  0b00000
};

これでもなんとか読めますね。

今日のところはここまで。
明日から連休なので多少は進捗するかと期待しています。台風が心配ですね。

0 件のコメント:

コメントを投稿