目次>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 ; =========================== ここまで ===============================