;******************************************************************************************
;  7*6 パネルボード サンプル
;   Program Name : 
;   Programer    :
;   Create date  :  Version 1.0    H17.08.01
;   History      :
;******************************************************************************************
;    サンプルボード仕様
;  (0)Display
;     7 * 6 LED Board (OSC:20MHz)
;  (1)Descript I/O 
;     B0～B6     : LED (横列:*7) 
;     A0～A4,B7  : LED (縦列:*6)
;     A5         : None
;******************************************************************************************
	LIST	P=PIC16F88,ST=OFF,R=DEC
	INCLUDE	"P16F88.inc"	
;	__CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
	__CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC
	__CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF
;
LEDCHR	EQU	20H
LEDKET	EQU	21H
LEDSUU	EQU	22H
LEDLP	EQU	23H
LEDBASE	EQU	24H
LEDL0	EQU	25H
LEDL1	EQU	26H
LEDL2	EQU	27H
LEDL3	EQU	28H
LEDL4	EQU	29H
LEDL5	EQU	2AH
LEDSET	EQU	2BH
LEDRET	EQU	2CH
WTP001A EQU	2DH
WTP001B EQU	2EH
WTP001C EQU	2FH
;
	ORG	0
	GOTO	START
	ORG	4
	GOTO	START
START
; Bank0での設定
	BANKSEL	PORTA
	CLRF	PORTA
	CLRF	PORTB

; Bank1での設定
	BANKSEL	ANSEL
	MOVLW	B'00000000'	; 全てをDegitalに設定
	MOVWF	ANSEL	; Degital Inputに設定(Bank1)
	MOVLW	B'100000'
	MOVWF	TRISA	; PortAのI/O設定(Bank1)
	MOVLW	B'00000000'
	MOVWF	TRISB	; PortBのI/O設定(Bank1)
; Bank0に戻す
	BANKSEL	PORTA	

	CALL	DEMO02
	CALL	DEMO01
	CALL	DEMO03
MAIN
	CALL	DEMO01

	GOTO	MAIN

;******************************************************************************************
;   Function Name : TBL(LEDパターンテーブル群)
;   Disctiption   : 
;   Input         : 
;   Output        : 
;******************************************************************************************
TBL30
	ADDWF	PCL,F
;	(0)
	RETLW	B'00111110'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(1)
	RETLW	B'00000000'	; 0桁
	RETLW	B'01000010'	; 1桁
	RETLW	B'01111111'	; 2桁
	RETLW	B'01000000'	; 3桁
	RETLW	B'00000000'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(2)
	RETLW	B'01000010'	; 0桁
	RETLW	B'01100001'	; 1桁
	RETLW	B'01010001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'01000110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(3)
	RETLW	B'00100010'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(4)
	RETLW	B'00111100'	; 0桁
	RETLW	B'00100010'	; 1桁
	RETLW	B'00100001'	; 2桁
	RETLW	B'01111111'	; 3桁
	RETLW	B'00100000'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(5)
	RETLW	B'00101111'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110001'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(6)
	RETLW	B'00111110'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110010'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(7)
	RETLW	B'00000001'	; 0桁
	RETLW	B'00000001'	; 1桁
	RETLW	B'01110001'	; 2桁
	RETLW	B'00001001'	; 3桁
	RETLW	B'00000111'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(8)
	RETLW	B'00110110'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(9)
	RETLW	B'00100110'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(A)
	RETLW	B'01111110'	; 0桁
	RETLW	B'00010001'	; 1桁
	RETLW	B'00010001'	; 2桁
	RETLW	B'00010001'	; 3桁
	RETLW	B'01111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(B)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(C)
	RETLW	B'00111110'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00100010'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(D)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(E)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'01001001'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(F)
	RETLW	B'01111111'	; 0桁
	RETLW	B'00001001'	; 1桁
	RETLW	B'00001001'	; 2桁
	RETLW	B'00001001'	; 3桁
	RETLW	B'00001001'	; 4桁
	RETLW	B'00000000'	; 5桁
TBL10
	ADDWF	PCL,F
;	(0)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01111111'	; 1桁
	RETLW	B'01111111'	; 2桁
	RETLW	B'01111111'	; 3桁
	RETLW	B'01111111'	; 4桁
	RETLW	B'01111111'	; 5桁
;	(1)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'01000001'	; 4桁
	RETLW	B'01111111'	; 5桁
