A library for AQM0802A I2C connecting LCD module.
KuAQM0802A.cpp@0:414db8b8aaad, 2014-07-20 (annotated)
- Committer:
- kunichiko
- Date:
- Sun Jul 20 14:28:45 2014 +0000
- Revision:
- 0:414db8b8aaad
- Child:
- 1:39cf7f91a7ba
Initial version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kunichiko | 0:414db8b8aaad | 1 | #include "KuAQM0802A.h" |
kunichiko | 0:414db8b8aaad | 2 | |
kunichiko | 0:414db8b8aaad | 3 | const int KU_AQM0802A_I2C_ADDR = 0x3E << 1; // 0x7C |
kunichiko | 0:414db8b8aaad | 4 | const int KU_AQM0802A_INITIAL_CONTRAST = 35; |
kunichiko | 0:414db8b8aaad | 5 | |
kunichiko | 0:414db8b8aaad | 6 | KuAQM0802A::KuAQM0802A(I2C &i2c_) : i2c(i2c_) |
kunichiko | 0:414db8b8aaad | 7 | { |
kunichiko | 0:414db8b8aaad | 8 | reset(); |
kunichiko | 0:414db8b8aaad | 9 | } |
kunichiko | 0:414db8b8aaad | 10 | |
kunichiko | 0:414db8b8aaad | 11 | KuAQM0802A::~KuAQM0802A() |
kunichiko | 0:414db8b8aaad | 12 | { |
kunichiko | 0:414db8b8aaad | 13 | } |
kunichiko | 0:414db8b8aaad | 14 | |
kunichiko | 0:414db8b8aaad | 15 | /** |
kunichiko | 0:414db8b8aaad | 16 | * Reset AQM0802A LCD |
kunichiko | 0:414db8b8aaad | 17 | */ |
kunichiko | 0:414db8b8aaad | 18 | void KuAQM0802A::reset() { |
kunichiko | 0:414db8b8aaad | 19 | // wait 40 msec |
kunichiko | 0:414db8b8aaad | 20 | wait(0.04); |
kunichiko | 0:414db8b8aaad | 21 | // Function set (to Normal Mode) |
kunichiko | 0:414db8b8aaad | 22 | send_cmd(0x38); |
kunichiko | 0:414db8b8aaad | 23 | // Function set (to Extention Mode) |
kunichiko | 0:414db8b8aaad | 24 | send_cmd(0x39); |
kunichiko | 0:414db8b8aaad | 25 | // EntryMode (Left to Right, No Shift) |
kunichiko | 0:414db8b8aaad | 26 | send_cmd(0x04); |
kunichiko | 0:414db8b8aaad | 27 | // Interval OSC frequency |
kunichiko | 0:414db8b8aaad | 28 | send_cmd(0x14); |
kunichiko | 0:414db8b8aaad | 29 | // Contrast (Low bits) |
kunichiko | 0:414db8b8aaad | 30 | send_cmd(0x70 | (KU_AQM0802A_INITIAL_CONTRAST & 0xF)); |
kunichiko | 0:414db8b8aaad | 31 | // Icon on (0x08) / Booster circuit on (0x04) / Contrast (High bits) |
kunichiko | 0:414db8b8aaad | 32 | send_cmd(0x50 | 0x08 | 0x04 | ((KU_AQM0802A_INITIAL_CONTRAST >> 4) & 0x3)); |
kunichiko | 0:414db8b8aaad | 33 | // Follower control |
kunichiko | 0:414db8b8aaad | 34 | send_cmd(0x6C); |
kunichiko | 0:414db8b8aaad | 35 | wait(0.2); |
kunichiko | 0:414db8b8aaad | 36 | // Function set (to Normal Mode) |
kunichiko | 0:414db8b8aaad | 37 | send_cmd(0x38); |
kunichiko | 0:414db8b8aaad | 38 | // Display On |
kunichiko | 0:414db8b8aaad | 39 | send_cmd(0x0C); |
kunichiko | 0:414db8b8aaad | 40 | // Clear Display |
kunichiko | 0:414db8b8aaad | 41 | send_cmd(0x01); |
kunichiko | 0:414db8b8aaad | 42 | wait(0.2); |
kunichiko | 0:414db8b8aaad | 43 | } |
kunichiko | 0:414db8b8aaad | 44 | |
kunichiko | 0:414db8b8aaad | 45 | /** |
kunichiko | 0:414db8b8aaad | 46 | * Locate cursor |
kunichiko | 0:414db8b8aaad | 47 | */ |
kunichiko | 0:414db8b8aaad | 48 | void KuAQM0802A::locate(unsigned int x, unsigned int y) { |
kunichiko | 0:414db8b8aaad | 49 | send_cmd(0x80 | (y * 0x40 + x)); |
kunichiko | 0:414db8b8aaad | 50 | } |
kunichiko | 0:414db8b8aaad | 51 | |
kunichiko | 0:414db8b8aaad | 52 | /** |
kunichiko | 0:414db8b8aaad | 53 | * Print a string |
kunichiko | 0:414db8b8aaad | 54 | */ |
kunichiko | 0:414db8b8aaad | 55 | void KuAQM0802A::print(const char *str) { |
kunichiko | 0:414db8b8aaad | 56 | while(*str) { |
kunichiko | 0:414db8b8aaad | 57 | bool last; |
kunichiko | 0:414db8b8aaad | 58 | if(*(str + 1)) { |
kunichiko | 0:414db8b8aaad | 59 | last = false; |
kunichiko | 0:414db8b8aaad | 60 | } else { |
kunichiko | 0:414db8b8aaad | 61 | last = true; |
kunichiko | 0:414db8b8aaad | 62 | } |
kunichiko | 0:414db8b8aaad | 63 | send(!last, true, *str); |
kunichiko | 0:414db8b8aaad | 64 | str++; |
kunichiko | 0:414db8b8aaad | 65 | } |
kunichiko | 0:414db8b8aaad | 66 | } |
kunichiko | 0:414db8b8aaad | 67 | |
kunichiko | 0:414db8b8aaad | 68 | /** |
kunichiko | 0:414db8b8aaad | 69 | * Change LCD contrast (0-63) |
kunichiko | 0:414db8b8aaad | 70 | */ |
kunichiko | 0:414db8b8aaad | 71 | void KuAQM0802A::set_contrast(unsigned int c) { |
kunichiko | 0:414db8b8aaad | 72 | send_cmd(0x39); |
kunichiko | 0:414db8b8aaad | 73 | send_cmd(0x70 | (c & 0xF)); // Contrast Set (Low bits) |
kunichiko | 0:414db8b8aaad | 74 | send_cmd(0x50 | 0x08 | 0x40 | ((c >> 4) & 0x3)); // Icon on / Booster circuit on / Contrast Set (High bits) |
kunichiko | 0:414db8b8aaad | 75 | send_cmd(0x38); |
kunichiko | 0:414db8b8aaad | 76 | } |
kunichiko | 0:414db8b8aaad | 77 | |
kunichiko | 0:414db8b8aaad | 78 | /** |
kunichiko | 0:414db8b8aaad | 79 | * Send an AQM0802A command |
kunichiko | 0:414db8b8aaad | 80 | */ |
kunichiko | 0:414db8b8aaad | 81 | void KuAQM0802A::send_cmd(char cmd) { |
kunichiko | 0:414db8b8aaad | 82 | send(false, false, cmd); |
kunichiko | 0:414db8b8aaad | 83 | } |
kunichiko | 0:414db8b8aaad | 84 | |
kunichiko | 0:414db8b8aaad | 85 | /** |
kunichiko | 0:414db8b8aaad | 86 | * Send raw code. |
kunichiko | 0:414db8b8aaad | 87 | */ |
kunichiko | 0:414db8b8aaad | 88 | void KuAQM0802A::send(bool CO, bool RS, char code) { |
kunichiko | 0:414db8b8aaad | 89 | char data[2]; |
kunichiko | 0:414db8b8aaad | 90 | char CObit = CO ? 0x80 : 0x00; |
kunichiko | 0:414db8b8aaad | 91 | char RSbit = RS ? 0x40 : 0x00; |
kunichiko | 0:414db8b8aaad | 92 | data[0] = CObit | RSbit; |
kunichiko | 0:414db8b8aaad | 93 | data[1] = code; |
kunichiko | 0:414db8b8aaad | 94 | i2c.write(KU_AQM0802A_I2C_ADDR, data, 2); |
kunichiko | 0:414db8b8aaad | 95 | } |