aa

Dependencies:   mbed

Committer:
yabahiro
Date:
Thu Nov 07 11:01:22 2019 +0000
Revision:
3:be82925eced0
Parent:
0:0311bb0b38f7
aa;

Who changed what in which revision?

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