waaaa

Dependencies:   mbed

Committer:
M_souta
Date:
Thu Nov 07 11:15:29 2019 +0000
Revision:
1:9b6f10b4bc71
Parent:
0:cb29cf2767cd
ver2.0.1

Who changed what in which revision?

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