実験の目的

7セグメント表示器は、主に数値データ等を表示するために用いられる。ここでは、7セグメント表示器に「0123」の数字を表示する。

実験回路の結線

ここではCPUボードと7セグメント表示ボードを用いる。これらを表5のように接続する。また接続の様子を図5-1に示す。

表5 実験5の接続端子
CPUボード +5V GND RA0 RA1 RA2 RA3
7セグメント
表示ボード
+5V GND 7seg0 7seg1 7seg2 7seg3
CPUボード RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
7セグメント
表示ボード
a b c d e f g Dp

図5-1

図5-1 実験5の結線


プログラム

以下のプログラムよりHEXファイルを作成し、PICにプログラムせよ。

;
;               実験5 7セグメント表示テストプログラム
;
; CONFIG1
 __CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB0 & _CP_OFF
; CONFIG2
 __CONFIG _CONFIG2, _FCMEN_ON & _IESO_ON

                list            p=16F87
                #include        <p16F87.inc>

                ORG             0x000           ; リセットベクタを 0番地に指定

                BSF             STATUS,RP0      ; STATUSのビットPR0をセット(BANK 1)
                CLRF            TRISA           ; Aポートを全て出力に設定
                CLRF            TRISB           ; Bポートを全て出力に設定

                BCF             STATUS,RP0      ; STATUSのビットPR0をセット(BANK 0)

COUNT1          EQU             0x20
COUNT2          EQU             0x21

PAT0            EQU             B'00111111'     ; '0'の点灯パターン定義
PAT1            EQU             B'00000110'     ; '1'の点灯パターン定義
PAT2            EQU             B'01011011'     ; '2'の点灯パターン定義
PAT3            EQU             B'01001111'     ; '3'の点灯パターン定義
PAT4            EQU             B'01100110'     ; '4'の点灯パターン定義
PAT5            EQU             B'01101101'     ; '5'の点灯パターン定義
PAT6            EQU             B'01111101'     ; '6'の点灯パターン定義
PAT7            EQU             B'00100111'     ; '7'の点灯パターン定義
PAT8            EQU             B'01111111'     ; '8'の点灯パターン定義
PAT9            EQU             B'01101111'     ; '9'の点灯パターン定義
PATA            EQU             B'01110111'     ; 'A'の点灯パターン定義
PATB            EQU             B'01111100'     ; 'B'の点灯パターン定義
PATC            EQU             B'00111001'     ; 'C'の点灯パターン定義
PATD            EQU             B'01011110'     ; 'D'の点灯パターン定義
PATE            EQU             B'01111001'     ; 'E'の点灯パターン定義
PATF            EQU             B'01110001'     ; 'F'の点灯パターン定義


LOOP0           MOVLW           PAT0            ; Wレジスタに'0'の表示パターンを転送
                MOVWF           PORTB           ; Wレジスタの値をBポートに転送
                MOVLW           B'00001'        ; WレジスタにB'00001'を転送
                MOVWF           PORTA           ; Wレジスタの値をAポートに転送
                CALL            WAIT
;
                MOVLW           PAT1            ; Wレジスタに'1'の表示パターンを転送
                MOVWF           PORTB           ; Wレジスタの値をBポートに転送
                MOVLW           B'00010'        ; WレジスタにB'00010'を転送
                MOVWF           PORTA           ; Wレジスタの値をAポートに転送
                CALL            WAIT
;
                MOVLW           PAT2            ; Wレジスタに'2'の表示パターンを転送
                MOVWF           PORTB           ; Wレジスタの値をBポートに転送
                MOVLW           B'00100'        ; WレジスタにB'00100'を転送
                MOVWF           PORTA           ; Wレジスタの値をAポートに転送
                CALL            WAIT
;
                MOVLW           PAT3            ; Wレジスタに'3'の表示パターンを転送
                MOVWF           PORTB           ; Wレジスタの値をBポートに転送
                MOVLW           B'01000'        ; WレジスタにB'01000'を転送
                MOVWF           PORTA           ; Wレジスタの値をAポートに転送
                CALL            WAIT
;
                GOTO            LOOP0           ; ラベルLOOP0へジャンプ

;               無駄時間待ち処理 WAIT

WAIT            MOVLW           0xFF            ; Wレジスタに0xFFを転送(スキャン時間調整)
                MOVWF           COUNT1          ; COUNT1にWレジスタの内容を転送
LOOP1           CALL            WAIT1           ; WAIT1をサブルーチンコール
                DECFSZ          COUNT1,F        ; COUNT1を減算してCOUNT1に格納
                GOTO            LOOP1           ; COUNT1が0でなければ繰り返す
                RETURN                          ; COUNT1が0になったら戻る。

WAIT1           MOVLW           0x10            ; Wレジスタに0x10を転送(スキャン時間調整)
                MOVWF           COUNT2          ; COUNT2にWレジスタの内容を転送
LOOP2           NOP                             ; 1命令サイクル消費
                DECFSZ          COUNT2,F        ; COUNT2を減算してCOUNT2に格納
                GOTO            LOOP2           ; COUNT2が0でなければ繰り返す
                RETURN                          ; COUNT2が0になったら戻る。
                END

List.3 7セグメント表示テストプログラム

応用

  1. 点灯パターンを変えてみなさい。また、数字以外のパターンも表示してみなさい。
  2. スキャン時間を変化させてみなさい。また、極端に遅くした場合の点灯の様子を確かめなさい。