;********************************************************************
;********************************************************************
; 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