A library for AQM0802A I2C connecting LCD module.

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?

UserRevisionLine numberNew 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 }