SO1602A Lib. SO1602A is Organic LED, has 16 chars and 2 lines. This lib supports printf() of C-Language. http://akizukidenshi.com/catalog/g/gP-08276/

Dependents:   NEW_LineTraceHub NEW_LineTraceHub_2 ColorSensorTest

Committer:
AkinoriHashimoto
Date:
Wed Sep 09 00:04:00 2015 +0000
Revision:
1:eef15a16fe7a
Parent:
0:d8b95544d238
Child:
2:45791c1064f6
Write example code.; Make setDisplayFlag Function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AkinoriHashimoto 0:d8b95544d238 1 #include "SO1602A.h"
AkinoriHashimoto 0:d8b95544d238 2
AkinoriHashimoto 0:d8b95544d238 3 SO1602A::SO1602A (PinName sda, PinName scl, char address)
AkinoriHashimoto 0:d8b95544d238 4 : i2c(sda, scl), addr(address)
AkinoriHashimoto 0:d8b95544d238 5 {
AkinoriHashimoto 0:d8b95544d238 6 init();
AkinoriHashimoto 0:d8b95544d238 7 }
AkinoriHashimoto 0:d8b95544d238 8 SO1602A::SO1602A (I2C &_i2c, char address)
AkinoriHashimoto 0:d8b95544d238 9 : i2c(_i2c), addr(address)
AkinoriHashimoto 0:d8b95544d238 10 {
AkinoriHashimoto 0:d8b95544d238 11 init();
AkinoriHashimoto 0:d8b95544d238 12 }
AkinoriHashimoto 0:d8b95544d238 13
AkinoriHashimoto 0:d8b95544d238 14 bool SO1602A::cmd(char chr)
AkinoriHashimoto 0:d8b95544d238 15 {
AkinoriHashimoto 0:d8b95544d238 16 buf[0]= 0x00;
AkinoriHashimoto 0:d8b95544d238 17 buf[1]= chr;
AkinoriHashimoto 0:d8b95544d238 18 // if write success:0, other: err code.
AkinoriHashimoto 0:d8b95544d238 19 int status= i2c.write(addr, buf, 2);
AkinoriHashimoto 0:d8b95544d238 20 wait_ms(3);
AkinoriHashimoto 0:d8b95544d238 21
AkinoriHashimoto 0:d8b95544d238 22 if(status == 0)
AkinoriHashimoto 0:d8b95544d238 23 return true;
AkinoriHashimoto 0:d8b95544d238 24 else
AkinoriHashimoto 0:d8b95544d238 25 return false;
AkinoriHashimoto 0:d8b95544d238 26 }
AkinoriHashimoto 0:d8b95544d238 27
AkinoriHashimoto 0:d8b95544d238 28 int SO1602A::_putc(int val) // for printf()
AkinoriHashimoto 0:d8b95544d238 29 {
AkinoriHashimoto 0:d8b95544d238 30 if (val == '\n') {
AkinoriHashimoto 0:d8b95544d238 31 _column = 0;
AkinoriHashimoto 0:d8b95544d238 32 _row = (_row + 1) % 2;
AkinoriHashimoto 0:d8b95544d238 33 } else {
AkinoriHashimoto 0:d8b95544d238 34 locate(_column, _row);
AkinoriHashimoto 0:d8b95544d238 35 buf[0]= 0x40;
AkinoriHashimoto 0:d8b95544d238 36 buf[1]= val;
AkinoriHashimoto 0:d8b95544d238 37 i2c.write(addr, buf, 2);
AkinoriHashimoto 0:d8b95544d238 38
AkinoriHashimoto 0:d8b95544d238 39 _column++;
AkinoriHashimoto 0:d8b95544d238 40 if (_column >= 16) {
AkinoriHashimoto 0:d8b95544d238 41 _column = 0;
AkinoriHashimoto 0:d8b95544d238 42 _row = (_row + 1) % 2;
AkinoriHashimoto 0:d8b95544d238 43 }
AkinoriHashimoto 0:d8b95544d238 44 }
AkinoriHashimoto 0:d8b95544d238 45 wait_ms(1);
AkinoriHashimoto 0:d8b95544d238 46 return val;
AkinoriHashimoto 0:d8b95544d238 47 }
AkinoriHashimoto 0:d8b95544d238 48
AkinoriHashimoto 0:d8b95544d238 49 // for "Stream"
AkinoriHashimoto 0:d8b95544d238 50 int SO1602A::_getc()
AkinoriHashimoto 0:d8b95544d238 51 {
AkinoriHashimoto 0:d8b95544d238 52 return -1;
AkinoriHashimoto 0:d8b95544d238 53 }
AkinoriHashimoto 0:d8b95544d238 54
AkinoriHashimoto 0:d8b95544d238 55 void SO1602A::locate(int col, int row)
AkinoriHashimoto 0:d8b95544d238 56 {
AkinoriHashimoto 0:d8b95544d238 57 cmd(0x80 + row * 0x20 + col);
AkinoriHashimoto 0:d8b95544d238 58 return;
AkinoriHashimoto 0:d8b95544d238 59 }
AkinoriHashimoto 0:d8b95544d238 60
AkinoriHashimoto 0:d8b95544d238 61 void SO1602A::init()
AkinoriHashimoto 0:d8b95544d238 62 {
AkinoriHashimoto 0:d8b95544d238 63 _column= _row= 0;
AkinoriHashimoto 0:d8b95544d238 64 buf[0]= 0x00;
AkinoriHashimoto 0:d8b95544d238 65 buf[1]= 0x00;
AkinoriHashimoto 0:d8b95544d238 66 buf[2]= 0x00;
AkinoriHashimoto 0:d8b95544d238 67
AkinoriHashimoto 0:d8b95544d238 68 wait_ms(10);
AkinoriHashimoto 0:d8b95544d238 69 this->clear();
AkinoriHashimoto 0:d8b95544d238 70 this->cmd(0x02); //Return Home.
AkinoriHashimoto 1:eef15a16fe7a 71 this->setDispFlag(true, true, true);
AkinoriHashimoto 1:eef15a16fe7a 72
AkinoriHashimoto 0:d8b95544d238 73 return;
AkinoriHashimoto 0:d8b95544d238 74 }
AkinoriHashimoto 0:d8b95544d238 75
AkinoriHashimoto 0:d8b95544d238 76 void SO1602A::setContrast(char val)
AkinoriHashimoto 0:d8b95544d238 77 {
AkinoriHashimoto 0:d8b95544d238 78 // Cmd of Contrast-setting must be setted Ext-Func-Register RE & SD.
AkinoriHashimoto 0:d8b95544d238 79 this->setRE();
AkinoriHashimoto 0:d8b95544d238 80 this->setSD();
AkinoriHashimoto 0:d8b95544d238 81 // Double Byte Command. The contrast has 256 steps, and increase as the value.
AkinoriHashimoto 0:d8b95544d238 82 this->cmd(0x81);
AkinoriHashimoto 0:d8b95544d238 83 this->cmd(val);
AkinoriHashimoto 0:d8b95544d238 84 this->clearSD();
AkinoriHashimoto 0:d8b95544d238 85 this->clearRE();
AkinoriHashimoto 0:d8b95544d238 86 wait_ms(100);
AkinoriHashimoto 0:d8b95544d238 87 return;
AkinoriHashimoto 0:d8b95544d238 88 }
AkinoriHashimoto 0:d8b95544d238 89
AkinoriHashimoto 1:eef15a16fe7a 90 void setDispFlag(bool disp, bool cursor, bool blink)
AkinoriHashimoto 1:eef15a16fe7a 91 {
AkinoriHashimoto 1:eef15a16fe7a 92 // set On/Off. b3=1, b2:Disp, b1:Cursor, b0:blink.
AkinoriHashimoto 1:eef15a16fe7a 93 char tmp= 0x08;
AkinoriHashimoto 1:eef15a16fe7a 94 if(disp)
AkinoriHashimoto 1:eef15a16fe7a 95 tmp += 0x04;
AkinoriHashimoto 1:eef15a16fe7a 96 if(cursor)
AkinoriHashimoto 1:eef15a16fe7a 97 tmp += 0x02;
AkinoriHashimoto 1:eef15a16fe7a 98 if(blink)
AkinoriHashimoto 1:eef15a16fe7a 99 tmp += 0x01;
AkinoriHashimoto 1:eef15a16fe7a 100 this->cmd(tmp);
AkinoriHashimoto 1:eef15a16fe7a 101 this->cmd(0x01); //Clear Disp.
AkinoriHashimoto 1:eef15a16fe7a 102 wait_ms(20);
AkinoriHashimoto 1:eef15a16fe7a 103 return;
AkinoriHashimoto 1:eef15a16fe7a 104 }
AkinoriHashimoto 1:eef15a16fe7a 105
AkinoriHashimoto 0:d8b95544d238 106 void SO1602A::clear()
AkinoriHashimoto 0:d8b95544d238 107 {
AkinoriHashimoto 0:d8b95544d238 108 this->cmd(0x01);
AkinoriHashimoto 0:d8b95544d238 109 locate(0, 0);
AkinoriHashimoto 0:d8b95544d238 110 wait_ms(5);
AkinoriHashimoto 0:d8b95544d238 111 return;
AkinoriHashimoto 0:d8b95544d238 112 }
AkinoriHashimoto 0:d8b95544d238 113
AkinoriHashimoto 0:d8b95544d238 114 // ******************** FUNCTION SET **********************
AkinoriHashimoto 0:d8b95544d238 115 // RE & IS func-set -> b7-4: 001*.
AkinoriHashimoto 0:d8b95544d238 116 // b3: dispLine; 1(2&4), 0(1&3).
AkinoriHashimoto 0:d8b95544d238 117 // RE: b1, IS: b0.
AkinoriHashimoto 0:d8b95544d238 118 void SO1602A::setRE()
AkinoriHashimoto 0:d8b95544d238 119 {
AkinoriHashimoto 0:d8b95544d238 120 this->cmd(0x2a);
AkinoriHashimoto 0:d8b95544d238 121 return;
AkinoriHashimoto 0:d8b95544d238 122 }
AkinoriHashimoto 0:d8b95544d238 123 void SO1602A::clearRE()
AkinoriHashimoto 0:d8b95544d238 124 {
AkinoriHashimoto 0:d8b95544d238 125 this->cmd(0x28);
AkinoriHashimoto 0:d8b95544d238 126 return;
AkinoriHashimoto 0:d8b95544d238 127 }
AkinoriHashimoto 0:d8b95544d238 128 // Extention Register; SD.
AkinoriHashimoto 0:d8b95544d238 129 // RE setted, 0b 0111 100F. F= Flag; 0: OLED-cmd is disable.
AkinoriHashimoto 0:d8b95544d238 130 // 1: enable.
AkinoriHashimoto 0:d8b95544d238 131 void SO1602A::setSD()
AkinoriHashimoto 0:d8b95544d238 132 {
AkinoriHashimoto 0:d8b95544d238 133 this->cmd(0x79);
AkinoriHashimoto 0:d8b95544d238 134 return;
AkinoriHashimoto 0:d8b95544d238 135 }
AkinoriHashimoto 0:d8b95544d238 136 void SO1602A::clearSD()
AkinoriHashimoto 0:d8b95544d238 137 {
AkinoriHashimoto 0:d8b95544d238 138 this->cmd(0x78);
AkinoriHashimoto 0:d8b95544d238 139 return;
AkinoriHashimoto 0:d8b95544d238 140 }
AkinoriHashimoto 0:d8b95544d238 141
AkinoriHashimoto 0:d8b95544d238 142 // EOF