- 締切済み
PICアセンブラで10進数を2進数に変換するプログラムを教えて欲しい
10進数のデータを7セグLEDで表示させたいのですが、まずは2進数にしないと表示出来ないみたいなので色々インターネットで調べているのですが、残念ながらPICアセンブラ言語ではどこにもそれに関わるものが掲載されていません。 どなたか教えてもらえないでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DT200
- ベストアンサー率38% (63/164)
> すみません。最後の「テーブルの先頭アドレス」というのがどれを示すのか理解出来ません。 具体的に今あるコードを示してもらえばアドバイスは可能かと... > 現在6桁の数字を7セグ表示しようとしていて、各桁のデータは「KETA1」から「KETA6」という名前で管理しています。 と言う事は、7Segはダイナミック・ドライブで6桁を制御する。で良いですか? 以下に、ちょうど良い回路図があるのでそれで説明します。 http://www37.tok2.com/home/aoijf2/ipsum336.html BTの使い方がこれで良いのか不安ですが、こんな感じで表示パタンを定義します。 DOTPTN BT B'11111100' ; 0 BT B'01100000' ; 1 BT B'11011010' ; 2 BT B'11110010' ; 3 BT B'01100110' ; 4 BT B'10110110' ; 5 BT B'10111110' ; 6 BT B'11100100' ; 7 BT B'11111110' ; 8 BT B'11110110' ; 9 digit100 equ 20h digit10 equ 21h digit1 equ 22h で、それぞれに6,3,9は入っていたとして、 RA4がHiだとTR1がonになりcom1(百の位)に電流が流れ、同様にRA3はcom2(十の位)、 RA2はcom3(一の位)に電流が流れる。 まず百の位を表示するには、RA4=1,RA3=0,RA2=0として、'6'を表示するには DOTPTN + 6 のデータ(B'10111110')をPB0~7に出力する。すると、7segの a,c,d,e,f,gの6つのセグメントが点灯します。 なお、参考の回路図を上のテーブルのピンアサインは違うので注意。 7seg PIC ---- --- a RB7 b RB6 c RB5 d RB4 e RB3 f RB2 g RB1 Dp RB0 同等に十の位はRA4=0,RA3=1,RA2=1として、DOTPTN+十の位のデータをPB0~7に出力する。 これを百→十→一→百→十と連続で行えば、目にはすべての桁が表示されているように 見えます。
- DT200
- ベストアンサー率38% (63/164)
PICのインストラクションセットを知らないので具体的な回答は無理ですが、考え方だけ。 データを2進数に変換するのではなく、あらかじめ0~9の パターンを定義してしまいます。 以下に示す条件で: (1) PICの出力がPIO(正論理) (2) 7segはカソードコモン PICと7segは次のように接続されているとする。 ちなみに、電気的にLEDをドライブできるか否かは無視してます。 PIC 7seg -------------- PIO7 - a PIO6 - b PIO5 - c PIO4 - d PIO3 - e PIO2 - f PIO1 - g PIO0 - Dot 0の場合は、a,b,c,d,e,fに相当するビットをセットするため 2進表記で 11111100(B)、16進表記で fc(H) となります。同様に 1: 01100000(b)、60(H) 2: 11011010(b)、ba(H) : 9: 11010110(b)、d6(H) と定義し1バイト長×10のテーブルを作ります。 表示するには、10進数で表示するデータがテーブルのオフセットとし、 テーブルの先頭アドレス+オフセットにあるデータがPIOに出力する パターンデータとなる。そのパターンデータをPIO出力すれば表示できます。
お礼
すみません。最後の「テーブルの先頭アドレス」というのがどれを示すのか理解出来ません。 現在6桁の数字を7セグ表示しようとしていて、各桁のデータは「KETA1」から「KETA6」という名前で管理しています。 プログラムの初期設定で「KETA1 EQU 20H」とか書いていますがここの部分なのか、またこれならアドレスは何になってデータを一緒に呼び出して出力させる方法も分かりません。 無知な者で申し訳ありません。その辺りも教えてもらえないでしょうか。
お礼
ちょっと苦労しましたが表示が出来る様になりました。有難う御座います。