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-11-15
- Revision:
- 7:5375acc9a74a
- Parent:
- 4:c943f05b7843
- Child:
- 8:854c244a7863
File content as of revision 7:5375acc9a74a:
//------------------------------------------------------- // Class for LCD, AQM1602XA-RN-GBW // Do not use mbed Rev.109, using Nucleo-F401/441 // // 2015/11/15, 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(50); connected_ = WriteCmd(0x38); 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(0x01); WriteCmd(0x38); // data length:8-bit, 2-line, 5×8 dots WriteCmd(0x0C | (cursor << 1) | blink); } // All clear void Aqm1602::Clear() { WriteCmd(0x01); wait_ms(2); } // 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); wait_us(30); return (rt == 0) ? true : false; } }