;	(2)
	RETLW	B'00000000'	; 0桁
	RETLW	B'00000000'	; 1桁
	RETLW	B'00000000'	; 2桁
	RETLW	B'00000000'	; 3桁
	RETLW	B'00000000'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(3)
	RETLW	B'00000100'	; 0桁
	RETLW	B'00000010'	; 1桁
	RETLW	B'01111111'	; 2桁
	RETLW	B'00000010'	; 3桁
	RETLW	B'00000100'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(4)
	RETLW	B'00010000'	; 0桁
	RETLW	B'00100000'	; 1桁
	RETLW	B'01111111'	; 2桁
	RETLW	B'00100000'	; 3桁
	RETLW	B'00010000'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(5)
	RETLW	B'00100010'	; 0桁
	RETLW	B'00010100'	; 1桁
	RETLW	B'00001000'	; 2桁
	RETLW	B'00010100'	; 3桁
	RETLW	B'00100010'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(6)
	RETLW	B'00011110'	; 0桁
	RETLW	B'00100001'	; 1桁
	RETLW	B'00100001'	; 2桁
	RETLW	B'00100001'	; 3桁
	RETLW	B'00011110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(7)
	RETLW	B'00111110'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(8)
	RETLW	B'00110110'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(9)
	RETLW	B'00100110'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(A)
	RETLW	B'01111110'	; 0桁
	RETLW	B'00010001'	; 1桁
	RETLW	B'00010001'	; 2桁
	RETLW	B'00010001'	; 3桁
	RETLW	B'01111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(B)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'00110110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(C)
	RETLW	B'00111110'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00100010'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(D)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01000001'	; 1桁
	RETLW	B'01000001'	; 2桁
	RETLW	B'01000001'	; 3桁
	RETLW	B'00111110'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(E)
	RETLW	B'01111111'	; 0桁
	RETLW	B'01001001'	; 1桁
	RETLW	B'01001001'	; 2桁
	RETLW	B'01001001'	; 3桁
	RETLW	B'01001001'	; 4桁
	RETLW	B'00000000'	; 5桁
;	(F)
	RETLW	B'01111111'	; 0桁
	RETLW	B'00001001'	; 1桁
	RETLW	B'00001001'	; 2桁
	RETLW	B'00001001'	; 3桁
	RETLW	B'00001001'	; 4桁
	RETLW	B'00000000'	; 5桁

;******************************************************************************************
;   Function Name : DEMO01
;   Disctiption   : 電源投入時のデモ(1)
;   Input         : 
;   Output        : 
;******************************************************************************************
DEMO01

	MOVLW	H'39'	; '9'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'38'	; '8'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'37'	; '7'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'36'	; '6'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'35'	; '5'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'34'	; '4'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'33'	; '3'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'32'	; '2'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'31'	; '1'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'30'	; '0'
	CALL	LEDDSET
	CALL	LEDDSP
;
	RETURN

;******************************************************************************************
;   Function Name : DEMO02
;   Disctiption   : 電源投入時のデモ(2)
;   Input         : 
;   Output        : 
;******************************************************************************************
DEMO02
	MOVLW	H'3F'	; 'F'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'3E'	; 'E'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'3D'	; 'D'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'3C'	; 'C'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'3B'	; 'B'
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'3A'	; 'A'
	CALL	LEDDSET
	CALL	LEDDSP

	RETURN

;******************************************************************************************
;   Function Name : DEMO03
;   Disctiption   : 電源投入時のデモ(3)
;   Input         : 
;   Output        : 
;******************************************************************************************
DEMO03
	MOVLW	H'10'	; ''
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'11'	; ''
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'12'	; ''
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'13'	; ''
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'14'	; ''
	CALL	LEDDSET
	CALL	LEDDSP
;
	MOVLW	H'15'	; ''
	CALL	LEDDSET
	CALL	LEDDSP

	MOVLW	H'16'	; ''
	CALL	LEDDSET
	CALL	LEDDSP

	RETURN
;******************************************************************************************
;   Function Name : LEDDSP
;   Disctiption   : LEDに0.5秒間文字を表示する
;   Input         : W:キャラクターコード
;   Output        : なし
;******************************************************************************************
LEDDSP
	CLRF	PORTA
	BCF	PORTB,7
	MOVLW	H'50'	; 160回ループする(約0.5秒; 0.001秒*6行*80回ループ)
	MOVWF	LEDLP
