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