Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem mbed
AQM0802A.cpp
00001 #include "mbed.h" 00002 #include "AQM0802A.h" 00003 00004 unsigned char mode; 00005 unsigned char contrast = 0; // 0-63 00006 unsigned char contrastFlag = false; 00007 int CGcounter; 00008 int FADEcounter; 00009 00010 void lcd_cmd(char x) { 00011 char data[2]; 00012 data[0] = 0x00; // CO = 0,RS = 0 00013 data[1] = x; 00014 i2c.write(AQCM0802_addr, data, 2); 00015 } 00016 00017 void lcd_contdata(char x) { 00018 char data[2]; 00019 data[0] = 0xC0; //0b11000000 CO = 1, RS = 1 00020 data[1] = x; 00021 i2c.write(AQCM0802_addr, data, 2); 00022 } 00023 00024 void lcd_lastdata(char x) { 00025 char data[2]; 00026 data[0] = 0x40; //0b11000000 CO = 0, RS = 1 00027 data[1] = x; 00028 i2c.write(AQCM0802_addr, data, 2); 00029 } 00030 00031 void lcd_printStr(const char *s) { 00032 while(*s) { 00033 if(*(s + 1)) { 00034 lcd_contdata(*s); 00035 } else { 00036 lcd_lastdata(*s); 00037 } 00038 s++; 00039 } 00040 } 00041 00042 void lcd_printHex(unsigned char num) { 00043 lcd_contdata(num); 00044 } 00045 00046 void lcd_init() { 00047 wait(0.04); 00048 // LCD initialize 00049 lcd_cmd(0x38); // function set 00050 lcd_cmd(0x39); // function set 00051 lcd_cmd(0x04); // EntryModeSet 00052 lcd_cmd(0x14); // interval osc 00053 lcd_cmd(0x70 | (contrast & 0xF)); // contrast Low 00054 lcd_cmd(0x5C | ((contrast >> 4) & 0x3)); // contast High/icon/power 00055 lcd_cmd(0x6C); // follower control 00056 wait(0.2); 00057 lcd_cmd(0x38); // function set 00058 lcd_cmd(0x0C); // Display On 00059 lcd_cmd(0x01); // Clear Display 00060 wait(0.2); // need additional wait to Clear Display 00061 } 00062 00063 void lcd_setCursor(unsigned char x,unsigned char y) { 00064 lcd_cmd(0x80 | (y * 0x40 + x)); 00065 } 00066 00067 unsigned char cg[13 * 8] = { 00068 /* 00069 0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000, 00070 0b00010001,0b00010001,0b00010001,0b00010101,0b00010101,0b00010101,0b00001010,0b00000000, 00071 0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000, 00072 0b00011111,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00000000, 00073 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, 00074 0b00010001,0b00010001,0b00010001,0b00011111,0b00010001,0b00010001,0b00010001,0b00000000, 00075 */ 00076 0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S 00077 0x11,0x11,0x11,0x15,0x15,0x15,0x0A,0x00, // W 00078 0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I 00079 0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // T 00080 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C 00081 0x11,0x11,0x11,0x1F,0x11,0x11,0x11,0x00, // H 00082 /* 00083 0b00001111,0b00010000,0b00010000,0b00001110,0b00000001,0b00000001,0b00011110,0b00000000, 00084 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, 00085 0b00001110,0b00000100,0b00000100,0b00000100,0b00000100,0b00000100,0b00001110,0b00000000, 00086 0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000, 00087 0b00010001,0b00010001,0b00011001,0b00010101,0b00010011,0b00010001,0b00010001,0b00000000, 00088 0b00001110,0b00010001,0b00010000,0b00010000,0b00010000,0b00010001,0b00001110,0b00000000, 00089 0b00011111,0b00010000,0b00010000,0b00011110,0b00010000,0b00010000,0b00011111,0b00000000, 00090 */ 00091 0x0F,0x10,0x10,0x0E,0x01,0x01,0x1E,0x00, // S 00092 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C 00093 0x0E,0x04,0x04,0x04,0x04,0x04,0x0E,0x00, // I 00094 0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00, // E 00095 0x11,0x11,0x19,0x15,0x13,0x11,0x11,0x00, // N 00096 0x0E,0x11,0x10,0x10,0x10,0x11,0x0E,0x00, // C 00097 0x1F,0x10,0x10,0x1E,0x10,0x10,0x1F,0x00 // E 00098 }; 00099 00100 void setCG(int src,int dst,int len) { 00101 lcd_cmd(0x38); 00102 lcd_cmd(0x40 + dst); 00103 if (src >= 0) { 00104 for (int i = 0;i < len;i++) lcd_printHex(cg[src + i]); 00105 } else { 00106 for (int i = 0;i < len;i++) lcd_printHex(0); 00107 } 00108 } 00109 00110 void setContrast(unsigned char c) { 00111 lcd_cmd(0x39); 00112 lcd_cmd(0x70 | (c & 0x0f)); // contrast Low 00113 lcd_cmd(0x5C | ((c >> 4) & 0x03)); // contast High/icon/power 00114 lcd_cmd(0x38); 00115 } 00116 00117 //int main() { 00118 int test() { 00119 lcd_init(); 00120 contrast = 35; 00121 setContrast(contrast); 00122 lcd_setCursor(0, 0); 00123 lcd_printStr("SATO"); 00124 lcd_setCursor(1, 1); 00125 lcd_printStr("SEI"); 00126 00127 while(1); 00128 00129 00130 while(1) { 00131 switch(mode) { 00132 case 0: // init 00133 lcd_setCursor(0, 0); 00134 for (int i = 0;i < 6;i++) lcd_printHex(i); 00135 lcd_setCursor(1, 1); 00136 lcd_printStr(" "); 00137 setCG(-1,0,6 * 8); 00138 contrast = 35; 00139 setContrast(contrast); 00140 CGcounter = 0; 00141 mode++; 00142 break; 00143 case 1: // SWITCH 00144 if(CGcounter <= (6 * 8)) { 00145 setCG((CGcounter / 8) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); 00146 CGcounter++; 00147 } else { 00148 lcd_setCursor(0, 0); 00149 lcd_printStr("SWITCH"); 00150 setCG(-1,0,3 * 8); 00151 lcd_setCursor(1, 1); 00152 for (int i = 0;i < 3;i++) lcd_printHex(i); 00153 CGcounter = 0; 00154 mode++; 00155 } 00156 break; 00157 case 2: // SCI 00158 if(CGcounter <= (3 * 8)) { 00159 setCG(((CGcounter / 8) + 6) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); 00160 CGcounter++; 00161 } else { 00162 lcd_setCursor(1, 1); 00163 lcd_printStr("SCI"); 00164 setCG(-1,0,4 * 8); 00165 lcd_setCursor(4, 1); 00166 for (int i = 0;i < 4;i++) lcd_printHex(i); 00167 CGcounter = 0; 00168 mode++; 00169 } 00170 break; 00171 case 3: // ENCE 00172 if(CGcounter <= (4 * 8)) { 00173 setCG(((CGcounter / 8) + 9) * 8,((CGcounter / 8) * 8) + 7 - (CGcounter % 8),CGcounter % 8); 00174 CGcounter++; 00175 } else { 00176 lcd_setCursor(4, 1); 00177 lcd_printStr("ENCE"); 00178 FADEcounter = 0; 00179 mode++; 00180 } 00181 break; 00182 case 4: 00183 if (contrastFlag == false) { 00184 if (++contrast >= 54) contrastFlag = true; 00185 } else { 00186 if (--contrast <= 17) { 00187 contrastFlag = false; 00188 if(++FADEcounter >= 2) { 00189 mode = 0; 00190 } 00191 } 00192 } 00193 setContrast(contrast); 00194 break; 00195 } 00196 wait(0.05); 00197 } 00198 }
Generated on Wed Jul 27 2022 08:01:45 by
1.7.2