;********************************************************************
; LCD表示器
DM12864A by PIC
;********************************************************************
;接続方法
;RST=VDD(68 SERIES INTERFACE)
;RA0=RS(LOW:command,HIGH:data)
;RA1=R/W(HIGH:Read,LOW:Write)
;RA2=E
;RA3=CS1
;RA4=CS2
;RB0=D0,RB1=D1,~~~,RB7=D7
;--------------------------------------------------------------------
LIST P=PIC16F84
INCLUDE "P16f84.inc" ;標準ヘッダ定義ファイル
;--------------------------------------------------------------------
TIMCNT EQU 0CH ;タイマ用カウンタ
TIM5CNT EQU 0DH ;タイマ用カウンタ
TIM1CNT EQU 0EH ;タイマ用カウンタ
DAT EQU 0FH ;LCD表示データ格納
STUS EQU 10H ;LCDのステータス情報を格納
STORE EQU 11H ;Wレジスタ情報を格納
LINECNT EQU 12H ;カウンタ回数
YADCNT EQU 3FH ;Yアドレスのカウント用
ORG 0 ;Reset
Start
;--------------------------------------------------------------------
; メインルーチン
;--------------------------------------------------------------------
MAIN
PIC_INITIALIZE ;PICの初期化、ポート初期設定
BSF STATUS,RP0 ;バンク1へ切替
CLRF TRISA ;ポートAを出力モードに設定
CLRF TRISB ;ポートBを出力モードに設定
BCF STATUS,RP0 ;バンク0に戻す
MOVLW B'00000000' ;PORTA初期設定
MOVWF PORTA
MOVLW B'00000000' ;PORTB初期設定
MOVWF PORTB
;LCDの初期化
MOVLW B'11000000' ;Display Start Line=0
CALL CMD_IC1 ;IC1をDisplay
Start Line=0に設定
CALL CMD_IC2 ;IC2をDisplay
Start Line=0に設定
MOVLW B'00111111' ;Display ON
CALL CMD_IC1 ;IC1をDisplay
ONに設定
CALL CMD_IC2 ;IC2をDisplay
ONに設定
CALL CLEAR1 ;画面左側(IC1側)クリアー
CALL CLEAR2 ;画面右側(IC2側)クリアー
CALL EKIUE1 ;画面左上の「液」の上半分
CALL EKIST1 ;画面左上の「液」の下半分
CALL SHOUUE1 ;画面左上の「晶」の上半分
CALL SHOUST1 ;画面左上の「晶」の下半分
CALL EKIUE2 ;画面中央の「液」の上半分
CALL EKIST2 ;画面中央の「液」の下半分
CALL SHOUUE2 ;画面中央の「晶」の上半分
CALL SHOUST2 ;画面中央の「晶」の下半分
CALL EKIUE3 ;画面右下の「液」の上半分
CALL EKIST3 ;画面右下の「液」の下半分
CALL SHOUUE3 ;画面右下の「晶」の上半分
CALL SHOUST3 ;画面右下の「晶」の下半分
LOOP
NOP
GOTO LOOP
;--------------------------------------------------------------------
; サブルーチン
;--------------------------------------------------------------------
;Wレジスタの表示データー(8ドット分)をIC1又はIC2に書き込む
WRITE_1 ;IC1への書き込みコマンド
MOVWF PORTB ;Wレジスターの表示データーをPORTBへ出力
BSF PORTA,3 ;IC1選択
BCF PORTA,4
BSF PORTA,0 ;RS:HIGH
BCF PORTA,1 ;R/W:LOW
BSF PORTA,2 ;E:ACTIVE
BCF PORTA,2 ;E:NO
ACTIVE
BCF PORTA,3 ;ICの非選択にする
CALL BUSY1 ;BUSYチェック
RETURN
WRITE_2 ;IC2への書き込みコマンド
MOVWF PORTB ;Wレジスターの表示データーをPORTBへ出力
BSF PORTA,4 ;IC2選択
BCF PORTA,3
BSF PORTA,0 ;RS:HIGH
BCF PORTA,1 ;R/W:LOW
BSF PORTA,2 ;E:ACTIVE
BCF PORTA,2 ;E:NO
ACTIVE
BCF PORTA,4 ;ICの非選択にする
CALL BUSY2
RETURN
CMD_IC1 ;IC1へコマンド書き込み
MOVWF PORTB ;WレジスタのインストラクションコードをPORTBへ出力
BSF PORTA,3 ;IC1選択
BCF PORTA,4
BCF PORTA,0 ;RS:LOW
BCF PORTA,1 ;R/W:LOW
BSF PORTA,2 ;E:ACTIVE
BCF PORTA,2 ;E:NO
ACIVE
BCF PORTA,3 ;ICの非選択にする
CALL BUSY1 ;BUSYチェック
RETURN
CMD_IC2 ;IC2へコマンド書き込み
MOVWF PORTB ;WレジスタのインストラクションコードをPORTBへ出力
BSF PORTA,4 ;IC2選択
BCF PORTA,3
BCF PORTA,0 ;RS:LOW
BCF PORTA,1 ;R/W:LOW
BSF PORTA,2 ;E:ACTIVE
BCF PORTA,2 ;E:NO
ACTIVE
BCF PORTA,4 ;ICの非選択にする
CALL BUSY2 ;BUSYチェック
RETURN
;画面消去ルーチン
CLEAR1 ;左側(IC1側)
MOVLW B'10111000' ;Xアドレス0=PAGE0を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111001' ;Xアドレス1=PAGE1を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111010' ;Xアドレス2=PAGE2を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111011' ;Xアドレス3=PAGE3を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111100' ;Xアドレス4=PAGE4を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111101' ;Xアドレス5=PAGE5を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111110' ;Xアドレス6=PAGE6を指定
CALL CMD_IC1
CALL ERASE1
MOVLW B'10111111' ;Xアドレス7=PAGE7を指定
CALL CMD_IC1
CALL ERASE1
RETURN
CLEAR2 ;右側(IC2側)
MOVLW B'10111000' ;Xアドレス0=PAGE0を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111001' ;Xアドレス1=PAGE1を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111010' ;Xアドレス2=PAGE2を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111011' ;Xアドレス3=PAGE3を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111100' ;Xアドレス4=PAGE4を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111101' ;Xアドレス5=PAGE5を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111110' ;Xアドレス6=PAGE6を指定
CALL CMD_IC2
CALL ERASE2
MOVLW B'10111111' ;Xアドレス7=PAGE7を指定
CALL CMD_IC2
CALL ERASE2
RETURN
;画面消去ルーチン2
ERASE1 ;左側(IC1側)
MOVLW B'00000000' ;0を書き込み
CALL WRITE_1
DECFSZ YADCNT
GOTO ERASE1
RETURN
ERASE2 ;右側(IC2側)
MOVLW B'00000000' ;0を書き込み
CALL WRITE_2
DECFSZ YADCNT
GOTO ERASE2
RETURN
; **********「液」書き込みルーチン**********
EKIUE1
MOVLW B'10111000' ;Xアドレス0=PAGE0を指定(文字の上半分)
CALL CMD_IC1
MOVLW B'01000000' ;Yアドレス0(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'00100000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01000010' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10000100' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00011000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10001110' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'11001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_1
RETURN
EKIST1
MOVLW B'10111001' ;Xアドレス1=PAGE1を指定(文字の下半分)
CALL CMD_IC1
MOVLW B'01000000' ;Yアドレス0(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'11000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00110000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00001100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'11111111' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'01000101' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00101001' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00110010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'01001100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000011' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_1
RETURN
; **********「晶」書き込みルーチン**********
SHOUUE1
MOVLW B'10111000' ;Xアドレス0=PAGE0を指定(文字の上半分)
CALL CMD_IC1
MOVLW B'01010000' ;Yアドレス16(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_1
RETURN
SHOUST1
MOVLW B'10111001' ;Xアドレス1=PAGE1を指定(文字の下半分)
CALL CMD_IC1
MOVLW B'01010000' ;Yアドレス16(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
RETURN
; **********「液」書き込みルーチン2**********
EKIUE2
MOVLW B'10111011' ;Xアドレス3=PAGE3を指定(文字の上半分)
CALL CMD_IC1
MOVLW B'01110000' ;Yアドレス48(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'00100000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01000010' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10000100' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00011000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'10001110' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'11001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_1
RETURN
EKIST2
MOVLW B'10111100' ;Xアドレス4=PAGE4を指定(文字の下半分)
CALL CMD_IC1
MOVLW B'01110000' ;Yアドレス48(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC1
MOVLW B'11000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00110000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00001100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'11111111' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'01000101' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00101001' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00110010' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'01001100' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000011' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'10000000' ;「液」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_1
RETURN
; **********「晶」書き込みルーチン2**********
SHOUUE2
MOVLW B'10111011' ;Xアドレス3=PAGE3を指定(文字の上半分)
CALL CMD_IC2
MOVLW B'01000000' ;Yアドレス0(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
RETURN
SHOUST2
MOVLW B'10111100' ;Xアドレス4=PAGE4を指定(文字の下半分)
CALL CMD_IC2
MOVLW B'01000000' ;Yアドレス0(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
RETURN
; **********「液」書き込みルーチン3**********
EKIUE3
MOVLW B'10111110' ;Xアドレス6=PAGE6を指定(文字の上半分)
CALL CMD_IC2
MOVLW B'01100000' ;Yアドレス32(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'00100000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'01000010' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'10000100' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'10001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00011000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'10001110' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'01101000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'01001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'11001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00001000' ;「液」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「液」のデーター(上半分)
CALL WRITE_2
RETURN
EKIST3
MOVLW B'10111111' ;Xアドレス7=PAGE7を指定(文字の下半分)
CALL CMD_IC2
MOVLW B'01100000' ;Yアドレス32(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'11000000' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00110000' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00001100' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000010' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111111' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000100' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'10000010' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'01000101' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00101001' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00110010' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'01001100' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'10000011' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'10000000' ;「液」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「液」のデーター(下半分)
CALL WRITE_2
RETURN
; **********「晶」書き込みルーチン3**********
SHOUUE3
MOVLW B'10111110' ;Xアドレス6=PAGE6を指定(文字の上半分)
CALL CMD_IC2
MOVLW B'01110000' ;Yアドレス48(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01010100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'01111100' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(上半分)
CALL WRITE_2
RETURN
SHOUST3
MOVLW B'10111111' ;Xアドレス7=PAGE7を指定(文字の下半分)
CALL CMD_IC2
MOVLW B'01110000' ;Yアドレス48(Yアドレスの書き込みスタート位置)を指定
CALL CMD_IC2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_1
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'10010010' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'11111110' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
MOVLW B'00000000' ;「晶」のデーター(下半分)
CALL WRITE_2
RETURN
;**********LCD BUSYチェック**********
BUSY1 ;IC1のBUSY
CHECK
MOVWF STORE ;Wレジスタ内容をSTOREに一時保管
;PORTBを入力モードに変える
BSF STATUS,RP0 ;バンク1へ切替
MOVLW 0FFH ;ポートBを入力モードに設定
MOVWF TRISB
BCF STATUS,RP0 ;バンク0に戻す
BSF PORTA,3 ;IC1選択
BCF PORTA,4
BCF PORTA,0 ;Status
Read
BSF PORTA,3
BSF PORTA,1 ;E1
Active
BCF PORTA,1
MOVF PORTB,W
MOVWF STUS ;LCDのStatus情報をSTUSに格納
BTFSC STUS,7 ;BUSYフラグチェック
GOTO BUSY1
BCF PORTA,1 ;R/WをWに戻しておく
BSF STATUS,RP0 ;バンク1へ切替
CLRF TRISB ;ポートBを出力モードに設定
BCF STATUS,RP0 ;バンク0に戻す
MOVF STORE,W ;STOREに格納していた内容をWレジスタに戻す
BCF PORTA,3 ;IC1非選択
RETURN
BUSY2 ;IC2のBUSY CHECK
MOVWF STORE ;Wレジスタ内容をSTOREに一時保管
;PORTBを入力モードに変える
BSF STATUS,RP0 ;バンク1へ切替
MOVLW 0FFH ;ポートBを入力モードに設定
MOVWF TRISB
BCF STATUS,RP0 ;バンク0に戻す
BSF PORTA,4 ;IC2選択
BCF PORTA,3
BCF PORTA,0 ;Status
Read
BSF PORTA,1
BSF PORTA,2 ;E2
Active
BCF PORTA,2
MOVF PORTB,W
MOVWF STUS ;LCDのStatus情報をSTUSに格納
BTFSC STUS,7 ;BUSYフラグチェック
GOTO BUSY2
BCF PORTA,1 ;R/WをWに戻しておく
BSF STATUS,RP0 ;バンク1へ切替
CLRF TRISB ;ポートBを出力モードに設定
BCF STATUS,RP0 ;バンク0に戻す
MOVF STORE,W ;STOREに格納していた内容をWレジスタに戻す
BCF PORTA,4 ;IC2非選択
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 ;約1mSECタイマ
MOVLW 0C8H
MOVWF TIM1CNT
TIM1SLP
CALL TIM5
DECFSZ TIM1CNT,F
GOTO TIM1SLP
RETURN
END