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@7:5375acc9a74a, 2015-11-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Nov 15 06:32:29 2015 +0000
- Revision:
- 7:5375acc9a74a
- Parent:
- 4:c943f05b7843
- Child:
- 8:854c244a7863
8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:f177013dc4fc | 1 | //------------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 2 | // Class for LCD, AQM1602XA-RN-GBW |
MikamiUitOpen | 7:5375acc9a74a | 3 | // Do not use mbed Rev.109, using Nucleo-F401/441 |
MikamiUitOpen | 0:f177013dc4fc | 4 | // |
MikamiUitOpen | 7:5375acc9a74a | 5 | // 2015/11/15, Copyright (c) 2015 MIKAMI, Naoki |
MikamiUitOpen | 0:f177013dc4fc | 6 | //------------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 7 | |
MikamiUitOpen | 0:f177013dc4fc | 8 | #include "AQM1602.hpp" |
MikamiUitOpen | 0:f177013dc4fc | 9 | |
MikamiUitOpen | 0:f177013dc4fc | 10 | namespace Mikami |
MikamiUitOpen | 0:f177013dc4fc | 11 | { |
MikamiUitOpen | 0:f177013dc4fc | 12 | // Constructor |
MikamiUitOpen | 0:f177013dc4fc | 13 | Aqm1602::Aqm1602(PinName sda, PinName scl, uint32_t clock, |
MikamiUitOpen | 0:f177013dc4fc | 14 | bool cursor, bool blink) |
MikamiUitOpen | 0:f177013dc4fc | 15 | : i2c_(sda, scl) |
MikamiUitOpen | 0:f177013dc4fc | 16 | { |
MikamiUitOpen | 0:f177013dc4fc | 17 | if (clock != 100000) i2c_.frequency(clock); |
MikamiUitOpen | 0:f177013dc4fc | 18 | |
MikamiUitOpen | 7:5375acc9a74a | 19 | wait_ms(50); |
MikamiUitOpen | 7:5375acc9a74a | 20 | connected_ = WriteCmd(0x38); |
MikamiUitOpen | 3:414f98234c94 | 21 | if (!connected_) |
MikamiUitOpen | 3:414f98234c94 | 22 | { |
MikamiUitOpen | 3:414f98234c94 | 23 | fprintf(stderr, "\r\nLCD AQM1602 not connected\r\n"); |
MikamiUitOpen | 3:414f98234c94 | 24 | return; |
MikamiUitOpen | 3:414f98234c94 | 25 | } |
MikamiUitOpen | 7:5375acc9a74a | 26 | WriteCmd(0x39); // To extended command |
MikamiUitOpen | 7:5375acc9a74a | 27 | WriteCmd(0x14); // Internal OSC frequency |
MikamiUitOpen | 7:5375acc9a74a | 28 | WriteCmd(0x70 | 0x00); // Contrast set |
MikamiUitOpen | 7:5375acc9a74a | 29 | WriteCmd(0x54 | 0x02); // Power/ICON/Contrast control |
MikamiUitOpen | 7:5375acc9a74a | 30 | WriteCmd(0x6C); // Follower control |
MikamiUitOpen | 0:f177013dc4fc | 31 | wait_ms(200); |
MikamiUitOpen | 0:f177013dc4fc | 32 | |
MikamiUitOpen | 7:5375acc9a74a | 33 | WriteCmd(0x01); |
MikamiUitOpen | 0:f177013dc4fc | 34 | WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots |
MikamiUitOpen | 0:f177013dc4fc | 35 | WriteCmd(0x0C | (cursor << 1) | blink); |
MikamiUitOpen | 0:f177013dc4fc | 36 | } |
MikamiUitOpen | 0:f177013dc4fc | 37 | |
MikamiUitOpen | 0:f177013dc4fc | 38 | // All clear |
MikamiUitOpen | 7:5375acc9a74a | 39 | void Aqm1602::Clear() |
MikamiUitOpen | 0:f177013dc4fc | 40 | { |
MikamiUitOpen | 7:5375acc9a74a | 41 | WriteCmd(0x01); |
MikamiUitOpen | 7:5375acc9a74a | 42 | wait_ms(2); |
MikamiUitOpen | 0:f177013dc4fc | 43 | } |
MikamiUitOpen | 0:f177013dc4fc | 44 | |
MikamiUitOpen | 0:f177013dc4fc | 45 | // Write string |
MikamiUitOpen | 0:f177013dc4fc | 46 | void Aqm1602::WriteString(const char str[]) |
MikamiUitOpen | 0:f177013dc4fc | 47 | { |
MikamiUitOpen | 0:f177013dc4fc | 48 | for (int n=0; n<N_CHR; n++) |
MikamiUitOpen | 0:f177013dc4fc | 49 | if (str[n] == 0) break; |
MikamiUitOpen | 0:f177013dc4fc | 50 | else WriteChar(str[n]); |
MikamiUitOpen | 0:f177013dc4fc | 51 | } |
MikamiUitOpen | 0:f177013dc4fc | 52 | |
MikamiUitOpen | 0:f177013dc4fc | 53 | // Write string from specified position |
MikamiUitOpen | 0:f177013dc4fc | 54 | void Aqm1602::WriteStringXY(const char str[], |
MikamiUitOpen | 0:f177013dc4fc | 55 | uint8_t x, uint8_t y) |
MikamiUitOpen | 0:f177013dc4fc | 56 | { |
MikamiUitOpen | 0:f177013dc4fc | 57 | SetXY(x, y); |
MikamiUitOpen | 0:f177013dc4fc | 58 | WriteString(str); |
MikamiUitOpen | 0:f177013dc4fc | 59 | } |
MikamiUitOpen | 0:f177013dc4fc | 60 | |
MikamiUitOpen | 0:f177013dc4fc | 61 | // Clear of specified line |
MikamiUitOpen | 0:f177013dc4fc | 62 | void Aqm1602::ClearLine(uint8_t line) |
MikamiUitOpen | 0:f177013dc4fc | 63 | { |
MikamiUitOpen | 0:f177013dc4fc | 64 | SetXY(0, line); |
MikamiUitOpen | 0:f177013dc4fc | 65 | for (int n=0; n<N_CHR; n++) |
MikamiUitOpen | 0:f177013dc4fc | 66 | WriteString(" "); |
MikamiUitOpen | 0:f177013dc4fc | 67 | } |
MikamiUitOpen | 0:f177013dc4fc | 68 | |
MikamiUitOpen | 0:f177013dc4fc | 69 | // Set contrast |
MikamiUitOpen | 0:f177013dc4fc | 70 | void Aqm1602::SetContrast(uint8_t c) |
MikamiUitOpen | 0:f177013dc4fc | 71 | { |
MikamiUitOpen | 0:f177013dc4fc | 72 | WriteCmd(0x39); |
MikamiUitOpen | 0:f177013dc4fc | 73 | WriteCmd(0x70 | (c & 0x0f)); // Lower 4 bits |
MikamiUitOpen | 0:f177013dc4fc | 74 | WriteCmd(0x5C | ((c >> 4) & 0x03)); // Higher 2 bits |
MikamiUitOpen | 0:f177013dc4fc | 75 | WriteCmd(0x38); |
MikamiUitOpen | 0:f177013dc4fc | 76 | } |
MikamiUitOpen | 0:f177013dc4fc | 77 | |
MikamiUitOpen | 0:f177013dc4fc | 78 | //--------------------------------------------------- |
MikamiUitOpen | 0:f177013dc4fc | 79 | // Following functions: private |
MikamiUitOpen | 0:f177013dc4fc | 80 | |
MikamiUitOpen | 0:f177013dc4fc | 81 | // Send command and data |
MikamiUitOpen | 3:414f98234c94 | 82 | bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data) |
MikamiUitOpen | 0:f177013dc4fc | 83 | { |
MikamiUitOpen | 0:f177013dc4fc | 84 | char tx[2] = { cmdData, data }; |
MikamiUitOpen | 3:414f98234c94 | 85 | int rt = i2c_.write(LCD_ADDRESS_, tx, 2); |
MikamiUitOpen | 7:5375acc9a74a | 86 | wait_us(30); |
MikamiUitOpen | 3:414f98234c94 | 87 | return (rt == 0) ? true : false; |
MikamiUitOpen | 0:f177013dc4fc | 88 | } |
MikamiUitOpen | 0:f177013dc4fc | 89 | } |
MikamiUitOpen | 0:f177013dc4fc | 90 |