A library for AQM0802A I2C connecting LCD module.
KuAQM0802A.cpp
- Committer:
- kunichiko
- Date:
- 2014-08-13
- Revision:
- 1:39cf7f91a7ba
- Parent:
- 0:414db8b8aaad
File content as of revision 1:39cf7f91a7ba:
#include "KuAQM0802A.h" const int KU_AQM0802A_I2C_ADDR = 0x3E << 1; // 0x7C const int KU_AQM0802A_INITIAL_CONTRAST = 35; KuAQM0802A::KuAQM0802A(I2C &i2c_) : i2c(i2c_) { reset(); } KuAQM0802A::~KuAQM0802A() { } /** * Reset AQM0802A LCD */ void KuAQM0802A::reset() { // wait 40 msec wait(0.04); // Function set (to Normal Mode) send_cmd(0x38); // Function set (to Extention Mode) send_cmd(0x39); // EntryMode (Left to Right, No Shift) send_cmd(0x04); // Interval OSC frequency send_cmd(0x14); // Contrast (Low bits) send_cmd(0x70 | (KU_AQM0802A_INITIAL_CONTRAST & 0xF)); // Icon on (0x08) / Booster circuit on (0x04) / Contrast (High bits) send_cmd(0x50 | 0x08 | 0x04 | ((KU_AQM0802A_INITIAL_CONTRAST >> 4) & 0x3)); // Follower control send_cmd(0x6C); wait(0.2); // Function set (to Normal Mode) send_cmd(0x38); // Display On send_cmd(0x0C); // Clear Display send_cmd(0x01); wait(0.2); } /** * Locate cursor */ void KuAQM0802A::locate(unsigned int x, unsigned int y) { send_cmd(0x80 | (y * 0x40 + x)); } /** * Print a character */ void KuAQM0802A::print_char(const int character) { send(false, true, character); } /** * Change LCD contrast (0-63) */ void KuAQM0802A::set_contrast(unsigned int c) { send_cmd(0x39); send_cmd(0x70 | (c & 0xF)); // Contrast Set (Low bits) send_cmd(0x50 | 0x08 | 0x40 | ((c >> 4) & 0x3)); // Icon on / Booster circuit on / Contrast Set (High bits) send_cmd(0x38); } /** * Send an AQM0802A command */ void KuAQM0802A::send_cmd(char cmd) { send(false, false, cmd); } /** * Send raw code. */ void KuAQM0802A::send(bool CO, bool RS, char code) { char data[2]; char CObit = CO ? 0x80 : 0x00; char RSbit = RS ? 0x40 : 0x00; data[0] = CObit | RSbit; data[1] = code; i2c.write(KU_AQM0802A_I2C_ADDR, data, 2); }