I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリ. Library for LCD 1602XA-RN-GBW connected using I2C interface.
Dependents: UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer UIT2_ALE_LeakyLMS ... more
Revision 15:64250b58f933, committed 2020-04-16
- Comitter:
- MikamiUitOpen
- Date:
- Thu Apr 16 04:22:48 2020 +0000
- Parent:
- 14:5e1b1de66a7f
- Commit message:
- 16
Changed in this revision
AQM1602.cpp | Show annotated file Show diff for this revision Revisions of this file |
AQM1602.hpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 5e1b1de66a7f -r 64250b58f933 AQM1602.cpp --- a/AQM1602.cpp Fri Feb 14 07:14:51 2020 +0000 +++ b/AQM1602.cpp Thu Apr 16 04:22:48 2020 +0000 @@ -1,11 +1,11 @@ //--------------------------------------------------------------- -// 液晶表示器 AQM1602XA-RN-GBW 用クラス(ヘッダ) +// 液晶表示器 AQM1602XA-RN-GBW 用クラス,メンバ関数の定義 // // Nucleo の場合のデフォルトのピン // D14 ---- 液晶モジュールの SDA ピン // D15 ---- 液晶モジュールの SCL ピン // -// 2020/02/14, Copyright (c) 2020 MIKAMI, Naoki +// 2020/04/16, Copyright (c) 2020 MIKAMI, Naoki //--------------------------------------------------------------- #include "AQM1602.hpp" @@ -20,45 +20,45 @@ Aqm1602::Aqm1602(I2C &i2c, uint32_t clock, bool cursor, bool blink) - : i2cPtr_(NULL), i2c_(i2c) + : i2cPtr_(NULL), i2c_(i2c) { Init(clock, cursor, blink); } // 表示のクリア - void Aqm1602::Clear() + void Aqm1602::Clear() const { WriteCmd(0x01); wait_ms(50); } // 文字列の書込み - void Aqm1602::WriteString(const string str) + void Aqm1602::WriteString(const string str) const { int length = min(str.length(), (size_t)N_CHR); for (int n=0; n<length; n++) WriteChar(str[n]); } // 指定した位置から文字列の書込み - void Aqm1602::WriteStringXY(const string str, uint8_t x, uint8_t y) + void Aqm1602::WriteStringXY(const string str, + uint8_t x, uint8_t y) const { SetXY(x, y); WriteString(str); } // 指定した行のクリア - void Aqm1602::ClearLine(uint8_t line) + void Aqm1602::ClearLine(uint8_t line) const { SetXY(0, line); - for (int n=0; n<N_CHR; n++) - WriteString(" "); + for (int n=0; n<N_CHR; n++) WriteString(" "); } // コントラストの設定 - void Aqm1602::SetContrast(uint8_t c) + void Aqm1602::SetContrast(uint8_t c) const { - WriteCmd(0x39); // To extended command - WriteCmd(0x70 | (c & 0x0f)); // Lower 4 bits - WriteCmd(0x5C | ((c >> 4) & 0x03)); // Higher 2 bits - WriteCmd(0x38); // Return to normal command + WriteCmd(0x39); // 拡張コマンドへ + WriteCmd(0x70 | (c & 0x0f)); // 下位 4 ビット + WriteCmd(0x5C | ((c >> 4) & 0x03)); // 上位 2 ビット + WriteCmd(0x38); // ノーマル・コマンドへ } // 初期化 @@ -86,14 +86,14 @@ WriteCmd(0x38); // 通常の命令モードへ復帰, // データ長:8-bit, 2-line, 5×8 dots -// WriteCmd(0x01); // クリア,これを入れると正常に動作しないようだ +// WriteCmd(0x01); // クリア,これを入れると正常に動作しない WriteCmd(0x0C | (cursor << 1) | blink); Clear(); } // コマンドとデータの送信 - bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data) + bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data) const { // このメンバ関数を割込み処理で使う場合,以下の処理ではうまく動作しない /* @@ -101,7 +101,7 @@ wait_us(30); return (rt == 0) ? true : false; */ - // 以下の処理は割込み処理で使っても大丈夫 + // 以下の処理の場合は,このメンバ関数を割込み処理で使っても大丈夫 i2c_.start(); if (1 != i2c_.write(LCD_ADDRESS_)) return false; if (1 != i2c_.write(cmdData)) return false;
diff -r 5e1b1de66a7f -r 64250b58f933 AQM1602.hpp --- a/AQM1602.hpp Fri Feb 14 07:14:51 2020 +0000 +++ b/AQM1602.hpp Thu Apr 16 04:22:48 2020 +0000 @@ -1,11 +1,14 @@ //--------------------------------------------------------------- -// 液晶表示器 AQM1602XA-RN-GBW 用クラス(ヘッダ) +// 液晶表示器 AQM1602XA-RN-GBW 用クラス,ヘッダ // // Nucleo の場合のデフォルトのピン // D14 ---- 液晶モジュールの SDA ピン // D15 ---- 液晶モジュールの SCL ピン // -// 2020/02/07, Copyright (c) 2020 MIKAMI, Naoki +// 割込みサービス・ルーチン内に記述した場合でも動作する +// このプログラムを作った際の mbed のリビジョン:Rev.172 +// +// 2020/04/16, Copyright (c) 2020 MIKAMI, Naoki //--------------------------------------------------------------- #include "mbed.h" @@ -25,40 +28,41 @@ PinName scl = D15, // SCL uint32_t clock = 100000, // クロック: 100 kHz bool cursor = false, // カーソル: off - bool blink = false); // 点滅: off + bool blink = false); // 点滅: off Aqm1602(I2C &i2c, // I2C オブジェクトの参照 uint32_t clock = 100000, // クロック: 100 kHz bool cursor = false, // カーソル: off - bool blink = false); // 点滅: off + bool blink = false); // 点滅: off virtual ~Aqm1602() { if (NULL != i2cPtr_) delete i2cPtr_; } // 液晶表示器が接続されていない場合 false を返す - bool IsConnected() { return connected_; } + bool IsConnected() const { return connected_; } // 表示のクリア - void Clear(); + void Clear() const; // コマンドの送信 - bool WriteCmd(uint8_t cmd) { return LcdTx(0x00, cmd); } + bool WriteCmd(uint8_t cmd) const { return LcdTx(0x00, cmd); } // 1文字の書込み - bool WriteChar(char data) { return LcdTx(0x40, data); } + bool WriteChar(char data) const { return LcdTx(0x40, data); } // 表示位置の設定, x: 0 ~ 15, y: 0, 1 - void SetXY(uint8_t x = 0, uint8_t y = 0) + void SetXY(uint8_t x = 0, uint8_t y = 0) const { WriteCmd(x + y*0x40 | 0x80);} // 文字列の書込み - void WriteString(const string str); + void WriteString(const string str) const; // 指定した位置から文字列の書込み - void WriteStringXY(const string str, uint8_t x, uint8_t y); + void WriteStringXY(const string str, uint8_t x, uint8_t y) const; // 数値の書込み - template <typename T> void WriteValue(const char fmt[], T value) + template <typename T> + void WriteValue(const char fmt[], T value) const { char str[N_CHR+1]; sprintf(str, fmt, value); @@ -67,17 +71,18 @@ // 指定した位置から数値の書込み template <typename T> - void WriteValueXY(const char fmt[], T value, uint8_t x, uint8_t y) + void WriteValueXY(const char fmt[], T value, + uint8_t x, uint8_t y) const { SetXY(x, y); WriteValue(fmt, value); } // 指定した行のクリア - void ClearLine(uint8_t line); + void ClearLine(uint8_t line) const; // コントラストの設定 - void SetContrast(uint8_t c); + void SetContrast(uint8_t c) const; private: // AQM1602A のアドレス @@ -85,15 +90,15 @@ static const uint8_t LCD_ADDRESS_ = 0x7C; static const uint8_t N_CHR = 16; - I2C *i2cPtr_; // I2C オブジェクトのポインタ + I2C *const i2cPtr_; // I2C オブジェクトのポインタ I2C &i2c_; // I2C オブジェクトの参照 - bool connected_; // false: 液晶表示器は接続されていないnected + bool connected_; // false: 液晶表示器は接続されていない // 初期化 void Init(uint32_t clock, bool cursor, bool blink); // コマンドとデータの送信 - bool LcdTx(uint8_t cmdData, uint8_t data); + bool LcdTx(uint8_t cmdData, uint8_t data) const; // コピー・コンストラクタと代入演算子関数の禁止 Aqm1602(const Aqm1602&);