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