Welcome to my blog

秋月電子 I2C接続キャラクタLCDモジュール用サンプルコード

ぼのかば

ぼのかば

前々からキャラクタ表示するLCDを使いたかったのですが,
今まで躊躇していました。

普通のキャラクタ液晶だとI/Oを8pinも使わなければならない(らしい)
というので,たかが表示にそんなに奢れない,という理由です。

その点,I2C接続なら使うI/Oは2pinで済みます
これなら8PinのPICでも負担が少ない。
早速使う事にしました。

↓コレです。
C接続キャラクタLCDモジュール[16x2行]白色バックライト付
[
ACM1602NI-FLW-FBW-M01]


いきなりですが,私の作ったサンプルコードあげてしまいます。

ソースコード

入れた表示方法は下記です。
 ・今いる場所から指定文字列表示
 ・1行目の行頭に戻って指定文字列表示
 ・2行目の行頭に戻って指定文字列表示
 ・1行目の行頭から書き始めて,あふれたら2行目へ折り返し
 ・上記に対して,
   ・パッと一発表示と,
   ・タカタカタカと指定msec遅延しながら表示
     (MISSION COMPLETED_的な使い方想定)
  の2種類で表示できます

 その他,細かいコマンドと削除関数を持ってます。

PIC12F1822/PIC12F1840,XC8 v1.00/v1.01/v1.10で動作確認しています。
お役に立てればと思います。
(バグ見つけた場合,ここのコメント欄でお知らせください。)

再改変は自由ですが,再配布・商用利用するときは
一言コメントください。
現状渡し,内容については一切責任持ちません。


以下,使う時のコツです。
・どのPICでも,どのPinでも使えるようにと思って作ってます。
 (I2C接続部分は秋月サイトのリンクにあるデータシートをベースにしてます。)
 PICが持っているI2Cは使っていません。
  ピンアサイン方法
   "system.h"にピンアサインがされている前提で作ってあります。
   もし,そうでなければ#ifdef I2C_PinAssigne を #ifndef にしてピンアサインしてください。
   #include "system.h"は外してしまってかまいません。

使い方はこんな感じです。
int main(void){
    unsigned char restartMsg[] = {"RESTART"}; //7
   
    lcd_init();
    lcd_cmd(dispOnOffControl+0b100);
    lcd_clear();
    lcd_strL1((unsigned char*)restartMsg);
    delay_msFunc(1000);//__delay_ms(1000);
    lcd_clear();

    return 0;
}

・16MHz,32MHzで試しています。
 それ以下のクロックの場合も動くと思いますが,未テストです。
  32MHzで動かす場合,XTAL_32MHZをdefineしておいてください。
  (LCD側が間に合わない様なので,命令増やして遅延させています)

・XC8 v1.01の場合,Freeモードでも使わない関数をプログラメリアに入れないようですが,
 念のため,いらないものはコメントアウトしていただいた方が無駄なコードサイズ増やさず安心です。

・動かない場合,コマンドのタイミングが悪く,
 ACKが帰ってこないためにLockするパターンが多かったです。
 I2COut()の中のタイミング(特に70行目の __delay_us(55);)を
 変更すると直るかもしれません

Comments 0

There are no comments yet.

Leave a reply