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