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:
- 2016-04-01
- Revision:
- 9:74a845df6e7a
- Parent:
- 8:854c244a7863
- Child:
- 10:6e6c0f24e81f
File content as of revision 9:74a845df6e7a:
//------------------------------------------------------- // Class for LCD, AQM1602XA-RN-GBW // Do not use mbed Rev.109, using Nucleo-F401/441 // // 2016/04/01, Copyright (c) 2016 MIKAMI, Naoki //------------------------------------------------------- #include "AQM1602.hpp" namespace Mikami { // Constructor Aqm1602::Aqm1602(PinName sda, PinName scl, uint32_t clock, bool cursor, bool blink) : i2cPtr_(new I2C(sda, scl)), i2c_(*i2cPtr_) { Init(clock, cursor, blink); } Aqm1602::Aqm1602(I2C &i2c, uint32_t clock, bool cursor, bool blink) : i2cPtr_(NULL), i2c_(i2c) { Init(clock, cursor, 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 // Initialize void Aqm1602::Init(uint32_t clock, bool cursor, bool blink) { if (clock != 100000) i2c_.frequency(clock); wait_ms(40); connected_ = Clear(); // Clear display if (!connected_) { fprintf(stderr, "\r\nLCD AQM1602 not connected\r\n"); return; } WriteCmd(0x39); // To extended command 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); } // 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); wait_us(30); return (rt == 0) ? true : false; } }