;********************************************************************
;********************************************************************
;                LCD表示器 DM4004A by PIC----8bit入力
;			Without BusyCheck
;********************************************************************
;********************************************************************

;接続方法
;RA0=E1,RA1=R/W,RA2=RS,RA3=E2
;RB0=DB0,RB1=DB1,~~~,RB7=DB7(ピン配列と逆になっているので注意!)
;OSC=4MHz
;********************************************************************
        LIST        P=PIC16F84    ;
        INCLUDE     "P16f84.inc"  ;標準ヘッダ定義ファイル
;********************************************************************

TIMCNT  EQU     0CH             ;タイマ用カウンタ
TIM5CNT EQU     0DH             ;タイマ用カウンタ
TIM1CNT EQU     0EH             ;タイマ用カウンタ
LCDDT   EQU     0FH             ;LCD表示データ格納
LCDINST EQU     010H            ;LCDインストラクション格納

        ORG     0               ;Reset Start

;********************************************************************
;             メインルーチン
;********************************************************************

MAIN                            ;PICのInitialize 、ポート初期化(全ポートを"0"状態に)
        BSF     STATUS,RP0      ;バンク1へ切替
	CLRF	TRISA		;ポートAを出力モードに設定
        CLRF	TRISB           ;ポートBを出力モードに設定
        BCF     STATUS,RP0      ;バンク0に戻す     
        MOVLW   B'00000000'     ;初期出力
        MOVWF   PORTA
        MOVLW   B'00000000'     ;初期出力
        MOVWF   PORTB

;********************************************************************
;LCDモジュールの初期化
;********************************************************************
;-----------------------------------手順-----------------------------
;1.電源ON
;2.電源立ち上がりから15ms待ち
;3.BUSYフラグチェックせずに
; [30H書き込み]−[4.1ms待ち]−[30H書き込み]−[100μsec待ち]-[30H書き込み]
;4.ファンクションセット(今回:8ビット 2行 5×7ドット)
;5.表示クリア
;6.エントリーモード
;7.表示ON
;--------------------------------------------------------------------
INITIALIZE
        CALL    TIM5            ;まず15msec以上待ち(TIM5は約5msec)
        CALL    TIM5
        CALL    TIM5
        CALL    TIM5 
        MOVLW   030H
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをWに
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,0         ;E1
	  CALL	TIM04
        BCF     PORTA,0
        BSF     PORTA,3         ;E2
	  CALL	TIM04
        BCF     PORTA,3

        CALL    TIM5            ;4.1msec以上待ち
        MOVLW   030H
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをWに
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,0         ;E1
	  CALL	TIM04
        BCF     PORTA,0
        BSF     PORTA,3         ;E2
	  CALL	TIM04
        BCF     PORTA,3

        CALL    TIM04           ;100μsec以上待ち(TIM04は約0.4msec)
        MOVLW   030H
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをWに
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,0         ;E1
	  CALL	TIM04
        BCF     PORTA,0
        BSF     PORTA,3         ;E2
	  CALL	TIM04
        BCF     PORTA,3

        CALL    TIM04
        MOVLW   038H            ;Function Set 8ビット 2行 5×7ドット
        CALL    LCDCMD
        MOVLW   01H             ;表示クリア
        CALL    LCDCMD        
        MOVLW   06H             ;エントリーモード                
        CALL    LCDCMD
        MOVLW   0CH             ;表示ON
        CALL    LCDCMD
;--------------------------------------------------------------------       
;文字書き込み(ループ)
;--------------------------------------------------------------------
;1LINE "Wellcome to SANTECH!"
;2LINE "ヨウコソ! カフ"シキカ"イシヤ サンテツク ヘ"
;3LINE "We are specializing in manufacturing LCD"
;4LINE "module(LCM) and LCD panel    ISO9001:1994"

CHR_WRITE
        CALL    LCDCLR          ;表示クリア
        CALL    TIM5
        CALL    WELLCOME
        CALL    TIM5
        CALL    SANTECH
        CALL    TIM5
	 CALL	INTRO1
        CALL    TIM5
	 CALL	INTRO2
        CALL    TIM1S
	 CALL	TIM1S
	 CALL	TIM1S
	 CALL	TIM1S
	 CALL	TIM1S
	 GOTO	CHR_WRITE
	

;********************************************************************
              ;サブルーチン
;********************************************************************
WELLCOME                          ;1LINE "Wellcome to SANTECH!"
        CALL    TIM5
	 MOVLW	8AH		;LINE1,POSITION11
	 CALL	LCDCMD1
        CALL    TIM5
        MOVLW   'W'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'l'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'l'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'c'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'o'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'm'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   't'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'o'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'S'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'A'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'N'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'T'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'E'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'C'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'H'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   '!'
        CALL    LCDDTW1
        CALL    TIM5
        RETURN
