You can output chars to AQM1602 with printf(). ex. lcd.printf("iter: %5.5d.\r\n", iter);

Dependents:   aqm1602 FCAS-M101V1

Revision:
0:4d904885c9b8
Child:
1:ac441b938a80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AQM1602.cpp	Fri Oct 02 06:13:12 2015 +0000
@@ -0,0 +1,173 @@
+#include "AQM1602.h"
+
+AQM1602::AQM1602(PinName sda, PinName scl, char address)
+    : i2c(sda, scl), addr(address)
+{
+    init();
+}
+AQM1602::AQM1602(I2C &_i2c, char address)
+    : i2c(_i2c), addr(address)
+{
+    init();
+}
+
+bool AQM1602::cmd(char chr)
+{
+    buf[0]= 0x00;
+    buf[1]= chr;
+    // if write success:0, other: err code.
+    int status= i2c.write(addr, buf, 2);
+    wait_ms(3);
+
+    if(status == 0)
+        return true;
+    else
+        return false;
+}
+
+int AQM1602::_putc(int val)     // for printf()
+{
+    if (val == '\n') {
+        _column = 0;
+        _row = (_row + 1) % 2;
+    } else {
+        locate(_column, _row);
+        buf[0]= 0x40;
+        buf[1]= val;
+        i2c.write(addr, buf, 2);
+
+        _column++;
+        if (_column >= 16) {
+            _column = 0;
+            _row = (_row + 1) % 2;
+        }
+    }
+    wait_ms(1);
+    return val;
+}
+
+// for "Stream"
+int AQM1602::_getc()
+{
+    return -1;
+}
+
+void AQM1602::locate(int col, int row)
+{
+    cmd(0x80 + row * 0x40 + col);
+    return;
+}
+
+void AQM1602::init()
+{
+    _column= _row= 0;
+    buf[0]= 0x00;
+    buf[1]= 0x00;
+    buf[2]= 0x00;
+    wait4cmd= 3;
+    valContrast= 0x23;
+
+    wait_ms(wait4cmd);
+    // Function set = 0x38; 0b0011 1000
+    // Function set = 0x39; 0b0011 1001
+    this->clearIS();
+    this->setIS();
+    
+    // ** must be IS=1. **
+    // Internal OSC frequency = 0x14; 0b0001 0100
+    this->cmd(0x14);
+    wait_ms(wait4cmd);
+
+    // Power/ICON/Contrast control = 0x56; 0b0101 0110
+    // Contrast set = 0x70; 0b0111 0011
+    this->setContrast(valContrast, false);
+
+    // Follower control = 0x6C; 0b0110 1100
+    this->cmd(0x6C);
+    wait_ms(220);
+
+    this->clearIS();
+    this->setDispFlag(true, true, true);
+    this->clear();
+    
+    // Function set = 0x38; 0b0011 1000
+    // Display ON/OFF control = 0x0C; 0b 0000 1DCB
+    // Clear Display = 0x01; 0b 0000 0001
+    
+    return;
+}
+
+void AQM1602::setContrast(char val, bool ctrlIS)
+{
+// C5,C4,C3,C2,C1,C0 can only be set when internal follower is used (OPF1=0,OPF2=0).
+// They can more precisely adjust the input reference voltage of V0 generator.
+// The details please refer to the supply voltage for LCD driver.
+    
+    if(val > 0x3f)
+        return;
+        
+    valContrast= val;
+    // Cmd of Contrast-setting must be setted IS.
+    if(ctrlIS)
+        this->setIS();
+    
+    // 0b 0101 01++
+    this->cmd(0x54+ (val>>4));
+    wait_ms(wait4cmd);
+    
+    // 0b 0111 ++++
+    this->cmd(0x70+ (val&0x0f));
+    wait_ms(wait4cmd);
+    
+    if(ctrlIS)
+        this->clearIS();
+    
+    wait_ms(wait4cmd);
+    return;
+}
+
+void AQM1602::clear()
+{
+    this->cmd(0x01);
+    locate(0, 0);
+    wait_ms(wait4cmd);
+    return;
+}
+
+void AQM1602::setDispFlag(bool disp, bool cursor, bool blink)
+{
+    // set On/Off. b3=1, b2:Disp, b1:Cursor, b0:blink.
+    char tmp=  0x08;
+    if(disp)
+        tmp += 0x04;
+    if(cursor)
+        tmp += 0x02;
+    if(blink)
+        tmp += 0x01;
+    this->cmd(tmp);
+    this->cmd(0x01);    //Clear Disp.
+    wait_ms(wait4cmd);
+    return;
+}
+
+// ******************** FUNCTION SET **********************
+// IS func-set -> 0b 001L NH0I
+//          L: Interface data Length. 1:8bit-bus, 0:4bit.
+//          N: Display line Number. 1: 2 lines, 0: 1 line.
+//          H: Double Hight font. if H=1 and N=1, 5x16 dots.
+//              0: Normal (5x8 dots).
+//          I: Normal / Extentsion Instruction. 1: Ext Instruction, 0: Norm.
+void AQM1602::setIS()
+{
+    this->cmd(0x39);
+    wait_ms(wait4cmd);
+    return;
+}
+void AQM1602::clearIS()
+{
+    this->cmd(0x38);
+    wait_ms(wait4cmd);
+    return;
+}
+
+// EOF
\ No newline at end of file