目次>5章 第2ステップ(色々な実験)>(16)7セグメントLEDを使う(3桁固定数字) >ソース1
7セグメントLEDを使う(3桁固定数字)(ソース1)
更新日2008.2.3
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ==============================
; CLOCK 20MHz
; 7セグメントLED×3の制御(カソードコモン)
; 各桁の表示を1秒毎に切り替える。表示文字は、左から123
; PORTB 7セグメントLED(A〜G,DP)
; RA0 2SC1815(7セグ#3の選択)
; RA1 2SC1815(7セグ#2の選択)
; RA2 2SC1815(7セグ#1の選択)
;
;
LIST P=PIC16F84A ; LIST宣言で使用するPICを16F84Aと定義する。
INCLUDE P16F84A.INC ; 設定ファイルp16f84a.incを読み込む。
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
CBLOCK 0Ch
C02mS ; 0.2mSカウンタ
C5mS ; 5mSカウンタ
C1S ; 1Sカウンタ
ENDC
ORG 0
CLRF PORTA
BSF STATUS,RP0 ;■バンク1に切替え
CLRF TRISB ;RB0-7は出力
MOVLW 018h
MOVWF TRISA ;RA0,1,2は出力
BCF STATUS,RP0 ;■バンク0に切替え
; ============================================================
main
CLRF PORTB ;PORTBを一旦0にする(7セグの全セグメントを消灯)
MOVLW 04h ;
MOVWF PORTA ;RA2のみON(7セグの3桁目(一番左)を表示)
MOVLW 06h ;
MOVWF PORTB ;7セグに'1'を表示
CALL T1S ;1秒待つ
CLRF PORTB ;PORTBを一旦0にする(7セグの全セグメントを消灯)
MOVLW 02h ;
MOVWF PORTA ;RA1のみON(7セグの2桁目(真ん中)を表示)
MOVLW 05Bh ;
MOVWF PORTB ;7セグに'2'を表示
CALL T1S ;1秒待つ
CLRF PORTB ;PORTBを一旦0にする(7セグの全セグメントを消灯)
MOVLW 01h ;
MOVWF PORTA ;RA0のみON(7セグの1桁目(一番右)を表示)
MOVLW 04Fh ;
MOVWF PORTB ;7セグに'3'を表示
CALL T1S ;1秒待つ
GOTO main
; ============================================================
; << 1S待つサブルーチン >>
T1S
MOVLW d'200'
MOVWF C1S ; ループ回数として200をセット)
T1SLP CALL T5mS ; 5mS待つ
DECFSZ C1S,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T1SLP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 5mS待つサブルーチン >>
T5mS
MOVLW d'25'
MOVWF C5mS ; ループ回数として25をセット)
T5mLP CALL T02mS ; 0.2mS待つ
DECFSZ C5mS,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T5mLP
RETURN ; このサブルーチン呼出し元に戻る
; << 0.2mS待つサブルーチン >>
T02mS
MOVLW d'249'
MOVWF C02mS ; ループ回数として249をセット
T02mLP NOP ; 何もせず1サイクル消費
DECFSZ C02mS,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T02mLP
RETURN ; このサブルーチン呼出し元に戻る
END
; =========================== ここまで ===============================