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
AQM1602.cpp@12:21830002e12d, 2017-10-28 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Oct 28 12:57:52 2017 +0000
- Revision:
- 12:21830002e12d
- Parent:
- 11:f650f1e809a9
- Child:
- 13:4975e1c1d743
13
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 10:6e6c0f24e81f | 1 | //--------------------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 2 | // Class for LCD, AQM1602XA-RN-GBW |
MikamiUitOpen | 12:21830002e12d | 3 | // |
MikamiUitOpen | 12:21830002e12d | 4 | // Default pin assignments for Nucleo |
MikamiUitOpen | 12:21830002e12d | 5 | // D14 SDA ---- to pin4 of LCD module |
MikamiUitOpen | 12:21830002e12d | 6 | // D15 SCL ---- to pin3 of LCD module |
MikamiUitOpen | 0:f177013dc4fc | 7 | // |
MikamiUitOpen | 12:21830002e12d | 8 | // 動作を確認したボード: Nucleo-F401RE, Nucleo-F411RE, Nucleo-F446RE, |
MikamiUitOpen | 12:21830002e12d | 9 | // LPC1768 |
MikamiUitOpen | 12:21830002e12d | 10 | // 動作が不良なボード: Nucleo-F302R8, Nucle0-F746ZG, Disco-f746NG |
MikamiUitOpen | 12:21830002e12d | 11 | // |
MikamiUitOpen | 12:21830002e12d | 12 | // このプログラムを作った際の mbed のリビジョン:Rev.154 |
MikamiUitOpen | 12:21830002e12d | 13 | // |
MikamiUitOpen | 12:21830002e12d | 14 | // 2017/10/28, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 10:6e6c0f24e81f | 15 | //--------------------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 16 | |
MikamiUitOpen | 0:f177013dc4fc | 17 | #include "AQM1602.hpp" |
MikamiUitOpen | 0:f177013dc4fc | 18 | |
MikamiUitOpen | 0:f177013dc4fc | 19 | namespace Mikami |
MikamiUitOpen | 0:f177013dc4fc | 20 | { |
MikamiUitOpen | 0:f177013dc4fc | 21 | // Constructor |
MikamiUitOpen | 0:f177013dc4fc | 22 | Aqm1602::Aqm1602(PinName sda, PinName scl, uint32_t clock, |
MikamiUitOpen | 0:f177013dc4fc | 23 | bool cursor, bool blink) |
MikamiUitOpen | 8:854c244a7863 | 24 | : i2cPtr_(new I2C(sda, scl)), i2c_(*i2cPtr_) |
MikamiUitOpen | 8:854c244a7863 | 25 | { Init(clock, cursor, blink); } |
MikamiUitOpen | 0:f177013dc4fc | 26 | |
MikamiUitOpen | 8:854c244a7863 | 27 | Aqm1602::Aqm1602(I2C &i2c, uint32_t clock, |
MikamiUitOpen | 8:854c244a7863 | 28 | bool cursor, bool blink) |
MikamiUitOpen | 8:854c244a7863 | 29 | : i2cPtr_(NULL), i2c_(i2c) |
MikamiUitOpen | 8:854c244a7863 | 30 | { Init(clock, cursor, blink); } |
MikamiUitOpen | 0:f177013dc4fc | 31 | |
MikamiUitOpen | 0:f177013dc4fc | 32 | // All clear |
MikamiUitOpen | 12:21830002e12d | 33 | void Aqm1602::Clear() |
MikamiUitOpen | 0:f177013dc4fc | 34 | { |
MikamiUitOpen | 12:21830002e12d | 35 | WriteCmd(0x01); |
MikamiUitOpen | 8:854c244a7863 | 36 | wait_ms(50); |
MikamiUitOpen | 0:f177013dc4fc | 37 | } |
MikamiUitOpen | 0:f177013dc4fc | 38 | |
MikamiUitOpen | 0:f177013dc4fc | 39 | // Write string |
MikamiUitOpen | 12:21830002e12d | 40 | void Aqm1602::WriteString(const string str) |
MikamiUitOpen | 0:f177013dc4fc | 41 | { |
MikamiUitOpen | 12:21830002e12d | 42 | int length = min(str.length(), (size_t)N_CHR); |
MikamiUitOpen | 12:21830002e12d | 43 | for (int n=0; n<length; n++) WriteChar(str[n]); |
MikamiUitOpen | 0:f177013dc4fc | 44 | } |
MikamiUitOpen | 0:f177013dc4fc | 45 | |
MikamiUitOpen | 0:f177013dc4fc | 46 | // Write string from specified position |
MikamiUitOpen | 12:21830002e12d | 47 | void Aqm1602::WriteStringXY(const string str, |
MikamiUitOpen | 9:74a845df6e7a | 48 | uint8_t x, uint8_t y) |
MikamiUitOpen | 0:f177013dc4fc | 49 | { |
MikamiUitOpen | 0:f177013dc4fc | 50 | SetXY(x, y); |
MikamiUitOpen | 0:f177013dc4fc | 51 | WriteString(str); |
MikamiUitOpen | 0:f177013dc4fc | 52 | } |
MikamiUitOpen | 9:74a845df6e7a | 53 | |
MikamiUitOpen | 0:f177013dc4fc | 54 | // Clear of specified line |
MikamiUitOpen | 0:f177013dc4fc | 55 | void Aqm1602::ClearLine(uint8_t line) |
MikamiUitOpen | 0:f177013dc4fc | 56 | { |
MikamiUitOpen | 0:f177013dc4fc | 57 | SetXY(0, line); |
MikamiUitOpen | 0:f177013dc4fc | 58 | for (int n=0; n<N_CHR; n++) |
MikamiUitOpen | 0:f177013dc4fc | 59 | WriteString(" "); |
MikamiUitOpen | 0:f177013dc4fc | 60 | } |
MikamiUitOpen | 0:f177013dc4fc | 61 | |
MikamiUitOpen | 0:f177013dc4fc | 62 | // Set contrast |
MikamiUitOpen | 0:f177013dc4fc | 63 | void Aqm1602::SetContrast(uint8_t c) |
MikamiUitOpen | 0:f177013dc4fc | 64 | { |
MikamiUitOpen | 0:f177013dc4fc | 65 | WriteCmd(0x39); |
MikamiUitOpen | 0:f177013dc4fc | 66 | WriteCmd(0x70 | (c & 0x0f)); // Lower 4 bits |
MikamiUitOpen | 0:f177013dc4fc | 67 | WriteCmd(0x5C | ((c >> 4) & 0x03)); // Higher 2 bits |
MikamiUitOpen | 0:f177013dc4fc | 68 | WriteCmd(0x38); |
MikamiUitOpen | 0:f177013dc4fc | 69 | } |
MikamiUitOpen | 0:f177013dc4fc | 70 | |
MikamiUitOpen | 0:f177013dc4fc | 71 | //--------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 72 | // Following functions: private |
MikamiUitOpen | 0:f177013dc4fc | 73 | |
MikamiUitOpen | 8:854c244a7863 | 74 | // Initialize |
MikamiUitOpen | 8:854c244a7863 | 75 | void Aqm1602::Init(uint32_t clock, bool cursor, bool blink) |
MikamiUitOpen | 8:854c244a7863 | 76 | { |
MikamiUitOpen | 8:854c244a7863 | 77 | if (clock != 100000) i2c_.frequency(clock); |
MikamiUitOpen | 8:854c244a7863 | 78 | |
MikamiUitOpen | 12:21830002e12d | 79 | wait_ms(100); |
MikamiUitOpen | 12:21830002e12d | 80 | |
MikamiUitOpen | 12:21830002e12d | 81 | // 初期化のためのコマンド送信手順は,秋月電子の AE-AQM1602A(KIT) の |
MikamiUitOpen | 12:21830002e12d | 82 | // データシートの記載に従った |
MikamiUitOpen | 12:21830002e12d | 83 | connected_ = WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots |
MikamiUitOpen | 8:854c244a7863 | 84 | if (!connected_) |
MikamiUitOpen | 8:854c244a7863 | 85 | { |
MikamiUitOpen | 8:854c244a7863 | 86 | fprintf(stderr, "\r\nLCD AQM1602 not connected\r\n"); |
MikamiUitOpen | 8:854c244a7863 | 87 | return; |
MikamiUitOpen | 8:854c244a7863 | 88 | } |
MikamiUitOpen | 8:854c244a7863 | 89 | |
MikamiUitOpen | 8:854c244a7863 | 90 | WriteCmd(0x39); // To extended command |
MikamiUitOpen | 8:854c244a7863 | 91 | WriteCmd(0x14); // Internal OSC frequency |
MikamiUitOpen | 8:854c244a7863 | 92 | WriteCmd(0x70 | 0x00); // Contrast set |
MikamiUitOpen | 8:854c244a7863 | 93 | WriteCmd(0x54 | 0x02); // Power/ICON/Contrast control |
MikamiUitOpen | 8:854c244a7863 | 94 | WriteCmd(0x6C); // Follower control |
MikamiUitOpen | 8:854c244a7863 | 95 | wait_ms(200); |
MikamiUitOpen | 8:854c244a7863 | 96 | |
MikamiUitOpen | 8:854c244a7863 | 97 | WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots |
MikamiUitOpen | 12:21830002e12d | 98 | // WriteCmd(0x01); // clear,これを入れると正常に動作しない |
MikamiUitOpen | 8:854c244a7863 | 99 | WriteCmd(0x0C | (cursor << 1) | blink); |
MikamiUitOpen | 12:21830002e12d | 100 | |
MikamiUitOpen | 12:21830002e12d | 101 | Clear(); |
MikamiUitOpen | 8:854c244a7863 | 102 | } |
MikamiUitOpen | 8:854c244a7863 | 103 | |
MikamiUitOpen | 0:f177013dc4fc | 104 | // Send command and data |
MikamiUitOpen | 3:414f98234c94 | 105 | bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data) |
MikamiUitOpen | 0:f177013dc4fc | 106 | { |
MikamiUitOpen | 11:f650f1e809a9 | 107 | /* |
MikamiUitOpen | 11:f650f1e809a9 | 108 | // mbed Rev.130 以降では割り込み処理でうまく動作しない場合がある |
MikamiUitOpen | 0:f177013dc4fc | 109 | char tx[2] = { cmdData, data }; |
MikamiUitOpen | 3:414f98234c94 | 110 | int rt = i2c_.write(LCD_ADDRESS_, tx, 2); |
MikamiUitOpen | 7:5375acc9a74a | 111 | wait_us(30); |
MikamiUitOpen | 3:414f98234c94 | 112 | return (rt == 0) ? true : false; |
MikamiUitOpen | 11:f650f1e809a9 | 113 | */ |
MikamiUitOpen | 12:21830002e12d | 114 | // 以下は Rev.12 で変更したもの |
MikamiUitOpen | 11:f650f1e809a9 | 115 | i2c_.start(); |
MikamiUitOpen | 12:21830002e12d | 116 | if (1 != i2c_.write(LCD_ADDRESS_)) return false; |
MikamiUitOpen | 12:21830002e12d | 117 | if (1 != i2c_.write(cmdData)) return false; |
MikamiUitOpen | 12:21830002e12d | 118 | if (1 != i2c_.write(data)) return false; |
MikamiUitOpen | 11:f650f1e809a9 | 119 | i2c_.stop(); |
MikamiUitOpen | 11:f650f1e809a9 | 120 | wait_us(30); |
MikamiUitOpen | 12:21830002e12d | 121 | return true; |
MikamiUitOpen | 0:f177013dc4fc | 122 | } |
MikamiUitOpen | 0:f177013dc4fc | 123 | } |