A library for AQM0802A I2C connecting LCD module.

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers KuAQM0802A.cpp Source File

KuAQM0802A.cpp

00001 #include "KuAQM0802A.h"
00002 
00003 const int KU_AQM0802A_I2C_ADDR = 0x3E << 1; // 0x7C
00004 const int KU_AQM0802A_INITIAL_CONTRAST = 35;
00005 
00006 KuAQM0802A::KuAQM0802A(I2C &i2c_) : i2c(i2c_)
00007 {
00008     reset();
00009 }
00010 
00011 KuAQM0802A::~KuAQM0802A()
00012 {
00013 }
00014 
00015 /**
00016  * Reset AQM0802A LCD
00017  */
00018 void KuAQM0802A::reset() {
00019     // wait 40 msec
00020     wait(0.04);
00021     // Function set (to Normal Mode)
00022     send_cmd(0x38);
00023     // Function set (to Extention Mode)
00024     send_cmd(0x39);
00025     // EntryMode (Left to Right, No Shift)
00026     send_cmd(0x04);
00027     // Interval OSC frequency
00028     send_cmd(0x14);
00029     // Contrast (Low bits)
00030     send_cmd(0x70 | (KU_AQM0802A_INITIAL_CONTRAST & 0xF));
00031     // Icon on (0x08) / Booster circuit on (0x04) / Contrast (High bits)
00032     send_cmd(0x50 | 0x08 | 0x04 | ((KU_AQM0802A_INITIAL_CONTRAST >> 4) & 0x3));
00033     // Follower control
00034     send_cmd(0x6C);
00035     wait(0.2);
00036     // Function set (to Normal Mode)
00037     send_cmd(0x38);
00038     // Display On
00039     send_cmd(0x0C);
00040     // Clear Display
00041     send_cmd(0x01);
00042     wait(0.2);
00043 }
00044 
00045 /**
00046  * Locate cursor
00047  */
00048 void KuAQM0802A::locate(unsigned int x, unsigned int y) {
00049   send_cmd(0x80 | (y * 0x40 + x));
00050 }
00051 
00052 /**
00053  * Print a character
00054  */
00055 void KuAQM0802A::print_char(const int character) {
00056     send(false, true, character);
00057 }
00058 
00059 /**
00060  * Change LCD contrast (0-63)
00061  */
00062 void KuAQM0802A::set_contrast(unsigned int c) {
00063   send_cmd(0x39);
00064   send_cmd(0x70 | (c & 0xF));                      // Contrast Set (Low bits)
00065   send_cmd(0x50 | 0x08 | 0x40 | ((c >> 4) & 0x3)); // Icon on / Booster circuit on / Contrast Set (High bits)
00066   send_cmd(0x38);
00067 }
00068 
00069 /**
00070  * Send an AQM0802A command
00071  */
00072 void KuAQM0802A::send_cmd(char cmd) {
00073     send(false, false, cmd);
00074 }
00075 
00076 /**
00077  * Send raw code.
00078  */
00079 void KuAQM0802A::send(bool CO, bool RS, char code) {
00080     char data[2];
00081     char CObit = CO ? 0x80 : 0x00;
00082     char RSbit = RS ? 0x40 : 0x00;
00083     data[0] = CObit | RSbit;
00084     data[1] = code;
00085     i2c.write(KU_AQM0802A_I2C_ADDR, data, 2);
00086 }