SANTECH			;2LINE "ヨウコソ! カフ"シキカ"イシヤ サンテツク ヘ"
        CALL    TIM5
	 MOVLW	0C7H		;LINE1,POSITION11
	 CALL	LCDCMD1
        CALL    TIM5
        MOVLW   'ヨ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'ウ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'コ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'ソ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   '!'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'カ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'フ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   B'11011110'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'シ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'キ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'カ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   B'11011110'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'イ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'シ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   B'10101100'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'サ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'ン'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'テ'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   B'10101111'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'ク'
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW1
        CALL    TIM5
        MOVLW   'ヘ'
        CALL    LCDDTW1
        CALL    TIM5
	RETURN

INTRO1				;3LINE "We are specializing in manufacturing LCD"
        CALL    TIM5
	 MOVLW	080H
	 CALL	LCDCMD2
        CALL    TIM5
        MOVLW   'W'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'r'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   's'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'p'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'c'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'i'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'l'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'i'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'z'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'i'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'g'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'i'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'm'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'u'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'f'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'c'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   't'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'u'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'r'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'i'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'g'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'L'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'C'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'D'
        CALL    LCDDTW2
        CALL    TIM5
	RETURN

INTRO2					;4LINE "module(LCM) and LCD panel    ISO9001:1994"


        CALL    TIM5
	 MOVLW	0C0H
	 CALL	LCDCMD2
        CALL    TIM5
        MOVLW   'm'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'o'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'd'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'u'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'l'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '('
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'L'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'C'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'M'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ')'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'd'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'L'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'C'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'D'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'p'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'a'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'n'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'e'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'l'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ' '
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'I'
        CALL    LCDDTW2
        CALL    TIM5

        MOVLW   'S'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   'O'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '9'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '0'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '0'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '1'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   ':'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '1'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '9'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '9'
        CALL    LCDDTW2
        CALL    TIM5
        MOVLW   '4'
        CALL    LCDDTW2
        CALL    TIM5
	RETURN
;---------------------------------------------------------------------------
;LCDへデータ書き込みのサブルーチン
;----------------------------------------------------------------------------
LCDDTW1                          ;IC1,Wに書き込まれたデータ(1文字)を表示
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをW
        BSF     PORTA,2         ;RSをデータに
        BSF     PORTA,0         ;E1
	 CALL	TIM04
        BCF     PORTA,0
        RETURN

LCDDTW2                         ;IC2,Wに書き込まれたデータ(1文字)を表示
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをW
        BSF     PORTA,2         ;RSをデータに
        BSF     PORTA,3         ;E2
	 CALL	TIM04
        BCF     PORTA,3
        RETURN
;---------------------------------------------------------------------------
;LCDへインストラクション書き込み
;---------------------------------------------------------------------------
LCDCMD                          ;IC1,IC2,Wレジスタに書き込まれたコマンドをLCDへ
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをW
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,0         ;E1
	CALL	TIM04
        BCF     PORTA,0
        BSF     PORTA,3         ;E2
	CALL	TIM04
        BCF     PORTA,3
        RETURN

LCDCMD1                          ;IC1,Wレジスタに書き込まれたコマンドをLCDへ
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをW
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,0         ;E1
	CALL	TIM04
        BCF     PORTA,0
        RETURN

LCDCMD2                          ;IC2,Wレジスタに書き込まれたコマンドをLCDへ
        MOVWF   PORTB
        BCF     PORTA,1         ;R/WをW
        BCF     PORTA,2         ;RSをインストラクションに
        BSF     PORTA,3         ;E2
	 CALL	TIM04
        BCF     PORTA,3
        RETURN

;LCD表示クリア
LCDCLR                          
        MOVLW   01H
        CALL    LCDCMD
        RETURN

;タイマ        
TIM04                           ;約0.4mSECタイマ
        MOVLW   0FFH
        MOVWF   TIMCNT
TIMLP   NOP
        DECFSZ  TIMCNT,F
        GOTO    TIMLP
        RETURN
TIM5                            ;約5msecタイマ
        MOVLW   0DH
        MOVWF   TIM5CNT
TIM5LP  CALL    TIM04
        DECFSZ  TIM5CNT,F
        GOTO    TIM5LP
        RETURN
TIM1S				;約1secタイマ
        MOVLW	0C8H
        MOVWF	TIM1CNT
TIM1SLP CALL    TIM5
        DECFSZ  TIM1CNT,F
        GOTO    TIM1SLP
        RETURN
        
        END