山本ワールド
i2c液晶AQM0802サポートライブラリー
概要
PIC18F46K22のI2Cモジュール1に接続されたI2Cキャラクタ液晶モジュール(8桁*2行)AQM0802A-RN-GBWを接続し文字の表示とコントラストの調整をサポートするライブラリである。
クロックは64MHz前提でソフトウェアディレイを使用しているためクロック周波数が変更された場合はディレイの調整が必要(64MHz以上のPIC18は存在しないので遅くなるだけで動作はする)
使用する場合はi2clcd.incをインクルードしi2clcd.asmをプロジェクトに追加してください
本ライブラリは、PIC18 I2Cモジュール サポートライブラリをコールしているのでそれらのファイルもプロジェクトに加える必要があります。
lcd_initをコールする前に以下のポートを出力にしてください。(GNDを除く)
クロックは64MHz前提でソフトウェアディレイを使用しているためクロック周波数が変更された場合はディレイの調整が必要(64MHz以上のPIC18は存在しないので遅くなるだけで動作はする)
使用する場合はi2clcd.incをインクルードしi2clcd.asmをプロジェクトに追加してください
本ライブラリは、PIC18 I2Cモジュール サポートライブラリをコールしているのでそれらのファイルもプロジェクトに加える必要があります。
lcd_initをコールする前に以下のポートを出力にしてください。(GNDを除く)
; 使用端子 ; PIC18F46K22 ; SDA1(RC4) ; SCK1(RC3) ; GND
プログラムの説明
ソースファイル
以下のファイルで構成されているlcd.asm ・・・ LCD表示用ライブラリ Version 1.00 lcd.inc ・・・ LCD表示用インクルードファイル Version 1.00
サブルーチン
以下のサブルーチンをサポート
lcd_init
液晶モジュールの初期化
lcd_disp
RAM上の文字列(FSR1でアドレスを指定)を液晶に表示する。文字列の最後は0でなければならない。改行(00ah)コードを使用すると2行目にカーソルが移動する。
lcd_cont
WREGで指定されたコントラスト値(0~63)を液晶に設定する。
ソースコード
i2clcd.inc
; I2C接続液晶 AQUM0802A-RN-GBWサポートライブラリ Version 1.00 2014/02/23
; Target PIC18F46K22
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v1.85 Microchip MPASM(v5.51)
; PicKit 3
EXTERN lcd_init,lcd_clear,lcd_cmd,lcd_data,lcd_cont,lcd_puts
EXTERN delay16c,delay4kc,delay1024kc
i2clcd.asm
; I2C接続液晶 AQUM0802A-RN-GBWサポートライブラリ Version 1.00 2014/02/23
; Target PIC18F46K22
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v1.85 Microchip MPASM(v5.51)
; PicKit 3
#INCLUDE <p18f46k22.inc>
#INCLUDE "i2c.inc"
LCD_SADS EQU 07ch ; AQUM0802Aのi2cスレーブアドレス
LCD_RSDATA EQU 040h
LCD_RSCMD EQU 000h
LCD_C01 EQU 080h
LCD_C00 EQU 080h
EXTERN temp1,temp2,Tcount1,Tcount2
GLOBAL lcd_init,lcd_clear,lcd_cmd,lcd_data,lcd_cont,lcd_puts
GLOBAL delay16c,delay4kc,delay1024kc
CODE
delay16c
nop
decfsz WREG
goto delay16c
return
delay4kc
movwf Tcount1
delay4kL2
clrf WREG
delay4kL1
nop
nop
decfsz WREG
goto delay4kL1 ; 16*256=4096
decfsz Tcount1
goto delay4kL2
return
delay1024kc
movwf Tcount2
delay1024kL1 ; 16*256*256=4096
clrf Tcount1
delay4kL22
clrf WREG
delay4kL11
nop
nop
decfsz WREG
goto delay4kL11 ; 16*256=4096
decfsz Tcount1
goto delay4kL22
decfsz Tcount2
goto delay1024kL1
return
; LCD初期化
lcd_init
movlw 038h ; Function Set
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 039h ; Function Set
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 014h ; Internal OSC frequency
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 073h ; Contrast set
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 056h ; Power/ICON/Contrast control
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 06ch ; Follower control
call lcd_cmd
movlw d'13' ; 200ms/64Mhz/16/256/256=13
call delay1024kc
movlw 038h ; Function Set
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movlw 00ch ; Display On/Off
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
call lcd_clear
return
; LCDをクリア
lcd_clear
movlw 001h ; Clear Display
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay4kc
return
; LCDへコマンドを1byte送信
lcd_cmd
movwf temp1
call i2c_start
movlw LCD_SADS
call i2c_write
movlw LCD_RSCMD+LCD_C01
call i2c_write
movf temp1,w
call i2c_write
call i2c_stop
return
; LCDへデータを1byte送信
lcd_data
movwf temp1
call i2c_start
movlw LCD_SADS
call i2c_write
movlw LCD_RSDATA+LCD_C01
call i2c_write
movf temp1,w
call i2c_write
call i2c_stop
return
; LCDの表示アドレスを設定
lcd_ddram
iorlw b'11000000'
call lcd_cmd
movlw d'141' ; 26.3us/64MH/16=141
call delay16c
return
; LCDコントラスト変更(0?63)
lcd_cont
movwf temp1
movlw 039h ; Function Set
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
movf temp1,w
iorlw b'10000000'
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
rrncf temp1
rrncf temp1
rrncf temp1
rrncf temp1,w
iorlw 054h
call lcd_cmd
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
return
; LCDに文字列を表示
lcd_puts
movf POSTINC1,w
bz lcd_puts_exit
movwf temp2
movlw 0ah ; 改行コード
cpfseq temp2
bra lcd_puts_not_lf
movlw 040h
call lcd_ddram
bra lcd_puts
lcd_puts_not_lf ; 改行コード以外
movf temp2,w
call lcd_data
movlw d'141' ; 26.3us/64MHz/16=141
call delay16c
bra lcd_puts
lcd_puts_exit
return
END
Copyright (C) 2012 山本ワールド All Rights Reserved.