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
- Committer:
- MikamiUitOpen
- Date:
- 2015-07-06
- Revision:
- 4:c943f05b7843
- Parent:
- 3:414f98234c94
- Child:
- 7:5375acc9a74a
File content as of revision 4:c943f05b7843:
//------------------------------------------------------- // Class for LCD, AQM1602XA-RN-GBW // // 2015/07/06, Copyright (c) 2015 MIKAMI, Naoki //------------------------------------------------------- #include "AQM1602.hpp" namespace Mikami { // Constructor Aqm1602::Aqm1602(PinName sda, PinName scl, uint32_t clock, bool cursor, bool blink) : i2c_(sda, scl) { if (clock != 100000) i2c_.frequency(clock); wait_ms(40); connected_ = Clear(); // Clear display WriteCmd(0x39); // To extended command if (!connected_) { fprintf(stderr, "\r\nLCD AQM1602 not connected\r\n"); return; } WriteCmd(0x14); // Internal OSC frequency WriteCmd(0x70 | 0x00); // Contrast set WriteCmd(0x54 | 0x02); // Power/ICON/Contrast control WriteCmd(0x6C); // Follower control wait_ms(200); WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots WriteCmd(0x0C | (cursor << 1) | blink); } // All clear bool Aqm1602::Clear() { bool ok = WriteCmd(0x01); wait_ms(50); return ok; } // Write string void Aqm1602::WriteString(const char str[]) { for (int n=0; n<N_CHR; n++) if (str[n] == 0) break; else WriteChar(str[n]); } // Write string from specified position void Aqm1602::WriteStringXY(const char str[], uint8_t x, uint8_t y) { SetXY(x, y); WriteString(str); } // Clear of specified line void Aqm1602::ClearLine(uint8_t line) { SetXY(0, line); for (int n=0; n<N_CHR; n++) WriteString(" "); } // Set contrast void Aqm1602::SetContrast(uint8_t c) { WriteCmd(0x39); WriteCmd(0x70 | (c & 0x0f)); // Lower 4 bits WriteCmd(0x5C | ((c >> 4) & 0x03)); // Higher 2 bits WriteCmd(0x38); } //--------------------------------------------------- // Following functions: private // Send command and data bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data) { char tx[2] = { cmdData, data }; int rt = i2c_.write(LCD_ADDRESS_, tx, 2); return (rt == 0) ? true : false; } }