実験の目的
7セグメント表示器は、主に数値データ等を表示するために用いられる。ここでは、7セグメント表示器に「0123」の数字を表示する。
実験回路の結線
ここではCPUボードと7セグメント表示ボードを用いる。これらを表5のように接続する。また接続の様子を図5-1に示す。
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の結線
プログラム
以下のプログラムより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セグメント表示テストプログラム
応用
- 点灯パターンを変えてみなさい。また、数字以外のパターンも表示してみなさい。
- スキャン時間を変化させてみなさい。また、極端に遅くした場合の点灯の様子を確かめなさい。