library for aqm0802
Dependents: 00_yotsuba 10_motor-test 00_yotsuba 200_yotsuba_21
Diff: aqm0802.cpp
- Revision:
- 0:f86833c58a5f
- Child:
- 1:ab257f9b56d2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aqm0802.cpp Tue Jan 28 08:03:22 2020 +0000 @@ -0,0 +1,87 @@ +#include "aqm0802.h" + +aqm0802::aqm0802(PinName sda, PinName scl) + : i2c_(sda, scl) +{ + wait_ms(40); + // LCD initialize + cmd(0x39); // function set + cmd(0x14); // interval osc + cmd(0x70); // contrast Low + cmd(0x56); // contast High/icon/power + cmd(0x6C); // follower control + wait_ms(200); + cmd(0x38); // function set + cmd(0x0C); // Display On + cmd(0x01); // Clear Display + wait_ms(200); +} + +void aqm0802::cmd(char x) +{ + char data[2]; + data[0] = 0x00; // CO = 0,RS = 0 + data[1] = x; + i2c_.write(AQCM0802_addr, data, 2); +} + +void aqm0802::contdata(char x) +{ + char data[2]; + data[0] = 0xC0; //0b11000000 CO = 1, RS = 1 + data[1] = x; + i2c_.write(AQCM0802_addr, data, 2); +} + +void aqm0802::lastdata(char x) +{ + char data[2]; + data[0] = 0x40; //0b11000000 CO = 0, RS = 1 + data[1] = x; + i2c_.write(AQCM0802_addr, data, 2); +} + +void aqm0802::print(const char *s) +{ + while(*s) { + if (*(s + 1)) { + contdata(*s); + } else { + lastdata(*s); + } + s++; + } +} + +void aqm0802::print(int num) +{ + char itoa[8]; + sprintf(itoa, "%d", num); + print(itoa); +} + +void aqm0802::setCursor(uint8_t x,uint8_t y) +{ + cmd(0x80 | (y*0x40 + x)); +} + +void aqm0802::setCG(int src,int dst,int len) +{ + cmd(0x38); + cmd(0x40 + dst); + + for (int i = 0;i < len;i++) contdata(cg[src + i] * (src>=0)); +} + +void aqm0802::setContrast(uint8_t c) +{ + cmd(0x39); + cmd(0x70 | (c & 0x0f)); // contrast Low + cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power + cmd(0x38); +} + +void aqm0802::clear() +{ + cmd(0x01); +} \ No newline at end of file