PIC18Fxx2のデータシート
私が使っている7セグ関連のデータシートはこちらから入手できます
編集(2013/15/4): 以下のコードは PORTD の命令語です
ldig SET b'00001000' ;for rght digit
rdig SET b'00000100' ;for left digit
コードが最初に実行されるときの TRISB、TRISD、PORTB、および PORTD の命令語
CLRF TRISB ;port B as output
CLRF TRISD ;port D as output
CLRF PORTD ;clear port D not to select any digit
SETF PORTB ;set port B to off all segments
アセンブリを使用して、2 つの 7 セグ LED ディスプレイに異なる 2 つの数字を表示させたいと考えています。以下にリストされているコードを試してみましたが、うまくいきません。注: rdig = 右パネル、ldig = 左パネル、disp1 は 1 など。
loop MOVFF disp1, PORTB
MOVLW rdig ;select only the left display
MOVWF PORTD ;unit to be on
MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
bra loop
出力は 81 (7 セグメント ディスプレイ上) であるはずですが、数字は何も表示されません。各パネルには、ある種の薄暗い光だけが現れます。ただし、コードは、7 セグメント ディスプレイの両側に 1 つの数字のみを表示しようとしている場合に機能します。
loop MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
bra loop
編集: 以下のように、TMR0N (b'00000000' 命令語、tmrL = FF、tmrH = FB) を使用して小さな遅延 (2 マイクロ秒) を各数値表示要求に追加しようとしましたが、右側のパネルに数値 1 のみが表示されます。
loop MOVFF disp1, PORTB
MOVLW rdig ;select only the left display
MOVWF PORTD ;unit to be on
call delay
MOVFF disp8, PORTB
MOVLW ldig ;select only the left display
MOVWF PORTD ;unit to be on
call delay
bra loop
TMR0Nの命令設定
initwrd SET 0x00
tmrH SET 0xFF
tmrL SET 0xFB