LEDDSP1
;  (1)1行目を表示
	MOVFW	LEDL0
	MOVWF	PORTB
	BSF	PORTA,0
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTA,0
;  (2)2行目を表示
	MOVFW	LEDL1
	MOVWF	PORTB
	BSF	PORTA,1
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTA,1
;  (3)3行目を表示
	MOVFW	LEDL2
	MOVWF	PORTB
	BSF	PORTA,2
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTA,2
;  (4)4行目を表示
	MOVFW	LEDL3
	MOVWF	PORTB
	BSF	PORTA,3
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTA,3
;  (5)5行目を表示
	MOVFW	LEDL4
	MOVWF	PORTB
	BSF	PORTA,4
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTA,4
;  (6)6行目を表示
	MOVFW	LEDL5
	MOVWF	PORTB
	BSF	PORTB,7
	CALL	WATP001	; 0.001秒間待つ
	BCF	PORTB,7
;
	DECFSZ	LEDLP,F
	GOTO	LEDDSP1
	RETURN

;******************************************************************************************
;   Function Name : WATP001
;   Disctiption   : タイマー関数(0.001秒待つ)
;   Input         : なし
;   Output        : なし
;   Descript      : 20MHzのOSC用(200回[10]*10回)
;******************************************************************************************
WATP001
	MOVLW	H'02'
	MOVWF	WTP001B
WATP001B
	MOVLW	H'C8'
	MOVWF	WTP001A
WATP001A
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	WTP001A,F
	GOTO	WATP001A
	DECFSZ	WTP001B,F
	GOTO	WATP001B

	RETURN

;******************************************************************************************
;   Function Name : LEDDSET
;   Disctiption   : LEDに表示する文字フォントを得る
;   Input         : W:キャラクターコード
;   Output        : LEDL0～LEDL5
;******************************************************************************************
LEDDSET
;   1.変数作成
;     (1)変数作成
	MOVWF	LEDCHR		; キャラクターコード退避
;
	ANDLW	B'11110000'
	MOVWF	LEDKET		; 桁数+0 を得る
;
	MOVFW	LEDCHR
	ANDLW	B'00001111'
	MOVWF	LEDSUU		; 0+数 を得る	
;     (2)テーブルのベースアドレスを作成
	MOVFW	LEDSUU
	MOVWF	LEDLP
	CLRF	LEDBASE
	XORLW	H'00'
	BTFSC	STATUS,Z
	GOTO	LEDGETINI1
LEDGETINI0
	MOVLW	H'06'
	ADDWF	LEDBASE,F
	DECFSZ	LEDLP,F
	GOTO	LEDGETINI0
LEDGETINI1
;   2.テーブルより変数を設定する
;     (1)0桁変数
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL0
;     (2)1桁変数
	MOVLW	H'01'
	ADDWF	LEDBASE,F
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL1
;     (3)2桁変数
	MOVLW	H'01'
	ADDWF	LEDBASE,F
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL2
;     (4)3桁変数
	MOVLW	H'01'
	ADDWF	LEDBASE,F
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL3
;     (5)4桁変数
	MOVLW	H'01'
	ADDWF	LEDBASE,F
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL4
;     (6)5桁変数
	MOVLW	H'01'
	ADDWF	LEDBASE,F
	MOVFW	LEDBASE
	CALL	TBLSEL
	MOVFW	LEDRET
	MOVWF	LEDL5
	RETURN

;******************************************************************************************
;   Function Name : TBLSEL
;   Disctiption   : LEDテーブルを振り分けてCALLする
;   Input         : W:加算アドレス
;   Output        : LEDRET:ドットパターン
;******************************************************************************************
TBLSEL
	MOVWF	LEDSET
TBLSEL10
	MOVFW	LEDKET
	XORLW	H'10'
	BTFSS	STATUS,Z
	GOTO	TBLSEL20
	MOVFW	LEDSET
	CALL	TBL10
	MOVWF	LEDRET	
	RETURN
TBLSEL20
TBLSEL30
	MOVFW	LEDKET
	XORLW	H'30'
	BTFSS	STATUS,Z
	GOTO	TBLSEL40
	MOVFW	LEDSET
	CALL	TBL30
	MOVWF	LEDRET	
	RETURN
TBLSEL40
	RETURN

	END
