A library for AQM0802A I2C connecting LCD module.
KuAQM0802A.cpp@1:39cf7f91a7ba, 2014-08-13 (annotated)
- Committer:
- kunichiko
- Date:
- Wed Aug 13 13:14:21 2014 +0000
- Revision:
- 1:39cf7f91a7ba
- Parent:
- 0:414db8b8aaad
Replace print() with Stream's printf() method.
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 | 1:39cf7f91a7ba | 53 | * Print a character |
kunichiko | 0:414db8b8aaad | 54 | */ |
kunichiko | 1:39cf7f91a7ba | 55 | void KuAQM0802A::print_char(const int character) { |
kunichiko | 1:39cf7f91a7ba | 56 | send(false, true, character); |
kunichiko | 0:414db8b8aaad | 57 | } |
kunichiko | 0:414db8b8aaad | 58 | |
kunichiko | 0:414db8b8aaad | 59 | /** |
kunichiko | 0:414db8b8aaad | 60 | * Change LCD contrast (0-63) |
kunichiko | 0:414db8b8aaad | 61 | */ |
kunichiko | 0:414db8b8aaad | 62 | void KuAQM0802A::set_contrast(unsigned int c) { |
kunichiko | 0:414db8b8aaad | 63 | send_cmd(0x39); |
kunichiko | 0:414db8b8aaad | 64 | send_cmd(0x70 | (c & 0xF)); // Contrast Set (Low bits) |
kunichiko | 0:414db8b8aaad | 65 | send_cmd(0x50 | 0x08 | 0x40 | ((c >> 4) & 0x3)); // Icon on / Booster circuit on / Contrast Set (High bits) |
kunichiko | 0:414db8b8aaad | 66 | send_cmd(0x38); |
kunichiko | 0:414db8b8aaad | 67 | } |
kunichiko | 0:414db8b8aaad | 68 | |
kunichiko | 0:414db8b8aaad | 69 | /** |
kunichiko | 0:414db8b8aaad | 70 | * Send an AQM0802A command |
kunichiko | 0:414db8b8aaad | 71 | */ |
kunichiko | 0:414db8b8aaad | 72 | void KuAQM0802A::send_cmd(char cmd) { |
kunichiko | 0:414db8b8aaad | 73 | send(false, false, cmd); |
kunichiko | 0:414db8b8aaad | 74 | } |
kunichiko | 0:414db8b8aaad | 75 | |
kunichiko | 0:414db8b8aaad | 76 | /** |
kunichiko | 0:414db8b8aaad | 77 | * Send raw code. |
kunichiko | 0:414db8b8aaad | 78 | */ |
kunichiko | 0:414db8b8aaad | 79 | void KuAQM0802A::send(bool CO, bool RS, char code) { |
kunichiko | 0:414db8b8aaad | 80 | char data[2]; |
kunichiko | 0:414db8b8aaad | 81 | char CObit = CO ? 0x80 : 0x00; |
kunichiko | 0:414db8b8aaad | 82 | char RSbit = RS ? 0x40 : 0x00; |
kunichiko | 0:414db8b8aaad | 83 | data[0] = CObit | RSbit; |
kunichiko | 0:414db8b8aaad | 84 | data[1] = code; |
kunichiko | 0:414db8b8aaad | 85 | i2c.write(KU_AQM0802A_I2C_ADDR, data, 2); |
kunichiko | 0:414db8b8aaad | 86 | } |