LCDモジュール ACM1602NI(I2C接続) を制御するライブラリ

Dependents:   scan2 BoxController

Committer:
orivant
Date:
Fri Dec 16 07:48:22 2016 +0000
Revision:
11:e0849411adfa
Parent:
10:4ceccdba0248
Child:
12:b5829a58bbaf
???I2C???????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
orivant 2:1e305eaf6411 1 #if !defined(LCD_ACM1602NI_H)
orivant 0:c7da9183f23a 2
orivant 2:1e305eaf6411 3 #include "mbed.h"
orivant 2:1e305eaf6411 4
orivant 2:1e305eaf6411 5 #define LCD_ACM1602NI_H
orivant 0:c7da9183f23a 6
orivant 0:c7da9183f23a 7 /** LCDモジュール ACM1602NI を制御するクラス
orivant 1:6e4f2340d316 8 * @brief ACM1602NIをI2C通信で制御します。
orivant 0:c7da9183f23a 9 * @date 2016/12/14
orivant 0:c7da9183f23a 10 * @author H.Nagahama
orivant 4:7ec26f611f24 11 * @code
orivant 8:63a50fd1fada 12 * #include "mbed.h"
orivant 8:63a50fd1fada 13 * #include "LcdAcm1602ni.h"
orivant 8:63a50fd1fada 14 *
orivant 8:63a50fd1fada 15 * LcdAcm1602ni lcd(p9, p10);
orivant 8:63a50fd1fada 16 *
orivant 8:63a50fd1fada 17 * int main() {
orivant 8:63a50fd1fada 18 * wait_ms(15); //!< LCDの安定まで15ms以上待つ必要がある
orivant 8:63a50fd1fada 19 * lcd.initialize();
orivant 8:63a50fd1fada 20 *
orivant 8:63a50fd1fada 21 * lcd.puts("Hallow World!");
orivant 8:63a50fd1fada 22 *
orivant 8:63a50fd1fada 23 * while(1) {
orivant 8:63a50fd1fada 24 * }
orivant 8:63a50fd1fada 25 * }
orivant 5:259e6482ac57 26 * @endcode
orivant 0:c7da9183f23a 27 */
orivant 0:c7da9183f23a 28 class LcdAcm1602ni
orivant 0:c7da9183f23a 29 {
orivant 0:c7da9183f23a 30 public:
orivant 0:c7da9183f23a 31 static const uint8_t SLAVE_ADDR = 0xa0; //!< スレーブアドレス(下位ビットに0を追加済み)
orivant 0:c7da9183f23a 32 static const uint8_t LINE_COUNT = 2; //!< 行数
orivant 0:c7da9183f23a 33 static const uint8_t LINE_CHARA_COUNT = 16; //!< 行の文字数
orivant 0:c7da9183f23a 34
orivant 0:c7da9183f23a 35 private:
orivant 10:4ceccdba0248 36 static const int32_t I2C_MAX_FREQUENCY = 70 * 1000; //!< I2C通信の最大周波数
orivant 0:c7da9183f23a 37 static const uint8_t LINE_HEAD_ADDR_TBL[LINE_COUNT]; //!< 行の先頭アドレス
orivant 0:c7da9183f23a 38
orivant 0:c7da9183f23a 39 static const uint8_t ADDR_BYTE_WRITE = SLAVE_ADDR; //!< アドレス指定用バイトデータ:書き込み用
orivant 0:c7da9183f23a 40 static const uint8_t ADDR_BYTE_READ = SLAVE_ADDR & 0x01; //!< アドレス指定用バイトデータ:読み込み用
orivant 0:c7da9183f23a 41 static const uint8_t CTRL_BYTE_COMMAND = 0x00; //!< 制御指定用バイトデータ:コマンド用
orivant 0:c7da9183f23a 42 static const uint8_t CTRL_BYTE_DATA = 0x80; //!< 制御指定用バイトデータ:データ用
orivant 0:c7da9183f23a 43
orivant 0:c7da9183f23a 44 private:
orivant 0:c7da9183f23a 45 PinName m_pinSDA; //!< SDAピン名
orivant 0:c7da9183f23a 46 PinName m_pinSCL; //!< SCLピン名
orivant 0:c7da9183f23a 47 I2C m_i2c; //!< I2C通信制御
orivant 11:e0849411adfa 48 bool m_isMyI2c; //!< 自前のI2Cクラス使用フラグ
orivant 0:c7da9183f23a 49
orivant 0:c7da9183f23a 50 uint8_t m_currentLineNo; //!< 現在位置:行番号
orivant 0:c7da9183f23a 51 uint8_t m_currentCharaNo; //!< 現在位置:文字番号
orivant 0:c7da9183f23a 52
orivant 0:c7da9183f23a 53 bool m_displayVisible; //!< ディスプレイ表示フラグ
orivant 0:c7da9183f23a 54 bool m_cursorVisible; //!< カーソル表示フラグ
orivant 0:c7da9183f23a 55 bool m_blinkEnable; //!< カーソル点滅フラグ
orivant 0:c7da9183f23a 56
orivant 0:c7da9183f23a 57 public:
orivant 0:c7da9183f23a 58 /** コンストラクタ
orivant 11:e0849411adfa 59 * @brief 自前のI2Cインスタンスを作成する場合のコンストラクタ
orivant 11:e0849411adfa 60 * I2Cの動作周波数はI2C_MAX_FREQUENCYを設定します。
orivant 0:c7da9183f23a 61 * @param pinSDA SDAピン指定
orivant 0:c7da9183f23a 62 * @param pinSCL SCLピン指定
orivant 0:c7da9183f23a 63 */
orivant 0:c7da9183f23a 64 LcdAcm1602ni(PinName pinSDA, PinName pinSCL);
orivant 11:e0849411adfa 65 /** コンストラクタ
orivant 11:e0849411adfa 66 * @brief 外部のI2Cインスタンスを共有する場合のコンストラクタ
orivant 11:e0849411adfa 67 * 本クラスがI2Cの設定を変更することはありません。
orivant 11:e0849411adfa 68 * @param i2c I2Cインスタンス
orivant 11:e0849411adfa 69 */
orivant 11:e0849411adfa 70 LcdAcm1602ni(I2C& i2c);
orivant 0:c7da9183f23a 71 /** デストラクタ
orivant 0:c7da9183f23a 72 */
orivant 0:c7da9183f23a 73 ~LcdAcm1602ni();
orivant 0:c7da9183f23a 74
orivant 0:c7da9183f23a 75
orivant 0:c7da9183f23a 76 /** 初期化
orivant 0:c7da9183f23a 77 * @brief LCDを初期化し、表示可能な状態にします。
orivant 0:c7da9183f23a 78 * 電源投入後、LCDが安定するまで15ms以上待ってから実行してください。
orivant 0:c7da9183f23a 79 */
orivant 0:c7da9183f23a 80 void initialize();
orivant 0:c7da9183f23a 81
orivant 0:c7da9183f23a 82
orivant 0:c7da9183f23a 83 /** 1文字描画
orivant 0:c7da9183f23a 84 * @brief 1文字描画します。
orivant 0:c7da9183f23a 85 * カーソル位置は一つ進みます。
orivant 0:c7da9183f23a 86 * 行端まで来た場合は自動で復帰・改行します。
orivant 0:c7da9183f23a 87 * @param c 文字コード
orivant 0:c7da9183f23a 88 */
orivant 0:c7da9183f23a 89 void putc(char c);
orivant 0:c7da9183f23a 90 /** 文字列描画
orivant 0:c7da9183f23a 91 * @brief 文字列の終端まで描画します。
orivant 0:c7da9183f23a 92 * カーソル位置は文字数分進みます。
orivant 0:c7da9183f23a 93 * 行端まで来た場合は自動で復帰・改行します。
orivant 0:c7da9183f23a 94 * @param pStr 文字列
orivant 0:c7da9183f23a 95 */
orivant 0:c7da9183f23a 96 void puts(const char* pStr);
orivant 0:c7da9183f23a 97 /** フォーマット指定描画
orivant 0:c7da9183f23a 98 * @brief フォーマットと可変長引数から生成した文字列を描画します。
orivant 0:c7da9183f23a 99 * 文字列生成後、puts()を内部で呼び出しています。
orivant 0:c7da9183f23a 100 * @param pFormat フォーマット
orivant 0:c7da9183f23a 101 * @param ... 可変長引数
orivant 0:c7da9183f23a 102 */
orivant 0:c7da9183f23a 103 void printf(const char* pFormat, ...);
orivant 0:c7da9183f23a 104
orivant 0:c7da9183f23a 105
orivant 0:c7da9183f23a 106 /** カーソル位置変更
orivant 0:c7da9183f23a 107 * @brief 指定位置までカーソルを移動させます。
orivant 0:c7da9183f23a 108 * @param lineNo 行番号(0~LINE_COUNT)
orivant 0:c7da9183f23a 109 * @param charaNo 文字番号(0~LINE_CHARA_COUNT)
orivant 0:c7da9183f23a 110 */
orivant 0:c7da9183f23a 111 void locate(uint8_t lineNo, uint8_t charaNo);
orivant 0:c7da9183f23a 112 /** カーソル位置取得:行番号
orivant 0:c7da9183f23a 113 * @return カーソルのある行番号
orivant 0:c7da9183f23a 114 */
orivant 0:c7da9183f23a 115 uint8_t getCurrentLineNo() const;
orivant 0:c7da9183f23a 116 /** カーソル位置取得:文字番号
orivant 0:c7da9183f23a 117 * @return カーソルのある文字番号
orivant 0:c7da9183f23a 118 */
orivant 0:c7da9183f23a 119 uint8_t getCurrentCharaNo() const;
orivant 0:c7da9183f23a 120
orivant 0:c7da9183f23a 121
orivant 0:c7da9183f23a 122 /** 画面クリア
orivant 0:c7da9183f23a 123 * @brief 画面全域をクリアし、カーソル位置を先頭に移動させます。
orivant 0:c7da9183f23a 124 */
orivant 0:c7da9183f23a 125 void clearDisplay();
orivant 0:c7da9183f23a 126 /** 行クリア
orivant 0:c7da9183f23a 127 * @brief 指定行をクリアし、カーソルを指定行の先頭に移動させます。
orivant 0:c7da9183f23a 128 * @param lineNo 行番号
orivant 0:c7da9183f23a 129 */
orivant 0:c7da9183f23a 130 void clearLine(uint8_t lineNo);
orivant 0:c7da9183f23a 131 /** 範囲クリア
orivant 0:c7da9183f23a 132 * @brief 指定範囲をクリアし、カーソルを指定範囲の開始位置に移動させます。
orivant 0:c7da9183f23a 133 * @param startLineNo 開始行番号
orivant 0:c7da9183f23a 134 * @param startCharaNo 開始文字番号
orivant 0:c7da9183f23a 135 * @param endLineNo; 終了行番号
orivant 0:c7da9183f23a 136 * @param endCharaNo 終了文字番号
orivant 0:c7da9183f23a 137 */
orivant 0:c7da9183f23a 138 void clearRange(uint8_t startLineNo, uint8_t startCharaNo, uint8_t endLineNo, uint8_t endCharaNo);
orivant 0:c7da9183f23a 139
orivant 0:c7da9183f23a 140
orivant 0:c7da9183f23a 141 /** 画面の表示設定
orivant 0:c7da9183f23a 142 * @param visible 表示フラグ
orivant 0:c7da9183f23a 143 */
orivant 0:c7da9183f23a 144 void setDisplayVisible(bool visible);
orivant 0:c7da9183f23a 145 /** 画面の表示設定取得
orivant 0:c7da9183f23a 146 * @return 表示フラグ
orivant 0:c7da9183f23a 147 */
orivant 0:c7da9183f23a 148 bool getDisplayVisible() const;
orivant 0:c7da9183f23a 149 /** カーソルの表示設定
orivant 0:c7da9183f23a 150 * @param visible 表示フラグ
orivant 0:c7da9183f23a 151 */
orivant 0:c7da9183f23a 152 void setCursorVisible(bool visible);
orivant 0:c7da9183f23a 153 /** カーソルの表示設定取得
orivant 0:c7da9183f23a 154 * @return 表示フラグ
orivant 0:c7da9183f23a 155 */
orivant 0:c7da9183f23a 156 bool getCursorVisible() const;
orivant 0:c7da9183f23a 157 /** カーソルの点滅設定
orivant 0:c7da9183f23a 158 * @param enable 点滅フラグ
orivant 0:c7da9183f23a 159 */
orivant 0:c7da9183f23a 160 void setBlinkEnable(bool enable);
orivant 0:c7da9183f23a 161 /** カーソルの点滅設定取得
orivant 0:c7da9183f23a 162 * @return 点滅フラグ
orivant 0:c7da9183f23a 163 */
orivant 0:c7da9183f23a 164 bool getBlinkEnable() const;
orivant 0:c7da9183f23a 165
orivant 0:c7da9183f23a 166 private:
orivant 0:c7da9183f23a 167 /** LCDコマンド書き込み
orivant 0:c7da9183f23a 168 * @brief LCDのコマンドを一つ書き込み(実行し)ます。
orivant 0:c7da9183f23a 169 * @param commandByte コマンド指定バイトデータ
orivant 0:c7da9183f23a 170 */
orivant 0:c7da9183f23a 171 void writeCommand(uint8_t commandByte);
orivant 0:c7da9183f23a 172 /** LCDデータ書き込み
orivant 0:c7da9183f23a 173 * @brief LCDへ文字データを一つ書き込みます。
orivant 0:c7da9183f23a 174 * @param dataByte データ指定バイト
orivant 0:c7da9183f23a 175 */
orivant 0:c7da9183f23a 176 void writeData(uint8_t dataByte);
orivant 0:c7da9183f23a 177
orivant 0:c7da9183f23a 178
orivant 0:c7da9183f23a 179 /** ディスプレイ制御コマンド指定バイトデータの生成
orivant 0:c7da9183f23a 180 * @param displayVisible ディスプレイ表示設定
orivant 0:c7da9183f23a 181 * @param cursorVisible カーソル表示設定
orivant 0:c7da9183f23a 182 * @param blinkEnable カーソル点滅設定
orivant 0:c7da9183f23a 183 * @return コマンド指定バイトデータ
orivant 0:c7da9183f23a 184 */
orivant 0:c7da9183f23a 185 uint8_t calcDisplayControlByteData(bool displayVisible, bool cursorVisible, bool blinkEnable) const;
orivant 0:c7da9183f23a 186 uint8_t calcDisplayControlByteData() const {
orivant 0:c7da9183f23a 187 return calcDisplayControlByteData(m_displayVisible, m_cursorVisible, m_blinkEnable);
orivant 0:c7da9183f23a 188 }
orivant 0:c7da9183f23a 189
orivant 0:c7da9183f23a 190
orivant 0:c7da9183f23a 191 /** カーソル位置移動管理
orivant 0:c7da9183f23a 192 * @brief カーソル位置を一つ進め、改行が発生するかを調べる
orivant 0:c7da9183f23a 193 * @return 改行が発生する場合はtrue
orivant 0:c7da9183f23a 194 */
orivant 0:c7da9183f23a 195 bool incCursorPos();
orivant 0:c7da9183f23a 196
orivant 0:c7da9183f23a 197 /** カーソル位置のアドレス計算
orivant 0:c7da9183f23a 198 * @param lineNo 行番号
orivant 0:c7da9183f23a 199 * @param charaNo 文字番号
orivant 0:c7da9183f23a 200 * @return アドレス
orivant 0:c7da9183f23a 201 */
orivant 0:c7da9183f23a 202 uint8_t calcCursorAddr(uint8_t lineNo, uint8_t charaNo);
orivant 0:c7da9183f23a 203 };
orivant 2:1e305eaf6411 204
orivant 2:1e305eaf6411 205 #endif //!defined(LCD_ACM1602NI_H)