;******************************************************************** ;******************************************************************** ; LCD表示器 DM1602 by PIC----8bit入力 ;******************************************************************** ;******************************************************************** ;接続方法 ;RA0=E,RA1=R/W,RA2=RS ;RB0=DB0,RB1=DB1,~~~,RB7=DB7 ;******************************************************************** 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 ;-------------------------------------------------------------------- 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 ;E BCF PORTA,0 CALL TIM5 ;4.1msec以上待ち MOVLW 030H MOVWF PORTB BCF PORTA,1 ;R/WをWに BCF PORTA,2 ;RSをインストラクションに BSF PORTA,0 ;E BCF PORTA,0 CALL TIM04 ;100μsec以上待ち(TIM04は約0.4msec) MOVLW 030H MOVWF PORTB BCF PORTA,1 ;R/WをWに BCF PORTA,2 ;RSをインストラクションに BSF PORTA,0 ;E BCF PORTA,0 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 ;-------------------------------------------------------------------- ;文字書き込み(ループ) ;-------------------------------------------------------------------- ;1行目に"Hello!"をLCDに書き込み ;2行目に”Santech Co.,Ltd."を1文字飛ばしながらLCDに書き込み CHR_WRITE CALL LCDCLR ;表示クリア CALL HELLO CALL TIM1S CALL SANTECH CALL TIM1S GOTO CHR_WRITE ;******************************************************************** ;サブルーチン ;******************************************************************** HELLO ;表示HELLO! MOVLW B'10000000'
CALL LCDCMD
CALL TIM1S MOVLW 'H' CALL LCDDTW CALL TIM1S MOVLW 'e' CALL LCDDTW CALL TIM1S MOVLW 'l' CALL LCDDTW CALL TIM1S MOVLW 'l' CALL LCDDTW CALL TIM1S MOVLW 'o' CALL LCDDTW CALL TIM1S MOVLW '!' CALL LCDDTW CALL TIM1S RETURN SANTECH MOVLW 0C0H CALL LCDCMD MOVLW 'S' CALL LCDDTW CALL TIM1S MOVLW 0C2H CALL LCDCMD MOVLW 'n' CALL LCDDTW CALL TIM1S MOVLW 0C4H CALL LCDCMD MOVLW 'e' CALL LCDDTW CALL TIM1S MOVLW 0C6H CALL LCDCMD MOVLW 'h' CALL LCDDTW CALL TIM1S MOVLW 0C8H CALL LCDCMD MOVLW 'C' CALL LCDDTW CALL TIM1S MOVLW 0CAH CALL LCDCMD MOVLW '.' CALL LCDDTW CALL TIM1S MOVLW 0CCH CALL LCDCMD MOVLW 'L' CALL LCDDTW CALL TIM1S MOVLW 0CEH CALL LCDCMD MOVLW 'd' CALL LCDDTW CALL TIM1S MOVLW 0C1H CALL LCDCMD MOVLW 'a' CALL LCDDTW CALL TIM1S MOVLW 0C3H CALL LCDCMD MOVLW 't' CALL LCDDTW CALL TIM1S MOVLW 0C5H CALL LCDCMD MOVLW 'c' CALL LCDDTW CALL TIM1S MOVLW 0C9H CALL LCDCMD MOVLW 'o' CALL LCDDTW CALL TIM1S MOVLW 0CBH CALL LCDCMD MOVLW ',' CALL LCDDTW CALL TIM1S MOVLW 0CDH CALL LCDCMD MOVLW 't' CALL LCDDTW CALL TIM1S MOVLW 0CFH CALL LCDCMD MOVLW '.' CALL LCDDTW CALL TIM1S RETURN ;LCDへデータ書き込み LCDDTW ;Wに書き込まれたデータ(1文字)を表示 MOVWF PORTB BCF PORTA,1 ;R/WをW BSF PORTA,2 ;RSをデータに BSF PORTA,0 ;E BCF PORTA,0 CALL LCDBUSY ;BUSYチェック RETURN ;LCDへインストラクション書き込み LCDCMD ;Wレジスタに書き込まれたコマンドをLCDへ MOVWF PORTB BCF PORTA,1 ;R/WをW BCF PORTA,2 ;RSをインストラクションに BSF PORTA,0 ;E BCF PORTA,0 CALL LCDBUSY ;BUSYチェック RETURN ;LCD表示クリア LCDCLR MOVLW 01H CALL LCDCMD RETURN ;LCD BUSYチェック LCDBUSY ;PORTBを入力に変える BSF STATUS,RP0 ;バンク1へ切替 MOVLW 0FFH ;ポートBを入力モードに設定 MOVWF TRISB BCF STATUS,RP0 ;バンク0に戻す BCF PORTA,2 ;RSをインストラクションに BSF PORTA,1 ;R/WをR BSF PORTA,0 ;E BCF PORTA,0 MOVF PORTB,W MOVWF LCDINST BTFSC LCDINST,7 ;BUSYフラグチェック GOTO LCDBUSY BCF PORTA,1 ;R/WをWに戻しておく BSF STATUS,RP0 ;バンク1へ切替 CLRF TRISB ;ポートBを出力モードに設定 BCF STATUS,RP0 ;バンク0に戻す 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
Copyright(C) . Santech Display Co.,Ltd. All right reserved.